我希望是一个简单的问题。
我有一个实验设计,我测量了两组的反应(比如说血压):对照组和受影响组,两组都接受了三种治疗: t1,t2,t3。数据在任何意义上都不是配对的。
下面是一个数据示例:
set.seed(1)
df <- data.frame(response = c(rnorm(5,10,1),rnorm(5,10,1),rnorm(5,10,1),
rnorm(5,7,1),rnorm(5,5,1),rnorm(5,10,1)),
group = as.factor(c(rep("control",15),rep("affected",15))),
treatment = as.factor(rep(c(rep("t1",5),rep("t2",5),rep("t3",5)),2)))我感兴趣的是量化每个治疗对受影响组相对于对照组的影响。我该如何建模,比如使用线性模型(例如R中的lm )?
我是不是错了:
lm(response ~ 0 + treatment * group, data = df)相当于:
lm(response ~ 0 + treatment + group + treatment:group, data = df)不是我需要的吗?我认为在这个模型中,治疗:组相互作用项相对于所有基线组和基线治疗测量的平均值。
因此,我认为这个模型:
lm(response ~ 0 + treatment:group, data = df)是我需要的,但它正在量化治疗和组交互作用的每个组合:治疗t1:组对照治疗t1:组有效治疗t2:组对照治疗t2:组影响治疗t3:组对照治疗t3:组有效治疗t3:组影响治疗t3:组影响治疗t3:组影响治疗
所以也许这个模型:
lm(response ~ 0 + treatment + treatment:group, data = df)是正确的吗?
虽然除了量化每个治疗组合和群体影响的相互作用项外,它还量化了每个治疗的效果。我不确定在这个模型中每个处理和组影响相互作用项的基线是多少。
如果能帮上忙,我们将不胜感激。
另外,假设我运行了第四个处理,实际上是两个处理的组合,比如t1+t3,我不知道它们的组合效果是什么:相加/相减或协同作用。有没有办法把它结合起来呢?
发布于 2015-11-11 13:52:50
交互作用术语告诉您,组之间的差异取决于处理,即对于t1、t2和t3,受影响组和对照组之间的差异是不同的。
不过,我会对拦截进行建模。
lm(response ~ group + treatment + group:treatment, data=df)在获得一个重要的交互术语后,我将使用t.tests进一步研究并帮助解释。
可以看出,这种相互作用是由t2相对于其他因素的更大影响驱动的。
library(data.table)
library(dplyr)
library(ggplot2)
set.seed(1)
df <- data.frame(response = c(rnorm(5,10,1),rnorm(5,10,1),rnorm(5,10,1),rnorm(5,7,1),rnorm(5,5,1),rnorm(5,10,1)),
group = as.factor(c(rep("control",15),rep("affected",15))),
treatment = as.factor(rep(c(rep("t1",5),rep("t2",5),rep("t3",5)),2)))
# t tests of the desired comparisons to see if there is a difference and get 95% confidence intervals
t.test(df$response[df$treatment=="t1"] ~ df$group[df$treatment=="t1"])
t.test(df$response[df$treatment=="t2"] ~ df$group[df$treatment=="t2"])
t.test(df$response[df$treatment=="t3"] ~ df$group[df$treatment=="t3"])
# plot 95% C.I.
ci_plot <- matrix(nrow=3, ncol=3)
ci_plot <- as.data.frame(ci_plot)
colnames(ci_plot) <- c("treatment", "lci", "uci")
ci_plot[,1] <- c("t1", "t2", "t3")
ci_plot[,3] <- c(t.test(df$response[df$treatment=="t1"] ~ df$group[df$treatment=="t1"])$conf.int[1],
t.test(df$response[df$treatment=="t2"] ~ df$group[df$treatment=="t2"])$conf.int[1],
t.test(df$response[df$treatment=="t3"] ~ df$group[df$treatment=="t3"])$conf.int[1])
ci_plot[,4] <- c(t.test(df$response[df$treatment=="t1"] ~ df$group[df$treatment=="t1"])$conf.int[2],
t.test(df$response[df$treatment=="t2"] ~ df$group[df$treatment=="t2"])$conf.int[2],
t.test(df$response[df$treatment=="t3"] ~ df$group[df$treatment=="t3"])$conf.int[2])
ggplot(ci_plot, aes(x=treatment, y=uci)) +
geom_errorbar(aes(ymin=uci, ymax=lci), width=0.5, position=position_dodge(0.9), weight=0.5) +
xlab("Treatment") +
ylab("Change in mean relative to control (95% C.I.)") +
theme_bw() +
theme(panel.border = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(colour = "black"),
axis.text.x = element_text(angle = 90, hjust = 1))

发布于 2015-11-11 13:18:09
您的第一个规范很好。
lm(response ~ 0 + treatment * group, data = df)
Call:
lm(formula = response ~ 0 + treatment * group, data = df)
Coefficients:
treatmentt1 treatmentt2 treatmentt3
7.460 5.081 9.651
groupcontrol treatmentt2:groupcontrol treatmentt3:groupcontrol
2.670 2.384 -2.283 第一个系数为7.460,表示当参与者既接受t1治疗又受到影响时发生的效果。从左到右,第二个系数5.081,表示参与者同时接受t2治疗和受影响的时间,等等。
例如,当参与者接受t2治疗时,在对照组中,效果是5.081 + 2.384。
如果我做这个分析,我会保留截获的信息。
Call:
lm(formula = response ~ treatment * group, data = df)
Coefficients:
(Intercept) treatmentt2 treatmentt3
7.460 -2.378 2.192
groupcontrol treatmentt2:groupcontrol treatmentt3:groupcontrol
2.670 2.384 -2.283 现在,第二个系数,从左到右,表示接受t2治疗的参与者和受影响的参与者相对于接受t1治疗和受影响的参与者的效果。请注意,7.460 - 2.378 = 5.081 (第一个规范中的第二个系数)。我喜欢这种方法,因为它使解释相对效果变得更容易。
尽管如此,“MrFlick先生”是对的。这是一个用于交叉验证的问题。
https://stackoverflow.com/questions/33644110
复制相似问题