R 中的 'mixed' 和 'lmer' 为可变系数提供了不同的估计值

'mixed' and 'lmer' in R provide different estimates for variable coefficients

提问人:muddypaws 提问时间:11/15/2023 最后编辑:muddypaws 更新时间:11/15/2023 访问量:48

问:

我在纵向数据集中拟合混合效应模型,并注意到指定相同的结构会导致不同的输出,具体取决于我使用的是“混合”(来自软件包 afex)还是 lme4。我在下面提供了可重现的代码(R 版本 4.2.2)

library(lme4)
library(afex)
library(tidyverse)
library(effectsize)
# Pull in toy data and convert vars to factors
dset_test1 <- mtcars %>% 
  mutate(car_id = row.names(mtcars)) %>% 
  mutate(vs = as.factor(vs)) %>% 
  mutate(am = as.factor(am))

# Create simulated longitudinal dataset
increase_longitudinal <- mtcars %>% 
  dplyr::select(am, wt) %>% 
  mutate(car_id = row.names(mtcars)) %>% 
  mutate(wt2 = (wt)*2)

# Merge and make long form
dset_test = merge(dset_test1, increase_longitudinal, on='car_id') %>% 
  pivot_longer(cols = c(wt, wt2), names_to = 'year', values_to = 'weight') %>% 
  mutate(year = as.factor(year))

# Set reference levels
dset_test$year <- relevel(dset_test$year, "wt")

# fit model with mixed
mix1 <- mixed(mpg~year * weight + hp +(1 | car_id), data=dset_test) 
summary(mix1)
parameters::standardize_parameters(mix1)

# fit model with lme4
lmer1 <- lmer(mpg~year * weight + hp +(1 | car_id), data=dset_test) 
summary(lmer1)
parameters::standardize_parameters(lmer1)

这将产生以下标准化输出:

# model with mixed:
Parameter    | Std. Coef. |         95% CI
------------------------------------------
(Intercept)  |      -0.29 | [-0.40, -0.18]
year1        |      -0.81 | [-0.98, -0.63]
weight       |      -1.12 | [-1.36, -0.88]
hp           |      -0.39 | [-0.53, -0.25]
year1:weight |      -0.37 | [-0.45, -0.29]

# Model with lme4:
Parameter      | Std. Coef. |         95% CI
--------------------------------------------
(Intercept)    |      -1.05 | [-1.29, -0.81]
yearwt2        |       1.54 | [ 1.21,  1.86]
weight         |      -1.42 | [-1.72, -1.12]
hp             |      -0.40 | [-0.54, -0.26]
yearwt2:weight |       0.71 | [ 0.56,  0.86]

正如你所看到的,模型系数是完全不同的,特别是对于交互作用项,其中系数的符号甚至不同。感谢您对这里可能发生的事情的任何见解!

统计混合 模型 R-Package

评论


答:

1赞 Ben Bolker 11/15/2023 #1

afex::mixed()默认情况下,自动使用总和到零的对比度,因为这些对比度通常更容易解释具有交互作用的模型中的主要效应(但 R 的默认设置是使用处理对比度)。

如果您在运行拟合之前进行设置,您将获得相同的系数。(还有其他方法可以设置对比度,但这可能是最简单的方法。options(contrasts = c("contr.sum", "contr.poly"))lmer()

顺便说一句,我希望这不能代表您的真实数据 - 当我运行此代码时,我收到了很多警告,并且在输出中出现了很多危险信号(例如,残余标准误差非常接近于零,原始拟合中的原始估计值也是如此)。如果可以的话,通常最好生成更合理的测试数据,这样人们(像我一样)就不会分心/认为问题可能是一些无法识别的问题......yearwt2lmer

评论

0赞 muddypaws 11/16/2023
非常感谢您抽出宝贵时间回复!这是非常有帮助的。当交互作用是感兴趣的主要效应(即不是主要效应)时,您会推荐一种对比方法而不是另一种对比方法吗?
1赞 Ben Bolker 11/16/2023
我相信对于任何一组对比,交互作用的 p 值都是相同的。请注意,无论您使用哪种对比度,整体模型拟合(包括预测等)都是相同的;唯一的问题是参数估计值的解释