【问题标题】:Mixed Modelling - Different Results between lme and lmer functions混合建模 - lme 和 lmer 函数之间的不同结果
【发布时间】:2015-11-07 18:36:31
【问题描述】:

我目前正在阅读 Andy Field 的书《使用 R 发现统计数据》。第 14 章是关于混合建模的,他使用了 nlme 包中的 lme 函数。

他使用快速约会数据创建的模型是这样的:

speedDateModel <- lme(dateRating ~ looks + personality +
                 gender + looks:gender + personality:gender + 
                 looks:personality,
    random = ~1|participant/looks/personality)

我尝试使用 lme4 包中的 lmer 函数重新创建一个类似的模型;但是,我的结果是不同的。我认为我有正确的语法,但也许不是?

speedDateModel.2 <- lmer(dateRating ~ looks + personality + gender + 
              looks:gender + personality:gender + 
              (1|participant) + (1|looks) + (1|personality), 
              data = speedData, REML = FALSE)

此外,当我运行这些模型的系数时,我注意到它只会为每个参与者产生随机截距。然后我试图创建一个同时产生随机截距和斜率的模型。我似乎无法让这两个函数的语法正确。任何帮助将不胜感激。

【问题讨论】:

    标签: r lme4 mixed-models nlme


    【解决方案1】:

    lme 和对应的lmer 公式之间的唯一区别应该是随机和固定分量聚合成一个公式:

    dateRating ~ looks + personality +
                 gender + looks:gender + personality:gender + 
                 looks:personality+ (1|participant/looks/personality)
    

    仅当lookspersonality 在每个嵌套级别具有唯一值时,使用(1|participant) + (1|looks) + (1|personality) 才等效。

    尚不清楚您要定义斜率的连续变量:如果您有一个连续变量x 和组g,那么(x|g) 或等效的(1+x|g) 将为您提供一个随机斜率模型(@ 987654333@也应该包含在模型的固定效应部分,即完整的公式应该是y~x+(x|g) ...)

    更新:我从here 获得了数据,或者更确切地说是一个允许重建数据的脚本文件。 Field 在他的书中犯了一个常见错误,我过去曾多次犯过这个错误:由于每个参与者/长相/个性组合在数据集中只有一个观察值,因此三向交互每个观察值都有一个级别。在线性混合模型中,这意味着最底层嵌套的方差会与残差方差混淆。

    您可以通过两种方式看到这一点:

    • 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)
    

    比较lmerlme固定效果:

    all.equal(fixef(sd2),fixef(speedDateModel)) ## TRUE
    

    starling 示例here 给出了另一个示例并进一步解释了这个问题。

    【讨论】:

    • 谢谢你,本。在我使用 lme() 函数的第一个模型示例中,它产生了正确的结果。您能否帮助我理解如何使用 lmer() 函数重写该示例,因为我似乎无法理解如何使其工作而不会出现一堆错误。
    • 如果我要为您提供更多帮助,我需要一个可重现的示例。我在 Google Books 上戳了一下这本书,但我不知道 speedData 数据集来自哪里(另外,您应该始终使用 data= 参数来明确指定要分析的数据框.. .)
    • 你好,本,很抱歉还没有回到这个话题。事情真的很忙。如果可能的话,将在本周晚些时候尝试更新更多信息。欣赏它。
    猜你喜欢
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多