如何添加多个随机效果? [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.
因此,您需要将整个数据集放入一个类似于一维数组的结构中,以便将第二个随机变量传递给它。
我一直在使用 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.
因此,您需要将整个数据集放入一个类似于一维数组的结构中,以便将第二个随机变量传递给它。