2013-07-09 7 views
17

zrobić to regresji liniowej z StatsModels:ufności i predykcyjne przedziały z 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) 

Moje pytania są, iv_l i iv_u są górne i dolne przedziały ufności lub przedziały predykcji ?? Jak mogę dostać drugą ?? (Potrzebuję przedziałów ufności i predykcji dla wszystkich punktów, aby zrobić działkę)

Odpowiedz

18

iv_l, iv_u podaje ograniczenia przedziału prognozy dla każdego punktu.

patrz pierwsza fabuła tutaj http://statsmodels.sourceforge.net/devel/examples/generated/example_ols.html

przedział Przewidywanie jest przedział ufności dla obserwacji i zawiera oszacowanie błędu.

Myślę, że przedział ufności dla średniej prognozy nie jest jeszcze dostępny w statsmodels. (Rzeczywiście, przedział ufności dla dopasowanych wartości ukrywa się w podsumowaniu_tablicy wpływów, ale muszę to zweryfikować.)

Właściwe metody przewidywania dla modeli statystyk znajdują się na liście TODO.

Dodawanie

Przedziały ufności są dla OLS ale dostęp jest nieco niezdarny.

Aby zostać włączone po uruchomieniu skryptu:

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

To powinno dać takie same wyniki jak SAS, http://jpktd.blogspot.ca/2012/01/nice-thing-about-seeing-zeros.html

+1

Jedną z kwestii związanych z tą metodą jest to, że jeśli punkty są rzadkie, 'predict_mean_ci_low' i' predict_mean_ci_upp' będą postrzępione/spiczaste po wykreśleniu, ponieważ istnieją tylko w dopasowanych wartościach, zamiast w zakresie punktów. Jednak linia dopasowania jest zdefiniowana dla wszystkich punktów. Istnieje komentarz, który mówi, że użycie "hat_matrix działa tylko dla dopasowanych wartości" w https://github.com/statsmodels/statsmodels/blob/master/statsmodels/stats/outliers_influence.py#L693 - jakikolwiek pomysł na obejście że? –

+0

Mam problem ze stosowaniem tej odpowiedzi do mojego zestawu danych, Wysłany jako oddzielny tutaj pytanie: http://stackoverflow.com/questions/34998772/plotting-confidence-and-prediction-intervals-with-repeated-entries. Każda rada bardzo doceniona! – PJW

1

Można uzyskać przedziały predykcji za pomocą LRPI() klasy z notatnika Ipython w moim repozytorium (https://github.com/shahejokarian/regression-prediction-interval).

Należy ustawić wartość t, aby uzyskać żądany przedział ufności dla wartości predykcyjnych, w przeciwnym razie wartość domyślna to 95% wartości domyślnej. interwał.

Klasa LRPI korzysta z bibliotek liniowych, numpy i pand sklearn.linear_model.

Istnieje przykład pokazany również w notatniku.

4

Dla danych testowych można spróbować użyć poniższych.

predictions = result.get_prediction(out_of_sample_df) 
predictions.summary_frame(alpha=0.05) 

znalazłem sposób summary_frame() pochowany here i można znaleźć metodę here get_prediction(). Możesz zmienić poziom istotności przedziału ufności i przedziału predykcji, modyfikując parametr "alpha".

Zamieszczam to tutaj, ponieważ był to pierwszy wpis, który pojawia się, gdy poszukuje się rozwiązania dla pewności siebie. Interwały predykcyjne - mimo że dotyczy to raczej danych testowych.

Powiązane problemy