2013-07-09 18 views
17

faccio questo regressione lineare con StatsModels:fiducia e di previsione intervalli con 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) 

Le mie domande sono, iv_l e iv_u sono gli intervalli di confidenza superiore e inferiore o intervalli di previsione ?? Come ottengo l'altro ?? (Ho bisogno degli intervalli di confidenza e previsione per tutti i punti, per fare la trama)

risposta

18

iv_l, iv_u fornisce i limiti dell'intervallo di previsione per ciascun punto.

vedere il primo lotto qui http://statsmodels.sourceforge.net/devel/examples/generated/example_ols.html

intervallo di previsione è l'intervallo di confidenza per un'osservazione e comprende la stima dell'errore.

Penso che l'intervallo di confidenza per la previsione media non sia ancora disponibile nei modelli di statistiche. (In realtà, l'intervallo di confidenza per i valori corretti si nasconde all'interno del summary_table di influence_outlier, ma devo verificarlo.)

I metodi di predizione corretti per i modelli di statistiche sono presenti nell'elenco TODO.

aggiunta

Gli intervalli di confidenza sono lì per OLS ma l'accesso è un po 'goffo.

Per essere inclusi dopo l'esecuzione dello 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

Questo dovrebbe dare gli stessi risultati come SAS, http://jpktd.blogspot.ca/2012/01/nice-thing-about-seeing-zeros.html

+1

Un problema con questo metodo è che se i punti sono sparsi, 'predict_mean_ci_low' e' predicict_mean_ci_upp' saranno frastagliati/appuntiti quando tracciati perché esistono solo sui valori adattati, invece che su un intervallo di punti. Tuttavia, la linea di adattamento è definita per tutti i punti. C'è un commento che dice "usando hat_matrix funziona solo per valori corretti" in https://github.com/statsmodels/statsmodels/blob/master/statsmodels/stats/outliers_influence.py#L693 - qualche idea su come muoversi quella? –

+0

Ho un problema con l'applicazione di questa risposta al mio set di dati, pubblicato come domanda separata qui: http://stackoverflow.com/questions/34998772/plotting-confidence-and-prediction-intervals-with-repeated-entries. Qualche consiglio molto apprezzato! – PJW

1

È possibile ottenere gli intervalli di previsione utilizzando LRPI() della classe dal notebook Ipython nel mio repository (https://github.com/shahejokarian/regression-prediction-interval).

È necessario impostare il valore t per ottenere l'intervallo di confidenza desiderato per i valori di predizione, altrimenti l'impostazione predefinita è 95% conf. intervallo.

La classe LRPI utilizza le librerie LinearRegression, numpy e pandas di sklearn.linear_model.

C'è anche un esempio mostrato nel notebook.

4

Per i dati di prova, è possibile provare a utilizzare quanto segue.

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

ho trovato il metodo summary_frame() sepolto here e si può trovare il metodo here get_prediction(). È possibile modificare il livello di significatività dell'intervallo di confidenza e dell'intervallo di predizione modificando il parametro "alpha".

Sto postando questo qui perché questo è stato il primo post che viene fuori quando si cerca una soluzione per gli intervalli di predizione di fiducia & - anche se questo si preoccupa di dati di test piuttosto.

Problemi correlati