使用鲁棒 lmer 进行虚拟编码和对比编码后简单斜率分析的不同 p 值
Posted
技术标签:
【中文标题】使用鲁棒 lmer 进行虚拟编码和对比编码后简单斜率分析的不同 p 值【英文标题】:Different p-values for simple slope analysis after dummy coding and contrast coding using robust lmer 【发布时间】:2022-01-10 03:16:53 【问题描述】:我想平均一些连续预测变量对结果变量的影响,所以我在这里使用了对比编码 (https://towardsdatascience.com/how-to-correctly-interpret-your-continuous-and-categorical-variable-interactions-in-regressions-51e5eed5de1e)
但是,我注意到当我运行简单斜率分析时,p 值会发生变化(以及一些固定效应,代码部分未显示)。
为什么?哪个rlmer
模型最适合趋势分析?
您可以在下面看到代码和输出(首先是虚拟编码,然后是对比编码)
TIME、AGE、FAQ、医疗都是数字 步态是一个因素(正常 = 参考猫,异常)
tmtar = rlmer(TMT_A ~
GAIT_*TIME+
AGE+
FAQ+
medical+(1|SITE:RID),
data = df)
trend
rrg = qdrg(formula = ~ GAIT_*TIME+AGE+FAQ+medical, data = df,
coef = fixef(tmtar), vcov = as.matrix(vcov(tmtar)),
at = list(TIME = c(0,36)))
update(pairs(rrg, reverse = T, simple = "TIME"), by = NULL)
输出
Fixed effects:
Estimate Std. Error t value
(Intercept) 18.178377 7.691289 2.364
GAIT_abnormal -0.928555 2.758425 -0.337
TIME -0.002426 0.024642 -0.098
AGE 0.270401 0.104385 2.590
FAQ 0.715653 0.068665 10.422
medical -0.027960 0.302248 -0.093
GAIT_abnormal:TIME 0.272333 0.067935 4.009
trend
contrast GAIT_ AGE FAQ medical estimate SE df z.ratio p.value
36 - 0 normal 74.8 6.5 6.52 -0.0873 0.887 Inf -0.098 0.9216
36 - 0 abnormal 74.8 6.5 6.52 9.7167 2.389 Inf 4.068 <.0001
对比编码
contrasts(df$GAIT_) <- c(-0.5,0.5)
tmtar = rlmer(TMT_A ~
GAIT_*TIME+
AGE+
FAQ+
medical+(1|SITE:RID),
data = df)
rrg = qdrg(formula = ~ GAIT_*TIME+AGE+FAQ+medical, data = df,
coef = fixef(tmtar), vcov = as.matrix(vcov(tmtar)),
at = list(TIME = c(0,36)))
update(pairs(rrg, reverse = T, simple = "TIME"), by = NULL)
输出
contrast
[,1]
normal -0.5
abnormal 0.5
Fixed effects:
Estimate Std. Error t value
(Intercept) 17.71410 7.95539 2.227
GAIT_1 -0.92856 2.75843 -0.337
TIME 0.13374 0.03676 3.639
AGE 0.27040 0.10438 2.590
FAQ 0.71565 0.06866 10.422
medical -0.02796 0.30225 -0.093
GAIT_1:TIME 0.27233 0.06794 4.009
contrast GAIT_ AGE FAQ medical estimate SE df z.ratio p.value
36 - 0 normal 74.8 6.5 6.52 4.81 1.32 Inf 3.639 0.0003
36 - 0 abnormal 74.8 6.5 6.52 14.62 3.56 Inf 4.110 <.0001
【问题讨论】:
我强烈怀疑这个问题与rlmer
等无关。如果您制作一个更简单的 [mcve] 可能会更容易回答。此外,如果您的代码明确包含所有需要加载的包(robustlmm
、emmeans
),这会有所帮助,因为并不是每个人都知道所有函数的来源......
对于初学者来说,R(和之前的 S)错误地使用“对比”这个词来定义因子编码为虚拟变量的方式。回归系数通常不是那些相关“对比”的估计。 “对比”编码显示回归系数的倍数产生均值,而您要估计的对比是它的倒数:均值的指定倍数。
非常感谢教授!我不确定我是否理解获得 1)数值预测变量的主要影响(主要影响不是参考类别的简单影响)2)运行简单斜率分析的最佳模型的最佳方法是什么;对于后面的分析,我应该使用虚拟编码还是使用偏差编码(-.5,.5,就像我一样)?
我的建议是不要担心编码,只需使用 emmeans,无论编码如何,它都会以相同的方式工作。
我不应该在乐池中戴着音乐眼镜在手机上回答问题...看看 emmeans 中的emmtrends()
功能..虽然这么说,但我看到你必须使用qdrg
,这样就无法使用了;所以你需要做的是使用at
指定协变量的两个值相隔一个单位,然后得到估计均值的差异(使用“revpairwise”或“consec”对比),这将是所需的斜率。
【参考方案1】:
我想你说过你想要除GAIT_
和TIME
之外的所有这些东西在预测变量上的平均值。此外,如果您真的想要 slopes,则需要按照评论中的建议指定两个 TIME
值 一个 单位。使用哪两个值并不重要,只要它们相隔 1 个单位即可。所以我会做类似的事情
new_rrg = qdrg(formula = ~ GAIT_*TIME+AGE+FAQ+medical, data = df,
coef = fixef(tmtar), vcov = as.matrix(vcov(tmtar)),
at = list(TIME = 17:18))
# average over the predictors...
emm = emmeans(new_rrg, ~ TIME | GAIT_)
# obtain the average slopes for each TIME...
pairs(emm, reverse = TRUE)
这对于tmtar
中的任一对比度编码选择应该是一样的。虽然可以在单因素模型中使用对比编码来使回归系数可解释,但随着您添加更多因素,它会变得越来越混乱,而且 IMO 您正在创造一种情况,即犯错风险的增加超过任何回归系数的可解释性优势。
顺便说一句,当您在这样的帖子中展示两个不同的模型时,请给它们不同的名称。否则,尝试讨论第一个tmtar
模型和第二个tmtar
模型之间的区别是非常令人困惑的。 (而且完全不可能在您的工作区中比较它们,因为它们不能同时存在。)
【讨论】:
看起来正确!请注意,对于正常步态,估计值、SE 和 z 比率与第一个固定效应摘要中的 TIME 相匹配。正常步态是第一个参数化中的参考类别。对于异常步态,TIME 和 TIME:GAIT_abnormal 的系数之和为 -0.002426 + 0.272333 = 0.2699,与您报告的估计值相符。 你有 z 比率而不是 t 比率的原因是因为 d.f.未在qdrg()
中指定
@atnplab 你为什么删除我回复的评论?
我删除了它,因为我想回答比我给你看的代码更好,但是在评论部分很难清楚地提供扩展代码和输出。我还想显示其他输出,因为对比编码和虚拟编码再次给出不同的估计值和 p 值。
GAIT_ = abnormal: contrast estimate SE df z.ratio p.value 18 - 17 0.26991 0.0664 Inf 4.068 <.0001
GAIT_ = normal: contrast estimate SE df z.ratio p.value 18 - 17 -0.00243 0.0246 Inf -0.098 0.9216
这是您使用虚拟编码建议的代码的输出以上是关于使用鲁棒 lmer 进行虚拟编码和对比编码后简单斜率分析的不同 p 值的主要内容,如果未能解决你的问题,请参考以下文章