主要参考http://www.gcf.dkf.unibe.ch/BCB/files/BCB_10Jan12_Alexander.pdf
当方差分析发现组间均值的显著性差异之后,我们会进一步需要知道哪几组有显著性差异,这就要用到多重比较(Multiple comparisons)
但是我们不能使用传统的t检验来进行多重比较,因为传统的t检验犯第一类错误的概率为a,若用t检验进行多重比较,会把犯第一类错误概率提升到1-(1-a)^(n(n-1)/2),其中n是组数,n越大多重比较结果犯第一类错误概率越大。
因此需要使用其他的多重比较方法,一般会用到以下4种:
1.Fisher LSD ,但是需要校正
2.Tukey HSD ,但是仅限等样本量的条件下
3.Duncan’s test, 但是仅限等样本量的条件下
4.Games-Howell , 可以用于不等样本量、组间方差不同的情况下
可见,在实际研究中最适用的还是Games-Howell方法,
具体方法发表在这里
Paul A. Games and John F. Howell Pairwise Multiple Comparison Procedures with Unequal N's and/or Variances: A Monte Carlo Study Journal of Educational Statistics,Vol.1, No. 2, 1976, pp. 113-125
这个方法怎么实施呢?
如果你有SPSS,就不用担心了,里面有这个功能。
而至今没有一个R包能实现这个功能。
但是,这里有份日本人写的代码(代码链接,说明链接)完成了这个功能,
具体用法是这样的,先用以下命令读入代码:
source("http://aoki2.si.gunma-u.ac.jp/R/src/tukey.R", encoding="euc-jp")
或者直接拷贝以下内容:
# Tukey の方法による多重比較 # Games-Howell の方法も選択できるように拡張 2009/08/03 tukey <- function( data, # 観察値ベクトル group, # 群変数ベクトル method=c("Tukey", "Games-Howell")) # 手法の選択 { OK <- complete.cases(data, group) # 欠損値を持つケースを除く data <- data[OK] group <- factor(group[OK]) n <- tapply(data, group, length) # 各群のケース数 a <- length(n) # 群の数 phi.e <- sum(n)-a # 誤差分散(群内不偏分散)の自由度 Mean <- tapply(data, group, mean) # 各群の平均値 Variance <- tapply(data, group, var) # 各群の不偏分散 result1 <- cbind(n, Mean, Variance) # 各群の統計量 rownames(result1) <- paste("Group", 1:a, sep="") method <- match.arg(method) if (method == "Tukey") { # Tukey の方法 v.e <- sum((n-1)*Variance)/phi.e # 誤差分散(群内不偏分散) t <- combn(a, 2, function(ij) # 対比較 abs(diff(Mean[ij]))/sqrt(v.e*sum(1/n[ij])) ) p <- ptukey(t*sqrt(2), a, phi.e, lower.tail=FALSE) # 有意確率を計算する Tukey <- cbind(t, p) # 対比較の結果 rownames(Tukey) <- combn(a, 2, paste, collapse=":") return(list(result1=result1, Tukey=Tukey, phi=phi.e, v=v.e)) } else { # Games-Howell の方法 t.df <- combn(a, 2, function(ij) { # 対比較 t <- abs(diff(Mean[ij]))/sqrt(sum(Variance[ij]/n[ij])) df <- sum(Variance[ij]/n[ij])^2/sum((Variance[ij]/n[ij])^2/(n[ij]-1)) return(c(t, df))} ) t <- t.df[1,] df <- t.df[2,] p <- ptukey(t*sqrt(2), a, df, lower.tail=FALSE) # 有意確率を計算する Games.Howell <- cbind(t, df, p) # 対比較の結果 rownames(Games.Howell) <- combn(a, 2, paste, collapse=":") return(list(result1=result1, Games.Howell=Games.Howell)) } }
当然也可以把代码下载到本地再读取。
若要使用Games-Howell方法进行多重比较,调用函数
<code>tukey(data, group, method="G") </code>
即可,其中data为值,即连续变量;group为名义变量,即分类变量;method=”G”告诉函数使用Games-Howell方法进行多重比较。
分析结果跟SPSS结果差异不大,这份代码用起来没什么大问题。
tukey(data, group, method=”G”),data是指dataframe,group是IV分组,不用DV嘛?我跑不出来说找不到group55