如何添加多个随机效果? [Python, 统计模型]

How to add multiple random effects? [Python, Statsmodel]

我一直在使用 statsmodel 库浏览 python 中令人惊叹的 tutorial on mixed models

我指定了一个模型:

md = smf.mixedlm("Y~ X", df, groups=df["random"])
mdf = md.fit()

但现在我想添加第二个随机变量。我认为这将非常简单,只需将 list 传递到我的数据框 df 中:

md = smf.mixedlm("Y~ X", df, groups=df[["random1","random2"]])
mdf = md.fit()

但这不起作用。

如何在我的混合模型中添加第二个随机变量?

当你这样做时,你并没有向它传递一个列表:

groups=df[["random1","random2"]]

您正在向它传递一个由这两列构成的新数据框。

参见:

import pandas as pd

df = pd.read_csv('something.csv')

print(type(df['a']))

>>><class 'pandas.core.series.Series'>

print(type(df[['a', 'b']]))

>>><class 'pandas.core.frame.DataFrame'>

print(type([df['a'], df['b']]))

>>><class 'list'>

如果您查看 mixedlm (https://www.statsmodels.org/devel/generated/statsmodels.regression.mixed_linear_model.MixedLM.html) 的文档,您会发现 groups 属性只接受类似于一维数组的输入,这就是为什么您不能将数据框传递给它的原因.文档还说:

To include crossed random effects in a model, it is necessary to treat the entire dataset as a single group.

因此,您需要将整个数据集放入一个类似于一维数组的结构中,以便将第二个随机变量传递给它。