【发布时间】:2016-08-25 18:50:35
【问题描述】:
我正在尝试使用 Python statsmodels 线性混合效应模型来拟合具有两个随机截距的模型,例如两组。我无法弄清楚如何初始化模型以便我可以做到这一点。
这是一个例子。我的数据如下所示(取自here):
subject gender scenario attitude frequency
F1 F 1 pol 213.3
F1 F 1 inf 204.5
F1 F 2 pol 285.1
F1 F 2 inf 259.7
F1 F 3 pol 203.9
F1 F 3 inf 286.9
F1 F 4 pol 250.8
F1 F 4 inf 276.8
我想制作一个具有两种随机效应的线性混合效应模型——一种用于主题组,一种用于场景组。我正在尝试这样做:
import statsmodels.api as sm
model = sm.MixedLM.from_formula("frequency ~ attitude + gender", data, groups=data[['subject', 'scenario']])
result = model.fit()
print result.summary()
我不断收到此错误:
LinAlgError: Singular matrix
它在 R 中运行良好。当我在 R 中使用 lme4 和基于公式的渲染时,它非常适合:
politeness.model = lmer(frequency ~ attitude + gender +
(1|subject) + (1|scenario), data=politeness)
我不明白为什么会这样。当我使用任何一个随机效果/组时它都有效,例如
model = sm.MixedLM.from_formula("frequency ~ attitude + gender", data, groups=data['subject'])
然后我得到:
Mixed Linear Model Regression Results
===============================================================
Model: MixedLM Dependent Variable: frequency
No. Observations: 83 Method: REML
No. Groups: 6 Scale: 850.9456
Min. group size: 13 Likelihood: -393.3720
Max. group size: 14 Converged: Yes
Mean group size: 13.8
---------------------------------------------------------------
Coef. Std.Err. z P>|z| [0.025 0.975]
---------------------------------------------------------------
Intercept 256.785 15.226 16.864 0.000 226.942 286.629
attitude[T.pol] -19.415 6.407 -3.030 0.002 -31.972 -6.858
gender[T.M] -108.325 21.064 -5.143 0.000 -149.610 -67.041
Intercept RE 603.948 23.995
===============================================================
或者,如果我这样做:
model = sm.MixedLM.from_formula("frequency ~ attitude + gender", data, groups=data['scenario'])
这是我得到的结果:
Mixed Linear Model Regression Results
================================================================
Model: MixedLM Dependent Variable: frequency
No. Observations: 83 Method: REML
No. Groups: 7 Scale: 1110.3788
Min. group size: 11 Likelihood: -402.5003
Max. group size: 12 Converged: Yes
Mean group size: 11.9
----------------------------------------------------------------
Coef. Std.Err. z P>|z| [0.025 0.975]
----------------------------------------------------------------
Intercept 256.892 8.120 31.637 0.000 240.977 272.807
attitude[T.pol] -19.807 7.319 -2.706 0.007 -34.153 -5.462
gender[T.M] -108.603 7.319 -14.838 0.000 -122.948 -94.257
Intercept RE 182.718 5.502
================================================================
我不知道发生了什么。我觉得我在问题的统计数据中遗漏了一些基础知识。
【问题讨论】:
-
请不要包含数据的图像,而应包含文本。更好的是,以某种方式包含数据,而不是允许可重复的示例。执行此操作时,请花一些时间阅读您的问题并修复一些缺失的元素。例如,“或者,如果我这样做:”后跟空格。
-
@lmo 感谢您的反馈。我不确定如何将表格格式化为文本——比如代码?还修复了原帖中的错误。
-
可能值得查看带有 statmodel 标签的 python 问题,看看其他人是如何做到的。
-
... 也... 我会(强烈)建议您删除问题的最后三句话。您感到沮丧是可以理解的,但抱怨免费软件通常无法激励编写它的人来帮助您……(也许您可以自愿/提出一些建议来改进文档?)
-
我不太了解 statsmodels 平台,但我想 github.com/statsmodels/statsmodels 并打开一个新问题,询问文档帮助如何/在哪里最有用。或者,如果您觉得大胆,请阅读 Github 的工作原理(如有必要),分叉存储库,进行一些有用的文档更改,然后提交拉取请求。
标签: python r statsmodels lme4 mixed-models