对比 emmeans:post-hoc t-test 作为基线和治疗期间差异的平均差异
Contrast emmeans: post-hoc t-test as the average differences of the differences between baseline and treatment periods
我正在使用 R 中的 lme4 包进行线性混合效应模型 (LMM)。基本上所有参与者都接受了两种干预(一种干预治疗和一种安慰剂(对照)),并被清除期分开。但是,他们接受干预的顺序不同。
LMM 中包含干预和访问的交互项,有八个级别,包括干预(2 个级别:控制和干预)和访问(4 个级别:访问 1=基线 1、访问 2、访问 3)的所有组合=post-随机化基线 2,访视 4)。
我的问题是如何通过 post-hoc t 检验将干预效果确定为干预之间差异的平均差异,因此访问 1 和 2 之间以及访问之间第 3 次和第 4 次访问。我还想确定与基线相比干预和控制的效果。
请看下面的代码:
model1<- lmer(X ~ treatment_type:visit_code + (1|SID) + (1|SID:period), na.action= na.omit, data = data.x)
emm <- emmeans(model1 , ~treatment_type:visit_code)
我的模型1的结果是:
emm
treatment_type visit_code emmean SE df lower.CL upper.CL
Control T0 -0.2915 0.167 26.0 -0.635 0.0520
Intervention T0 -0.1424 0.167 26.0 -0.486 0.2011
Control T1 -0.2335 0.167 26.0 -0.577 0.1100
Intervention T1 0.0884 0.167 26.0 -0.255 0.4319
Control T2 0.0441 0.167 26.0 -0.299 0.3876
Intervention T2 -0.2708 0.168 26.8 -0.616 0.0748
Control T3 0.1272 0.167 26.0 -0.216 0.4708
Intervention T3 0.0530 0.168 26.8 -0.293 0.3987
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
我首先创建了一个矩阵/向量:
#名称向量
Control.B1<- c(1,0,0,0,0,0,0,0) #control baseline 1 (visit 1)
Intervention.B1<- c(0,1,0,0,0,0,0,0) #intervention baseline 1 (visit 1)
Control.A2<- c(0,0,1,0,0,0,0,0) #post control 1 (visit 2)
Intervention.A2<- c(0,0,0,1,0,0,0,0) #post intervention 1 (visit 2)
ControlB3<- c(0,0,0,0,1,0,0,0) #control baseline 2 (visit 3)
Intervention.B3<- c(0,0,0,0,0,1,0,0) #intervention baseline 2 (visit 3)
Control.A4<- c(0,0,0,0,0,0,1,0) #post control 2 (visit 4)
Intervention.A4<- c(0,0,0,0,0,0,0,1) #post intervention 2 (visit 4)
Contbaseline = (Control.B1 + Control.B3)/2 # average of control baseline visits
Intbaseline = (Intervention. B1 + Intervention.B3)/2 # average of intervention baseline visits
ControlAfter= (Control.A2 + Control.A4)/2 # average of after control visits
IntervAfter= (Intervention.A2 + Intervention.A4)/2 # average of after intervention visits
Control.vs.Baseline = (ControlAfter-Contbaseline)
Intervention.vs.Baseline = (IntervAfter-Intbaseline)
Control.vs.Intervention = ((Control.vs.Baseline)-(Intervention.vs.Baseline))
这些输出如下:
> Control.vs.Baseline
[1] -0.5 0.0 0.5 0.0 -0.5 0.0 0.5 0.0
> Intervention.vs.Baseline
[1] 0.0 -0.5 0.0 0.5 0.0 -0.5 0.0 0.5
> Control.vs.Intervention
[1] -0.5 0.5 0.5 -0.5 -0.5 0.5 0.5 -0.5
这对基线和治疗期之间差异的平均差异是否正确?
非常感谢!
two-period 交叉与重复的 2x2 拉丁方相同。我对未来此类实验的建议是相应地构建数据,使用序列(行)、周期(列)和治疗(以模式(A,B)第一序列和(B,A)第二序列的模式分配)的变量。受试者被随机分配到他们所在的顺序。
因此,对于您的数据,您需要添加一个变量 sequence
,对于接受治疗序列 A、A、B、B 的受试者,该变量具有 AB 级,对于接受治疗的受试者,具有 BA 级B、B、A、A(虽然我猜第 1 和第 3 确实是每个人的基准)。
由于有 4 次访问,如果您将其重新编码为两个因素 trial
和 period
,它有助于保持排序,如下所示:
visit trial period
1 base 1
2 test 1
3 base 2
4 test 2
然后用公式拟合模型
model2 <- lmer(X ~ (sequence + period + treatment_type) * trial +
(1|SID:sequence), ...etc...)
括号内的部分是拉丁方的标准模型。那么不用自定义对比就可以分析如下:
RG <- ref_grid(model2) # same really as emmeans() for all 4 factors
CHG <- contrast(RG, "consec", simple = "trial")
CHG <- update(CHG, by = NULL, infer = c(TRUE, FALSE))
CHG
包含与基线的差异(其他三个因素的每个组合的 trial
差异。update()
步骤删除了从 contrast()
。现在,我们可以得到每个因素的边际均值和比较:
emmeans(CHG, consec ~ treatment_type)
emmeans(CHG, consec ~ period)
emmeans(CHG, consec ~ sequence)
这些将与您通过自定义对比以其他方式获得的结果相同。之前是差异中的差异现在由 sequence
处理。这是有效的,因为在 2x2 拉丁方中,每个因素的主要影响与其他两个因素的 two-way 相互作用混淆。
我正在使用 R 中的 lme4 包进行线性混合效应模型 (LMM)。基本上所有参与者都接受了两种干预(一种干预治疗和一种安慰剂(对照)),并被清除期分开。但是,他们接受干预的顺序不同。
LMM 中包含干预和访问的交互项,有八个级别,包括干预(2 个级别:控制和干预)和访问(4 个级别:访问 1=基线 1、访问 2、访问 3)的所有组合=post-随机化基线 2,访视 4)。
我的问题是如何通过 post-hoc t 检验将干预效果确定为干预之间差异的平均差异,因此访问 1 和 2 之间以及访问之间第 3 次和第 4 次访问。我还想确定与基线相比干预和控制的效果。
请看下面的代码:
model1<- lmer(X ~ treatment_type:visit_code + (1|SID) + (1|SID:period), na.action= na.omit, data = data.x)
emm <- emmeans(model1 , ~treatment_type:visit_code)
我的模型1的结果是:
emm
treatment_type visit_code emmean SE df lower.CL upper.CL
Control T0 -0.2915 0.167 26.0 -0.635 0.0520
Intervention T0 -0.1424 0.167 26.0 -0.486 0.2011
Control T1 -0.2335 0.167 26.0 -0.577 0.1100
Intervention T1 0.0884 0.167 26.0 -0.255 0.4319
Control T2 0.0441 0.167 26.0 -0.299 0.3876
Intervention T2 -0.2708 0.168 26.8 -0.616 0.0748
Control T3 0.1272 0.167 26.0 -0.216 0.4708
Intervention T3 0.0530 0.168 26.8 -0.293 0.3987
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
我首先创建了一个矩阵/向量: #名称向量
Control.B1<- c(1,0,0,0,0,0,0,0) #control baseline 1 (visit 1)
Intervention.B1<- c(0,1,0,0,0,0,0,0) #intervention baseline 1 (visit 1)
Control.A2<- c(0,0,1,0,0,0,0,0) #post control 1 (visit 2)
Intervention.A2<- c(0,0,0,1,0,0,0,0) #post intervention 1 (visit 2)
ControlB3<- c(0,0,0,0,1,0,0,0) #control baseline 2 (visit 3)
Intervention.B3<- c(0,0,0,0,0,1,0,0) #intervention baseline 2 (visit 3)
Control.A4<- c(0,0,0,0,0,0,1,0) #post control 2 (visit 4)
Intervention.A4<- c(0,0,0,0,0,0,0,1) #post intervention 2 (visit 4)
Contbaseline = (Control.B1 + Control.B3)/2 # average of control baseline visits
Intbaseline = (Intervention. B1 + Intervention.B3)/2 # average of intervention baseline visits
ControlAfter= (Control.A2 + Control.A4)/2 # average of after control visits
IntervAfter= (Intervention.A2 + Intervention.A4)/2 # average of after intervention visits
Control.vs.Baseline = (ControlAfter-Contbaseline)
Intervention.vs.Baseline = (IntervAfter-Intbaseline)
Control.vs.Intervention = ((Control.vs.Baseline)-(Intervention.vs.Baseline))
这些输出如下:
> Control.vs.Baseline
[1] -0.5 0.0 0.5 0.0 -0.5 0.0 0.5 0.0
> Intervention.vs.Baseline
[1] 0.0 -0.5 0.0 0.5 0.0 -0.5 0.0 0.5
> Control.vs.Intervention
[1] -0.5 0.5 0.5 -0.5 -0.5 0.5 0.5 -0.5
这对基线和治疗期之间差异的平均差异是否正确?
非常感谢!
two-period 交叉与重复的 2x2 拉丁方相同。我对未来此类实验的建议是相应地构建数据,使用序列(行)、周期(列)和治疗(以模式(A,B)第一序列和(B,A)第二序列的模式分配)的变量。受试者被随机分配到他们所在的顺序。
因此,对于您的数据,您需要添加一个变量 sequence
,对于接受治疗序列 A、A、B、B 的受试者,该变量具有 AB 级,对于接受治疗的受试者,具有 BA 级B、B、A、A(虽然我猜第 1 和第 3 确实是每个人的基准)。
由于有 4 次访问,如果您将其重新编码为两个因素 trial
和 period
,它有助于保持排序,如下所示:
visit trial period
1 base 1
2 test 1
3 base 2
4 test 2
然后用公式拟合模型
model2 <- lmer(X ~ (sequence + period + treatment_type) * trial +
(1|SID:sequence), ...etc...)
括号内的部分是拉丁方的标准模型。那么不用自定义对比就可以分析如下:
RG <- ref_grid(model2) # same really as emmeans() for all 4 factors
CHG <- contrast(RG, "consec", simple = "trial")
CHG <- update(CHG, by = NULL, infer = c(TRUE, FALSE))
CHG
包含与基线的差异(其他三个因素的每个组合的 trial
差异。update()
步骤删除了从 contrast()
。现在,我们可以得到每个因素的边际均值和比较:
emmeans(CHG, consec ~ treatment_type)
emmeans(CHG, consec ~ period)
emmeans(CHG, consec ~ sequence)
这些将与您通过自定义对比以其他方式获得的结果相同。之前是差异中的差异现在由 sequence
处理。这是有效的,因为在 2x2 拉丁方中,每个因素的主要影响与其他两个因素的 two-way 相互作用混淆。