使用鲁棒 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] 可能会更容易回答。此外,如果您的代码明确包含所有需要加载的包(robustlmmemmeans),这会有所帮助,因为并不是每个人都知道所有函数的来源...... 对于初学者来说,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 &lt;.0001 GAIT_ = normal: contrast estimate SE df z.ratio p.value 18 - 17 -0.00243 0.0246 Inf -0.098 0.9216 这是您使用虚拟编码建议的代码的输出

以上是关于使用鲁棒 lmer 进行虚拟编码和对比编码后简单斜率分析的不同 p 值的主要内容,如果未能解决你的问题,请参考以下文章

解读ICDE‘22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法

VMware 加载物理硬盘后出现“磁盘编码错误”一例

是一个热门编码是免费的虚拟陷阱[关闭]

Pytorch中的自编码(autoencoder)

天气预报API:城市代码--“新编码”和“旧编码” 对比

Python2 与 Python3 的编码对比