Каждый вызов 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