反復測定分散分析

MikuHatsune2013-09-11

数学いらずの医科統計学PART7 CHAPTER39で、反復測定分散分析について書いてある。
ふむ、なるほどわからんと思ったが要は対応のある検定を考える。こちらのデータセットをパクってやってみる。

# 下のものをコピペ
data0 <- read.table("clipboard", sep="\t", header=TRUE)
data1 <- unlist(data0)
t1	t2	t3
0.59	0.75	0.75
0.35	0.52	0.45
0.47	0.87	0.64
0.55	0.47	0.69
0.59	0.5	0.53
0.58	0.66	0.71
0.64	0.71	0.79
0.54	0.54	0.56
0.51	0.79	0.48
0.59	0.58	0.58
0.25	0.23	0.33
0.43	0.59	0.5
0.47	0.66	0.71

実験のデザインとしては、13人の被験者に3つの実験を行い、データを取った。
何も考えないANOVAなら、3つの実験は独立として平均値に差があるかどうかを考える。

t0 <- factor(rep(1:3, each=nrow(data0))) # グループ分け
summary(aov(data1 ~ t0)) # ANOVA
            Df Sum Sq Mean Sq F value Pr(>F)
t0           2 0.0791 0.03954   2.065  0.142
Residuals   36 0.6894 0.01915 

雰囲気としてはこんな感じ。

boxplot(data0)
mapply(function(i) points(rep(i, nrow(data0)), data0[,i], col=i, pch=16), seq(ncol(data0)))


 
反復測定分散分析では、各群にいる被験者は独立でない、つまり、1番目の人は実験1, 2, 3それぞれ受けてデータを取られているから、ここで各群で誰がどうだったかの対応を考える。

s0 <- factor(rep(seq(nrow(data0)), ncol(data0))) # どの実験のなかで誰が誰か

boxplot(data0)
mapply(function(i) points(rep(i, nrow(data0)), data0[,i], col=i, pch=16), seq(ncol(data0)))
for(i in 1:(ncol(data0) - 1)){
	for(j in seq(nrow(data0))){
		segments(i, data0[j, i], i+1, data0[j, i+1], lty=2, col=grey(0.4))
	}
}


この対応関係を考えてANOVAをすると

summary(aov(data1 ~ t0 + s0))
            Df Sum Sq Mean Sq F value   Pr(>F)    
t0           2 0.0791 0.03954   4.959 0.015759 *  
s0          12 0.4980 0.04150   5.204 0.000297 ***
Residuals   24 0.1914 0.00797                     
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1