如何对具有 3 个级别的变量进行对比编码?

问题描述 投票:0回答:1

我最近发现对比编码与虚拟编码相比似乎是处理混合模型的更有效方法。这是我遵循的(简化的)逻辑,它将使问题更加明显:


指定对比度...

> contrasts(TASK1_Reaction_Times$TYPE_OF_LEARNING)<-c(-0.5,0.5)
> contrasts(TASK1_Reaction_Times$MOMENT_OF_TEST)<-c(-0.5,0.5)

...将两个变量都以 0 为中心

> contrasts(TASK1_Reaction_Times$TYPE_OF_LEARNING)
      [,1]
ORTHOGRAPHIC_LEARNING -0.5
PHONOLOGICAL_LEARNING  0.5

> contrasts(TASK1_Reaction_Times$MOMENT_OF_TEST)
          [,1]
IMMEDIATELY -0.5
AFTER_ONE_WEEK 0.5

构建最大收敛模型

> TASK1 <- lmer(RT ~ TYPE_OF_LEARNING * MOMENT_OF_TEST
  + (1 + MOMENT_OF_TEST) + (1 + TYPE_OF_LEARNING), 
   data = TASK1_Reaction_Times)

检查摘要输出

> summary(TASK1)

(...)

Fixed effects:
                         Estimate Std. Error         df     t value      Pr(>|t|)    
(Intercept)                  1000         25         50          40    0.0005 ***
TYPE_OF_LEARNING1             100         25        100          10    0.0005 ***
MOMENT_OF_TEST1              -100         25         50         -10    0.0005 ***
(values are grossly simplified)

据我了解,这表明通过拼字法学习单词的参与者的反应时间比通过语音学习单词的参与者快约 100 毫秒; 初次测试一周后,反应时间平均慢了 100 毫秒。


这是我的问题:如果我的变量有三个级别而不是只有两个级别,我该怎么办?
(例如三种类型的学习,三个测试时刻)

那还可以使用这种方法吗?
在这种情况下如何对变量进行对比编码(-0.5,0,0.5?)?

r mixed-models
1个回答
0
投票

这个问题并不特定于混合模型(它适用于任何具有线性固定效应组件的模型,例如

lm()
glm()
),因此我将使用内置数据集进行说明。

library(emmeans)
mtcars$cyl <- factor(mtcars$cyl)
m1 <- lm(mpg ~ cyl, data = mtcars)
m2 <- lm(mpg ~ cyl, data = mtcars, contrasts = list(cyl = "contr.sum"))

默认 treatment 对比显示

cyl==6
cyl==8
的估计平均值与基线(默认情况下按第一个字母顺序)水平
cyl==4

之间的差异
options(show.signif.stars = FALSE)
printCoefmat(coef(summary(m1)), digits = 2)
            Estimate Std. Error t value Pr(>|t|)
(Intercept)    26.66       0.97    27.4   <2e-16
cyl6           -6.92       1.56    -4.4    1e-04
cyl8          -11.56       1.30    -8.9    9e-10

归零对比显示第一个

n-1
级别与(未加权)总体平均值之间的差异(对于两个级别,这相当于对比度编码,尽管可能(?)具有不同的缩放比例)

           Estimate Std. Error t value Pr(>|t|)
(Intercept)    20.50       0.59    34.5   <2e-16
cyl1            6.16       0.82     7.5    3e-08
cyl2           -0.76       0.92    -0.8      0.4

如果您想查看每个级别与平均值之间的比较,您需要这样的东西(无论原始模型中使用的对比如何,它都有效):

library(emmeans)
contrast(emmeans(m1, ~cyl), "eff")
 contrast    estimate    SE df t.ratio p.value
 cyl4 effect    6.161 0.817 29   7.544  <.0001
 cyl6 effect   -0.759 0.920 29  -0.825  0.4161
 cyl8 effect   -5.402 0.774 29  -6.976  <.0001

P value adjustment: fdr method for 3 tests 

请注意,前两个对比(cyl-4 与平均值、cyl-6 与平均值)与上一个示例中的相同。

如果您不想进行任何多重比较修正,可以添加

adjust = "none"

请参阅

?emmeans::eff.emmc
了解更多详情。

© www.soinside.com 2019 - 2024. All rights reserved.