如何在 Python 中对面板数据进行多级模型/回归?

机器算法验证 回归 Python 重复测量 面板数据 多层次分析
2022-04-07 02:56:33

我有随时间推移的年度数据(纵向数据),并对许多受试者进行重复测量。我认为我需要多级建模/回归来处理随着时间的推移对同一个人的肯定相关的测量集群。目前每年的数据都在单独的表格中。

我想知道 scikit-learn 中是否有一种内置方法,比如 LinearRegression(),它能够进行多级回归,其中 Level 1 是多年来的所有数据,Level 2 是集群上的受试者(每个受试者随时间测量的集群)。如果是这样,最好将纵向数据纵向排列(每个受试者随时间的测量都在一行中)或堆叠(每年的每个测量都是它自己的行)。

有没有办法做到这一点?

1个回答

线性回归不适用于多级模型。

混合效应模型是拟合大多数多级模型的好方法。

在 python 中,您可以使用mixedlm. statsmodels例如:

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                            
========================================================