提问人:muddypaws 提问时间:11/15/2023 最后编辑:muddypaws 更新时间:11/15/2023 访问量:48
R 中的 'mixed' 和 'lmer' 为可变系数提供了不同的估计值
'mixed' and 'lmer' in R provide different estimates for variable coefficients
问:
我在纵向数据集中拟合混合效应模型,并注意到指定相同的结构会导致不同的输出,具体取决于我使用的是“混合”(来自软件包 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]
正如你所看到的,模型系数是完全不同的,特别是对于交互作用项,其中系数的符号甚至不同。感谢您对这里可能发生的事情的任何见解!
答:
1赞
Ben Bolker
11/15/2023
#1
afex::mixed()
默认情况下,自动使用总和到零的对比度,因为这些对比度通常更容易解释具有交互作用的模型中的主要效应(但 R 的默认设置是使用处理对比度)。
如果您在运行拟合之前进行设置,您将获得相同的系数。(还有其他方法可以设置对比度,但这可能是最简单的方法。options(contrasts = c("contr.sum", "contr.poly"))
lmer()
顺便说一句,我希望这不能代表您的真实数据 - 当我运行此代码时,我收到了很多警告,并且在输出中出现了很多危险信号(例如,残余标准误差非常接近于零,原始拟合中的原始估计值也是如此)。如果可以的话,通常最好生成更合理的测试数据,这样人们(像我一样)就不会分心/认为问题可能是一些无法识别的问题......yearwt2
lmer
评论
0赞
muddypaws
11/16/2023
非常感谢您抽出宝贵时间回复!这是非常有帮助的。当交互作用是感兴趣的主要效应(即不是主要效应)时,您会推荐一种对比方法而不是另一种对比方法吗?
1赞
Ben Bolker
11/16/2023
我相信对于任何一组对比,交互作用的 p 值都是相同的。请注意,无论您使用哪种对比度,整体模型拟合(包括预测等)都是相同的;唯一的问题是参数估计值的解释。
评论