Доверие и интервалы прогнозирования с помощью 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.

В ноутбуке также есть пример.