从2D到1D,如何在混合模型中传递第二个随机效应[Python,Statsmodel]

J.A*_*ado 1 python dataframe pandas statsmodels

构建此问题:Q

假设我有一个这样的数据框:

import pandas as pd
d = {'y':[1.2,2.41,3.12,4.76],'x':['A','B'],'r1':['a','b','c','d'],'r2':['a2','b2','c2','d2']}
df = pd.DataFrame(d)
Run Code Online (Sandbox Code Playgroud)

y 是连续变量。x 是分类的并且是固定分量。它是二进制的。r1、r2 是分类的。它们是随机成分。

我会将其传递给混合模型,如下所示:

import statsmodels.formula.api as smf
md = smf.mixedlm("y ~ x", df, groups=df["r1"], re_formula="~ r1")
Run Code Online (Sandbox Code Playgroud)

这很好用。

但现在我想添加第二个随机变量,但这只能作为一维数组来完成...而且我不知道如何重新排列我将两个变量传递给的数据groups作为一维数组

因此总结一下:如何以这种方式重新排列数据框,以便我可以将 2 个变量作为groups一维数组传递?请显示其语法。

mak*_*kis 5

所以你需要crossed random effects models.

从文档中:

Statsmodels MixedLM 处理大多数非交叉随机效应模型和一些交叉模型。要在模型中包含交叉随机效应,必须将整个数据集视为单个组。然后,模型的方差分量参数可用于定义具有交叉和非交叉随机效应的各种组合的模型。


由于您需要一个没有独立组的交叉模型,因此您需要将每个人放在同一组中,并使用方差分量指定随机效应。

import pandas as pd                                                                                                        
import statsmodels.api as sm                                                                                               

d = {'y':[1,2,3,4],'x':[1,2,3,4],'r1':[1,2,3,4],'r2':[1,2,3,4]}
df = pd.DataFrame(d)                                                                                                          
df["group"] = 1    # all in the case group                                                                                                        

vcf = {"r1": "0 + C(r1)", "r2": "0 + C(r2)"}  # formula                                                        
model = sm.MixedLM.from_formula("y ~ x", groups="group",                                                    
                                vc_formula=vcf, re_formula="~r1", data=df)                                                   
result = model.fit()  
Run Code Online (Sandbox Code Playgroud)