我必须分析的数据的研究设计很简单。有1个控制组(CTRL)和 2个不同的治疗组(TREAT_1和TREAT_2)。该数据还包括2个协变量COV1和COV2。我被要求检查数据中是否存在线性或二次处理效果。
我创建了一个虚拟数据集来解释我的情况:
df1 <- data.frame(
Observation = c(rep("CTRL",15), rep("TREAT_1",13), rep("TREAT_2", 12)),
COV1 = c(rep("A1", 30), rep("A2", 10)),
COV2 = c(rep("B1", 5), rep("B2", 5), rep("B3", 10), rep("B1", 5), rep("B2", 5), rep("B3", 10)),
Variable = c(3944133, 3632461, 3351754, 3655975, 3487722, 3644783, 3491138, 3328894,
3654507, 3465627, 3511446, 3507249, 3373233, 3432867, 3640888,
3677593, 3585096, 3441775, 3608574, 3669114, 4000812, 3503511, 3423968,
3647391, 3584604, 3548256, 3505411, 3665138,
4049955, 3425512, 3834061, 3639699, 3522208, 3711928, 3576597, 3786781,
3591042, 3995802, 3493091, 3674475)
)
plot(Variable ~ Observation, data = df1)
从图中可以看出,对照组和治疗组之间存在线性关系。为了检查这种线性效应是否具有统计显着性,我使用contr.poly()函数改变对比度并拟合这样的线性模型:
contrasts(df1$Observation) <- contr.poly(levels(df1$Observation))
lm1 <- lm(log(Variable) ~ Observation, data = df1)
summary.lm(lm1)
从摘要中我们可以看出线性效应具有统计显着性:
Observation.L 0.029141 0.012377 2.355 0.024 *
Observation.Q 0.002233 0.012482 0.179 0.859
然而,第一个模型不包括两个协变量中的任何一个。包括它们会导致线性关系的非显着p值:
lm2 <- lm(log(Variable) ~ Observation + COV1 + COV2, data = df1)
summary.lm(lm2)
Observation.L 0.04116 0.02624 1.568 0.126
Observation.Q 0.01003 0.01894 0.530 0.600
COV1A2 -0.01203 0.04202 -0.286 0.776
COV2B2 -0.02071 0.02202 -0.941 0.354
COV2B3 -0.02083 0.02066 -1.008 0.320
到目前为止一切顺利。然而,我被告知要进行II型Anova而不是I型。为了进行II型Anova,我使用了汽车包装中的Anova()功能。
Anova(lm2, type="II")
Anova Table (Type II tests)
Response: log(Variable)
Sum Sq Df F value Pr(>F)
Observation 0.006253 2 1.4651 0.2453
COV1 0.000175 1 0.0820 0.7763
COV2 0.002768 2 0.6485 0.5292
Residuals 0.072555 34
使用Type II时的问题是你没有得到线性和二次效应的p值。所以我不知道效果是统计线性的还是二次的。
我发现以下代码产生与Anova()函数相同的观察p值。但结果也不包括线性或二次效应的任何p值:
lm2 <- lm(log(Variable) ~ Observation + COV1 + COV2, data = df1)
lm3 <- lm(log(Variable) ~ COV1 + COV2, data = df1)
anova(lm2, lm3)
有人知道如何进行II型anova和对比函数来获得线性和二次效应的p值吗?
非常感谢帮助。
最佳彼得
答案 0 :(得分:4)
我找到了一个部分解决方法,但可能需要进一步修正。 stats包中函数drop1()的文档表明这个函数产生了Type II的平方和(虽然这个页面:http://www.statmethods.net/stats/anova.html)声明drop1()产生Type III的平方和,而我没有花太多时间仔细考虑(http://afni.nimh.nih.gov/sscc/gangc/SS.html)来交叉检查平方和计算。您可以使用它来手动计算所有内容,但我怀疑您是在问这个问题,因为如果有人已经完成了它会很好。
无论如何,我在虚拟数据中添加了第二个向量,称为Observation2,并使用 线性对比进行设置(您只能在给定时间为给定向量指定一组对比度) ):
df1[,"Observation2"]<-df1$Observation
contrasts(df1$Observation2, how.many=1)<-contr.poly
然后创建了第三个线性模型:
lm3<-lm(log(Variable)~Observation2+COV1+COV2, data=df1)
用drop1进行F检验,比较两种模型之间的II型ANOVA的F统计量: lm2,包含线性和二次项:
drop1(lm2, test="F")
lm3,其中包含 线性对比:
drop1(lm3, test="F")
这不包括模型相互之间的直接比较,尽管线性模型的F统计量更高(并且p值相应更低),这将导致人们依赖它而不是二次模型。