我目前正在编写Andy Field的书“使用R发现统计数据”。第14章介绍混合建模,他使用lme
包中的nlme
函数。
他使用快速约会数据创建的模型如下:
speedDateModel <- lme(dateRating ~ looks + personality +
gender + looks:gender + personality:gender +
looks:personality,
random = ~1|participant/looks/personality)
我尝试使用lmer
包中的lme4
函数重新创建类似的模型;但是,我的结果是不同的。我以为我有正确的语法,但也许不是?
speedDateModel.2 <- lmer(dateRating ~ looks + personality + gender +
looks:gender + personality:gender +
(1|participant) + (1|looks) + (1|personality),
data = speedData, REML = FALSE)
另外,当我运行这些模型的系数时,我注意到它只为每个参与者产生随机截距。我试图创建一个产生随机截距和斜率的模型。我似乎无法使这两种函数的语法正确。任何帮助将不胜感激。
答案 0 :(得分:3)
lme
和相应的lmer
公式之间的唯一区别应该是将随机和固定组件聚合为单个公式:
dateRating ~ looks + personality +
gender + looks:gender + personality:gender +
looks:personality+ (1|participant/looks/personality)
使用(1|participant) + (1|looks) + (1|personality)
仅在looks
和personality
在每个嵌套级别都具有唯一值时才相同。
您不清楚要定义斜率的连续变量:如果您有连续变量x
和组g
,那么(x|g)
或等效{{1会给你一个随机斜率模型((1+x|g)
也应该包含在模型的固定效果部分,即完整的公式应该是x
...)
更新:我从here获取了数据,或者更确切地说是一个允许重建数据的脚本文件。菲尔德在他的书中犯了一个常见的错误,我过去曾多次提到过:由于每个参与者/外表/个性组合的数据集中只有一个观察点,因此每次观察的三向交互有一个级别。在线性混合模型中,这意味着最低嵌套水平的方差将与残差方差混淆。
您可以通过两种方式看到这一点:
y~x+(x|g)
出现以适应模型,但如果您尝试通过lme
计算置信区间,则intervals()
intervals(speedDateModel)
## Error in intervals.lme(speedDateModel) :
## cannot get confidence intervals on var-cov components:
## Non-positive definite approximate variance-covariance
尝试此操作,则会获得:lmer
在这两种情况下,这都是一个错误的线索。 (如果您真的想:## Error: number of levels of each grouping factor
## must be < number of observations
,可以克服此问题:lmer
。
如果我们忽略最低分组级别,一切正常:
?lmerControl
比较sd2 <- lmer(dateRating ~ looks + personality +
gender + looks:gender + personality:gender +
looks:personality+
(1|participant/looks),
data=speedData)
和lmer
固定效果:
lme
starling示例here提供了另一个示例并进一步解释了此问题。