Понимание statsmodels линейной регрессии - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь соответствовать модели линейной регрессии, реализованной в библиотеке statsmodels.

У меня есть сомнения относительно метода fit().Допустим, у меня есть выборка данных размером 15, и я разбил ее на 3 части и соответствовал модели.Будет ли вызов для каждого fit() соответствовать модели или будет перезаписывать предыдущие значения.

import numpy as np
import statsmodels.api as sm

# First call
X = [377, 295, 457, 495, 9] # independent variable
y = [23, 79, 16, 41, 40]    # dependent variable
X = sm.add_constant(X)
ols = sm.OLS(y,X).fit()
#print(ols.summary())

# Second call
X = [243, 493, 106, 227, 334]
y = [3, 5, 1, 62, 92]
X = sm.add_constant(X)
ols = sm.OLS(y,X).fit()
#print(ols.summary())

# Third call
X = [412, 332, 429, 96, 336] 
y = [30, 1, 99, 4, 33]
X = sm.add_constant(X)
ols = sm.OLS(y,X).fit()
#print(ols.summary())

scores = [9, 219, 200, 134, 499]
scores = sm.add_constant(scores)
print(ols.predict(scores))

1 Ответ

0 голосов
/ 01 июня 2018

Каждый вызов sm.OLS(y,X) создает новый экземпляр модели, каждый вызов .fit() создает новый экземпляр результатов со ссылкой на базовую модель.Экземпляры не зависят друг от друга, то есть они не имеют общих атрибутов, за исключением, возможно, базовых данных.

Однако в вашем примере вы присваиваете одно и то же имя ols каждому из результатов регрессии, поэтомуимя ols относится только к последнему экземпляру.

подробнее:

Создание модели, такой как sm.OLS(y,X), не копирует данные y и X, если копирование не требуется.В частности, если y и X - nndy ndarrays, тогда копия не требуется.(Технически поведение преобразования и копирования зависит от np.asarray (y) и np.asarray (X))

Повторные вызовы метода fit каждый раз создают новый экземпляр результатов, но они содержат ссылкук той же модели экземпляра.Например, мы можем вызвать соответствие с различными опциями cov_type, которые создадут ковариацию оценок параметров, используя разные допущения.

model = sm.OLS(y,X)
ols_nonrobust = model.fit()
ols_hc = model.fit(cov_type="HC3")

В большинстве моделей вся соответствующая информация из подборки прикрепляется к экземпляру результатов.В приведенном выше случае мы можем рассматривать оба экземпляра результатов одновременно, например, при сравнении стандартных ошибок параметров

ols_nonrobust.bse
ols_hc.bse

statsmodels все еще имеет несколько случаев в RLM и некоторых моделях временных рядов, где некоторые параметры подгонки могут изменитьсябазовая модель.В этом случае только последний экземпляр результатов, созданный методом fit, будет иметь правильные атрибуты модели.Эти случаи хороши, если мы вписываемся в цикл, где нам нужны только последние экземпляры, но могут показывать неверные результаты, если несколько экземпляров результатов используются одновременно и они ссылаются на один и тот же базовый экземпляр модели.http://www.statsmodels.org/devel/pitfalls.html#repeated-calls-to-fit-with-different-parameters

...