Repeated Measures ANOVA (4)

  • 初期値依存のとき
  • 時系列で記録する。グループ別に記録する。ただし、時刻0での値は、ある状態を反映しているので、それを織り込むことが妥当だとする
  • 以下で解析しているのは、次に示すグラフ(左は2群を併せたもの、中央と右が群別の経過)のうち上の方の区別がしにくい方。下の方はどのような区別があるのかが分かりやすいように乱雑項を小さくした図(この図だと2方法のどちらでも強い統計的有意性が示される)


# サンプル数
# No. samples
n.s <- 200
# 計測時刻数
# No. recording time points
n.t <- 3
# サンプルのフェノタイプ
# Phenotype of samples
p <- sample(1:2,n.s,replace=TRUE)
s1 <- which(p==1)
s0 <- which(p==2)

# 全データ
# Recorded data
X <- matrix(0,n.s,n.t)
# 時刻1の値
# Values @ time=1
X[,1] <- rnorm(n.s,1)
X[,2] <- X[,1] + 0.2*X[,1]/mean(X[,1])*(p-1)+rnorm(n.s,0,0.7)
X[,3] <- X[,2] + 0.2*X[,1]/mean(X[,1])*(p-1)+rnorm(n.s,0,0.6)
# Let's take a look at the trends.
boxplot(X)

# レコードの納め方を変える
XX <- cbind(c(X),expand.grid(1:n.s,1:n.t))
XX.fr <- data.frame(id=XX[,2],group=p[XX[,2]],time=XX[,3],pulse=XX[,1])
XX.fr <- within(XX.fr, {
  group <- factor(group)
  time <- factor(time)
  id <- factor(id)
})
with(XX.fr, interaction.plot(time, group, pulse,
   lty= c(1, 12), lwd = 3,
  ylab = "mean of pulse", xlab = "time", trace.label = "group"))
out.aov <- aov(pulse ~ group * time + Error(id), data = XX.fr)

# 時刻0の値を変数として取り扱うことにする
XX.fr.2 <- data.frame(id=XX[,2],group=p[XX[,2]],time=XX[,3],pulse=XX[,1],pulse0=X[XX[,2],1])
XX.fr.2 <- within(XX.fr.2, {
  group <- factor(group)
  time <- factor(time)
  id <- factor(id)
})
with(XX.fr.2, interaction.plot(time, group, pulse,
   lty= c(1, 12), lwd = 3,
  ylab = "mean of pulse", xlab = "time", trace.label = "group"))
out.aov.2 <- aov(pulse ~ group * time * pulse0 + Error(id), data = XX.fr.2)

par(mfcol=c(1,3))
boxplot(X)
boxplot(X[s0,])
boxplot(X[s1,])
par(mfcol=c(1,1))
par(mfcol=c(1,3))
matplot(t(X),type="l",ylim=range(X))
matplot(t(X[s0,]),type="l",ylim=range(X))
matplot(t(X[s1,]),type="l",ylim=range(X))
par(mfcol=c(1,1))

# 初期値を取り込む場合とそうでない場合
summary(out.aov)
summary(out.aov.2)
  • 結果
> summary(out.aov)

Error: id
           Df Sum Sq Mean Sq F value Pr(>F)
group       1   11.2  11.237     2.6  0.108
Residuals 198  855.9   4.323               

Error: Within
            Df Sum Sq Mean Sq F value   Pr(>F)    
time         2   6.50   3.251  11.487 1.41e-05 ***
group:time   2   0.35   0.177   0.625    0.536    
Residuals  396 112.06   0.283                     
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
> summary(out.aov.2)

Error: id
              Df Sum Sq Mean Sq F value   Pr(>F)    
group          1   11.2    11.2   17.46 4.41e-05 ***
pulse0         1  721.8   721.8 1121.75  < 2e-16 ***
group:pulse0   1    8.1     8.1   12.55 0.000496 ***
Residuals    196  126.1     0.6                     
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Error: Within
                   Df Sum Sq Mean Sq F value   Pr(>F)    
time                2   6.50   3.251  12.614 4.91e-06 ***
group:time          2   0.35   0.177   0.686 0.504217    
time:pulse0         2   4.10   2.048   7.948 0.000414 ***
group:time:pulse0   2   6.95   3.473  13.477 2.19e-06 ***
Residuals         392 101.02   0.258                     
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1