Mi rendo conto che questo argomento è emerso diverse volte prima, ad esempio qui , ma non sono ancora sicuro del modo migliore per interpretare il mio output di regressione.
Ho un set di dati molto semplice, composto da una colonna di valori x e una colonna di valori y , suddivisi in due gruppi in base alla posizione (loc). I punti sembrano così
Un collega ha ipotizzato che dovremmo adattare regressioni lineari semplici separate a ciascun gruppo, che ho fatto usando y ~ x * C(loc)
. L'output è mostrato di seguito.
OLS Regression Results
==============================================================================
Dep. Variable: y R-squared: 0.873
Model: OLS Adj. R-squared: 0.866
Method: Least Squares F-statistic: 139.2
Date: Mon, 13 Jun 2016 Prob (F-statistic): 3.05e-27
Time: 14:18:50 Log-Likelihood: -27.981
No. Observations: 65 AIC: 63.96
Df Residuals: 61 BIC: 72.66
Df Model: 3
Covariance Type: nonrobust
=================================================================================
coef std err t P>|t| [95.0% Conf. Int.]
---------------------------------------------------------------------------------
Intercept 3.8000 1.784 2.129 0.037 0.232 7.368
C(loc)[T.N] -0.4921 1.948 -0.253 0.801 -4.388 3.404
x -0.6466 0.230 -2.807 0.007 -1.107 -0.186
x:C(loc)[T.N] 0.2719 0.257 1.057 0.295 -0.242 0.786
==============================================================================
Omnibus: 22.788 Durbin-Watson: 2.552
Prob(Omnibus): 0.000 Jarque-Bera (JB): 121.307
Skew: 0.629 Prob(JB): 4.56e-27
Kurtosis: 9.573 Cond. No. 467.
==============================================================================
Osservando i valori di p per i coefficienti, la variabile fittizia per posizione e il termine di interazione non sono significativamente diversi da zero, nel qual caso il mio modello di regressione si riduce essenzialmente alla sola linea rossa sul diagramma sopra. Per me, ciò suggerisce che l'adattamento di linee separate ai due gruppi potrebbe essere un errore e un modello migliore potrebbe essere una singola linea di regressione per l'intero set di dati, come mostrato di seguito.
OLS Regression Results
==============================================================================
Dep. Variable: y R-squared: 0.593
Model: OLS Adj. R-squared: 0.587
Method: Least Squares F-statistic: 91.93
Date: Mon, 13 Jun 2016 Prob (F-statistic): 6.29e-14
Time: 14:24:50 Log-Likelihood: -65.687
No. Observations: 65 AIC: 135.4
Df Residuals: 63 BIC: 139.7
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [95.0% Conf. Int.]
------------------------------------------------------------------------------
Intercept 8.9278 0.935 9.550 0.000 7.060 10.796
x -1.2446 0.130 -9.588 0.000 -1.504 -0.985
==============================================================================
Omnibus: 0.112 Durbin-Watson: 1.151
Prob(Omnibus): 0.945 Jarque-Bera (JB): 0.006
Skew: 0.018 Prob(JB): 0.997
Kurtosis: 2.972 Cond. No. 81.9
==============================================================================
Questo mi sembra visivamente corretto, e i valori di p per tutti i coefficienti sono ora significativi. Tuttavia, l'AIC per il secondo modello è molto più alto rispetto al primo.
Mi rendo conto che la scelta del modello è molto più che solo valori P o solo l'AIC, ma non sono sicuro di cosa fare di questo. Qualcuno può offrire qualche consiglio pratico per quanto riguarda l'interpretazione di questo risultato e la scelta di un modello appropriato, per favore ?
A mio avviso, la singola linea di regressione sembra OK (anche se mi rendo conto che nessuno di loro è particolarmente buono), ma sembra che ci sia almeno qualche giustificazione per il montaggio di modelli separati (?).
Grazie!
Modificato in risposta ai commenti
@Cagdas Ozgenc
Il modello a due linee è stato montato utilizzando le statsmodel di Python e il seguente codice
reg = sm.ols(formula='y ~ x * C(loc)', data=df).fit()
A quanto ho capito, si tratta essenzialmente di una scorciatoia per un modello come questo
dove è una variabile binaria "fittizia" che rappresenta la posizione. In pratica si tratta essenzialmente solo di due modelli lineari, non è vero? Quando , e il modello si riduce al o c = D l = 0
che è la linea rossa nella trama sopra. Quando , e il modello divental = 1
che è la linea blu sulla trama sopra. L'AIC per questo modello viene riportato automaticamente nel riepilogo statsmodels. Per il modello a una linea ho semplicemente usato
reg = ols(formula='y ~ x', data=df).fit()
Penso che sia ok?
@ user2864849
Non credo che il modello di singola linea è ovviamente meglio, ma mi preoccupo di come mal vincolata la linea di regressione per è. Le due posizioni (D e N) sono molto distanti nello spazio, e non sarei affatto sorpreso se la raccolta di dati aggiuntivi da qualche parte nel mezzo producesse punti che tracciavano approssimativamente tra i cluster rosso e blu che già ho. Non ho ancora dati per eseguire il backup, ma non penso che il modello a linea singola sia troppo terribile e mi piace mantenere le cose il più semplice possibile :-)
Modifica 2
Solo per completezza, ecco i grafici residui come suggerito da @whuber. Il modello a due linee sembra davvero molto migliore da questo punto di vista.
Modello a due linee
Modello a una riga
Ringrazia tutti!