Доверие и интервалы прогнозирования с помощью StatsModels
Я делаю эту линейную регрессию с помощью StatsModels:
import numpy as np
import statsmodels.api as sm
from statsmodels.sandbox.regression.predstd import wls_prediction_std
#measurements genre
nmuestra = 100
x = np.linspace(0, 10, nmuestra)
e = np.random.normal(size=nmuestra)
y = 1 + 0.5*x + 2*e
X = sm.add_constant(x)
re = sm.OLS(y, X).fit()
print re.summary() #print the result type Stata
prstd, iv_l, iv_u = wls_prediction_std(re)
Мои вопросы: iv_l и iv_u - верхний и нижний доверительные интервалы или интервалы прогнозирования? Как я получаю другой? (Мне нужно доверие и интервалы предсказания для всех точек, чтобы делать как сюжет)
Ответы
Ответ 1
iv_l, iv_u
дает вам пределы интервала предсказания для каждой точки.
см. первый участок здесь
http://statsmodels.sourceforge.net/devel/examples/generated/example_ols.html
Интервал прогноза - это доверительный интервал для наблюдения и включает оценку ошибки.
Я думаю, что доверительный интервал для среднего предсказания пока недоступен в статистических моделях.
(Фактически, доверительный интервал для установленных значений скрывается внутри итоговой таблицы влияния_outlier, но мне нужно проверить это.)
Правильные методы прогнозирования для statsmodels находятся в списке TODO.
Добавление
Доверительные интервалы существуют для OLS, но доступ немного неуклюжий.
Чтобы включить его после запуска script:
from statsmodels.stats.outliers_influence import summary_table
st, data, ss2 = summary_table(re, alpha=0.05)
fittedvalues = data[:,2]
predict_mean_se = data[:,3]
predict_mean_ci_low, predict_mean_ci_upp = data[:,4:6].T
predict_ci_low, predict_ci_upp = data[:,6:8].T
# check we got the right things
print np.max(np.abs(re.fittedvalues - fittedvalues))
print np.max(np.abs(iv_l - predict_ci_low))
print np.max(np.abs(iv_u - predict_ci_upp))
plt.plot(x, y, 'o')
plt.plot(x, fittedvalues, '-', lw=2)
plt.plot(x, predict_ci_low, 'r--', lw=2)
plt.plot(x, predict_ci_upp, 'r--', lw=2)
plt.plot(x, predict_mean_ci_low, 'r--', lw=2)
plt.plot(x, predict_mean_ci_upp, 'r--', lw=2)
plt.show()
![enter image description here]()
Это должно дать те же результаты, что и SAS, http://jpktd.blogspot.ca/2012/01/nice-thing-about-seeing-zeros.html
Ответ 2
Для тестовых данных вы можете попытаться использовать следующее.
predictions = result.get_prediction(out_of_sample_df)
predictions.summary_frame(alpha=0.05)
Я нашел метод summary_frame() похож на здесь, и вы можете найти метод get_prediction() здесь. Вы можете изменить уровень значимости доверительного интервала и интервала предсказания, изменив параметр "альфа".
Я размещаю это здесь, потому что это было первое сообщение, которое появляется при поиске решения для уверенности и интервалов прогнозирования, даже если это касается самих тестовых данных.
Ответ 3
Вы можете получить интервалы прогнозирования, используя класс LRPI() из ноутбука Ipython в моем репо (https://github.com/shahejokarian/regression-prediction-interval).
Вам нужно установить значение t, чтобы получить желаемый доверительный интервал для значений прогноза, в противном случае значение по умолчанию - 95% conf. интервал.
В классе LRPI используются библиотеки sklearn.linear_model LinearRegression, numpy и pandas.
В ноутбуке также есть пример.