首页 > 解决方案 > Python:随机截取模型(必须复制 R 代码)

问题描述

我正在尝试从 R 中复制估计随机截距模型的代码。R代码是:

fit=lmer(resid~-1+(1|groupid),data=df)

我正在使用 lme4 包的 lmer 命令来估计变量 resid 的随机截距,以观察不同组(由 groupid 定义)中的观察值。没有“固定效果”部分,因此 (1|groupid) 之前没有变量。此外,我不想要一个常数估计,以便我得到每个组的截距。

不知道如何在 Python 中进行类似的估计。我试过类似的东西:

import pandas as pd
import numpy as np
import statsmodels.formula.api as smf

np.random.seed(12345)
df = pd.DataFrame(np.random.randn(25, 4), columns=list('ABCD'))

df['groupid'] = [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5]
df['groupid'] = df['groupid'].astype('category')

###Random intercepts models

md = smf.mixedlm('A~B-1',data=df,groups=df['groupid'])
mdf = md.fit()
print(mdf.random_effects)

A 是前面示例中的残基,而 groupid 是相同的。

1)我不确定 mdf.random_effects 是否是我正在寻找的随机截距

2)我无法删除变量 B,我理解它是固定效应部分。如果我尝试:

md = smf.mixedlm('A~-1',data=df,groups=df['groupid'])

我收到“数组不能为空”的错误。

只是试图估计与 R 代码中完全相同的模型。任何建议将被认真考虑。

标签: pythonrmulti-levelmultilevel-analysis

解决方案


推荐阅读