我正在尝试从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是前面示例中的resid,而groupid相同。
1)我不确定mdf.random_effects是否是我正在寻找的随机截距
2)我无法删除变量B,我知道这是固定效果部分。如果我尝试:
md = smf.mixedlm('A~-1',data=df,groups=df['groupid'])
我收到“数组不能为空”的错误消息。
只需尝试估计与R代码中完全相同的模型即可。任何建议将不胜感激。