Формула StatsModels Полиномиальная регрессия не соответствует numpy коэффициентам polyfit - PullRequest
1 голос
/ 07 февраля 2020

Моя полиномиальная регрессия с использованием формулы statsmodels не соответствует коэффициентам nupy polyfit.

Ссылка на данные https://drive.google.com/file/d/1fQuCoCF_TeXzZuUFyKaHCbD1zle2f1MF/view?usp=sharing

Ниже приведен мой код

import numpy as np
import pandas as pd
import scipy
import statsmodels.formula.api as smf

data = pd.read_csv('sp500.csv')

data['Date_Ordinal'] = pd.to_datetime(data['Date']).apply(lambda date: date.toordinal())

x = data['Date_Ordinal']
y = data['Value']

np.polyfit(x,y,2)

model = smf.ols(formula='y ~ x + I(x**2)', data = data).fit()
model.summary()

Numpy Результаты коэффициента полифита:

массив ([4.17939013e-05, -6.09338454e + 01, 2.22098809e + 07])

Результаты коэффициента Statsmodels:

x ** 2: 7,468e-07

x: -0,5466

Перехват: -1,486e-06

Когда я добавляю квадратичную линию тренда c к данным в Excel, результаты Excel совпадают с коэффициентами numpy. Однако, если я добавлю точку пересечения 1 к линии тренда Excel, коэффициенты для x ** 2 и x будут равны коэффициентам statsmodels, но перехват Excel станет равным 1, где в качестве пересечения statsmodels используется -1.486e-06.

Если удалить перехват из формулы statsmodels, вычтя 1, то все, что он делает - это полностью исключает перехват из результатов statsmodels, но коэффициенты остаются прежними.

Как мне получить statsmodels, чтобы показать те же результаты коэффициента, numpy полифит и Excel?

1 Ответ

1 голос
/ 07 февраля 2020

Полиномы могут стать очень плохо масштабируемыми, если базовые данные не находятся в небольшом диапазоне около нуля. Как следствие, вычисления становятся нестабильными в числовом выражении, и в результатах могут преобладать числовые шумы.

http://jpktd.blogspot.com/2012/03/numerical-accuracy-in-linear-least.html рассматривает контрольный пример NIST с полиномами, которые очень плохо масштабируются, и многие статистические пакеты не может дать численно устойчивое решение.

Numpy полиномиальная подгонка может внутренне перемасштабировать переменные перед созданием полиномиальной базисной функции.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...