如何在SP中使用" multcomp"进行成对比较。包

时间:2016-06-22 00:15:40

标签: r

我有三个因素:单词,类型和注册。在SPSS中,在SPSS中进行成对比较(或简单比较)很容易,语法是:

/EMMEANS=TABLES(word*register*type) COMPARE(type) ADJ (BONFERRONI)

它会给我一个这样的结果:

enter image description here

但是如何使用Multcomp包在R中实现这一点?如果我有这样的anova结果:

library (multcomp)
anova <- aov (data, min~word*register*type)
summary (anova)

如何进行类似SPSS的成对比较?

1 个答案:

答案 0 :(得分:1)

hsb2<-read.table("http://www.ats.ucla.edu/stat/data/hsb2.csv", sep=",", header=T)
attach(hsb2) # attach is a horrible practice, but just roll with it for this example
pairwise.t.test(write, ses, p.adj = "bonf")

这为您提供了在SPSS中看到的Bonferonni成对比较。

这可能会有所帮助,一般而言,UCLA提供了一些与SAS,SPSS,Stata,Mplus和R中的命令相关的良好资源:

http://statistics.ats.ucla.edu/stat/r/faq/posthoc.htm

http://www.ats.ucla.edu/stat/dae/

那么,那就是成对比较。您还可以使用p.adjust进行多重比较(多路)。请参阅本手册页&#34; Adjust P-values for Multiple Comparisons&#34;。

他们给出的示例显示了可以进行的不同调整,包括Bonferroni,是:

require(graphics)

set.seed(123)
x <- rnorm(50, mean = c(rep(0, 25), rep(3, 25)))
p <- 2*pnorm(sort(-abs(x)))

round(p, 3)
round(p.adjust(p), 3)
round(p.adjust(p, "BH"), 3)

## or all of them at once (dropping the "fdr" alias):
p.adjust.M <- p.adjust.methods[p.adjust.methods != "fdr"]
p.adj    <- sapply(p.adjust.M, function(meth) p.adjust(p, meth))
p.adj.60 <- sapply(p.adjust.M, function(meth) p.adjust(p, meth, n = 60))
stopifnot(identical(p.adj[,"none"], p), p.adj <= p.adj.60)
round(p.adj, 3)
## or a bit nicer:
noquote(apply(p.adj, 2, format.pval, digits = 3))


## and a graphic:
matplot(p, p.adj, ylab="p.adjust(p, meth)", type = "l", asp = 1, lty = 1:6,
        main = "P-value adjustments")
legend(0.7, 0.6, p.adjust.M, col = 1:6, lty = 1:6)

## Can work with NA's:
pN <- p; iN <- c(46, 47); pN[iN] <- NA
pN.a <- sapply(p.adjust.M, function(meth) p.adjust(pN, meth))
## The smallest 20 P-values all affected by the NA's :
round((pN.a / p.adj)[1:20, ] , 4)

This page还提供了一些不错的成对比较示例,其中ANOVA具有mentalphysicalmedical因子,并以各种方式调整p值。< / p>

This是Bretz的另一个优秀资源。

最后,这里有一个关于R中N路方差分析的SO question,它们显示了如何做3路和100路。