我需要在R中执行多个成对方差分析,并使用bonferroni校正p值。然而,我不需要将每个类相互比较。下面是我的数据格式和selcontrasts:我需要用它们来对比log10relquant。你们谁知道我是怎么做的吗?我使用dplyr、lsmeans和broom包。
SEX EXPERIENCED AGE CLASS compound relquant log10relquant
1 FEMALE NO 1D 1F C14 0.004012910 -2.396541
2 FEMALE NO 1D 1F C14 0.003759812 -2.424834
3 FEMALE NO 1D 1F C14 0.003838553 -2.415832
4 FEMALE NO 1D 1F C14 0.003582754 -2.445783
5 MALE NO 1D 1M C14 0.005099237 -2.292495
6 MALE NO 1D 1M C14 0.005379093 -2.269291
selcontrasts <- c("1F - 1M", "4F - 4M", "4EF - 4EM",
"7F - 7M", "7EF - 7EM", # sex differences
"1M - 4M", "4M - 7M", "1M - 7M", "1F - 4F",
"4F - 7F", "1F - 7F", # age differences
"4M - 4EM", "7M - 7EM", "4F - 4EF",
"7F - 7EF" # social experience)
x=list(selcontrasts)目前,我使用它来配对整个数据集(因此要对每个类进行compair ),而不是选择对比度:
pvalsage=data.frame(datagr %>%
do( data.frame(summary(contrast(lsmeans(
aov(log10relquant ~ CLASS, data = .), ~ CLASS ),
method="pairwise",adjust="none"))) ))为了只做列表x中选定的对比度,我尝试:
pvalsage=data.frame(datagr %>%
do(data.frame(summary(contrast(lsmeans(
aov(log10relquant ~ CLASS, data = .),~ CLASS),
method = x, adjust="none"))) ))但是我得到了一个错误:
error in contrast.ref.grid(lsmeans(aov(log10relquant ~ CLASS, data = .), :
Nonconforming number of contrast coefficients发布于 2018-01-15 06:23:15
如果我正确地理解了这个问题(我很可能理解错了),那么实际上涉及三个因素:SEX (两个级别)、EXPERIENCED (两个级别)和AGE (三个级别,即1、4和7)。所需要的是对其他两个因素的每个组合的每个因素的水平进行单独比较。
如果是这样,那么将这三个因素组合为一个名为CLASS的因素只会使其更加困难,因为它使得单独跟踪这些因素的水平变得更加困难。更简单的方法是拟合一个考虑了所有三个因素的模型,估计每个因素组合的平均值,然后使用by变量进行所需的比较。因此,对于每个数据集dat,您需要执行以下操作:
require(emmeans)
mod = aov(log10relquant ~ SEX * EXPERIENCED * AGE, data = dat)
emm = emmeans(mod, ~ SEX * EXPERIENCED * AGE)
rbind(pairs(emm, by = c("EXPERIENCED", "AGE")),
pairs(emm, by = c("SEX", "EXPERIENCED")),
pairs(emm, by = c("SEX", "AGE")),
adjust = "bonferroni")我并没有试图将其嵌入到函数式编程范例中;我将把这些细节留给操作员来解决。
注意:emmeans包(估计边际均值)是lsmeans的延续,在未来将被弃用。它是以同样的方式工作的。
PS --查看问题中的代码,我担心最终结果不会显示正在比较的实际估计值(EMM),只显示比较;以及命名中的进一步含义,实际上,仅寻求P值。这让我很恼火。我不喜欢看到人们不看被测试的数量就直接去做统计测试。
发布于 2018-01-21 04:49:47
无论如何,您都可以进行成对对比,然后将只包含您的对比度的行过滤到一个新的数据帧中,然后是只包含您感兴趣的对比度的p.adjust= bonferroni。
或者,您可以编写一个方法函数并定义自对比,并将其用作mycontr.lmsc =
(Y)
https://stackoverflow.com/questions/47893568
复制相似问题