Come condurre un modello / regressione multilivello per i dati del pannello in Python?

Oct 16 2020

Ho dati annuali nel tempo (dati longitudinali) con misure ripetute per molti dei soggetti. Penso di aver bisogno di modelli / regressioni multilivello per gestire cluster di misurazioni sicuramente correlate per gli stessi individui nel tempo. I dati sono attualmente in tabelle separate per ogni anno.

Mi chiedevo se ci fosse un modo che è stato integrato in scikit-learn, come LinearRegression (), che sarebbe in grado di condurre una regressione multilivello in cui il livello 1 è tutti i dati nel corso degli anni e il livello 2 è per il cluster sul soggetti (gruppi per le misurazioni di ciascun soggetto nel tempo). E se è così, se è meglio avere i dati longitudinali disposti longitudinalmente (dove le misure di ogni soggetto nel tempo sono tutte in una riga) o impilate (dove ogni misura per ogni anno è la propria riga).

C'è un modo per fare questo?

Risposte

4 RobertLong Oct 21 2020 at 16:59

La regressione lineare non sarà adatta per un modello multilivello.

Un modello a effetti misti è un buon modo per adattarsi alla maggior parte dei modelli multilivello.

In Python puoi usare mixedlmin statsmodels. Per esempio:

In [1]: import statsmodels.api as sm

In [2]: import statsmodels.formula.api as smf

In [3]: data = sm.datasets.get_rdataset("dietox", "geepack").data

In [4]: md = smf.mixedlm("Weight ~ Time", data, groups=data["Pig"])

In [5]: mdf = md.fit()

In [6]: print(mdf.summary())
         Mixed Linear Model Regression Results
========================================================
Model:            MixedLM Dependent Variable: Weight    
No. Observations: 861     Method:             REML      
No. Groups:       72      Scale:              11.3669   
Min. group size:  11      Log-Likelihood:     -2404.7753
Max. group size:  12      Converged:          Yes       
Mean group size:  12.0                                  
--------------------------------------------------------
             Coef.  Std.Err.    z    P>|z| [0.025 0.975]
--------------------------------------------------------
Intercept    15.724    0.788  19.952 0.000 14.179 17.268
Time          6.943    0.033 207.939 0.000  6.877  7.008
Group Var    40.394    2.149                            
========================================================