No.03917 一元配置分散分析における「差の差」の検定  【伊藤】 2007/07/14(Sat) 03:47

対応のある一元配置分散分析(3水準)を行っています。
要因の主効果は有意で,多重比較の結果,
全ての水準間に有意差がみられたのですが,
平均値,標準誤差等を見る限り,
水準1と水準2の差よりも,水準2と水準3の差の方が
大きいように見えます。
この「差の差」が0でないことを
統計的検定によって確かめたいのですが,
そのような方法は存在するのでしょうか?
二要因分散分析における交互作用の検定と
近いイメージなのですが。

初歩的な質問ですみません。
よろしくお願いします。

No.03931 Re: 一元配置分散分析における「差の差」の検定  【伊藤】 2007/07/16(Mon) 21:51

説明の仕方が悪かったので,補足させていただきます。
お聞きしたいのは,対応のある一要因計画において,
「水準1と水準2の差」と「水準2と水準3の差」の大きさの違いを
比較する検定の方法です。

各被験者について,(水準1−水準2)と(水準2−水準3)の値を算出し,
それらを対応のあるt検定にかければよいのでしょうか?

No.03937 Re: 一元配置分散分析における「差の差」の検定  【マスオ】 2007/07/18(Wed) 01:52

(水準1−水準2)-(水準2−水準3)= 水準1− 2 * 水準2 + 水準3
なので,
(1 -2 1) の対比を検定してやればよいでしょう.
対応のある場合であれば,例えばRだと,
> set.seed(1)
> d <- data.frame(x=rnorm(30, c(0, 1, 4)), g=gl(3, 1, 30),s=gl(10, 3))
> m <- lm(x~g+s, d)
> library(gmodels) # gmodelsパッケージのインストールが必要
> fit.contrast(m, "g", c(1, -2, 1))
Estimate Std. Error t value Pr(>|t|)
g c=( 1 -2 1 ) 2.047408 0.7691019 2.662077 0.01587817
>
> # 各被験者での差分を paired (one sample) t-testしてみると,
> dd <- unstack(d, x~g)
> t.test(dd$X1-2*dd$X2+dd$X3)

One Sample t-test

data: dd$X1 - 2 * dd$X2 + dd$X3
t = 3.0774, df = 9, p-value = 0.01319
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
0.5424037 3.5524127
sample estimates:
mean of x
2.047408

> # estimateは同じだが,標準誤差を少なく見積もってしまうようだ.

No.03943 Re: 一元配置分散分析における「差の差」の検定  【太郎】 2007/07/18(Wed) 15:24

マスオさんの方法では,事前比較では有効ですが,このケースは事後比較になるので,多重性を考慮する必要があります。
 シェフェの対比の検定をマスオさんのt検定に換えて行った方がいいと思います。

No.03949 Re: 一元配置分散分析における「差の差」の検定  【マスオ】 2007/07/19(Thu) 01:22

すみません.多重性の問題はちょっとおいておいて,別件で自己レスです.

> data: dd$X1 - 2 * dd$X2 + dd$X3

これは提示例では平均=2,分散=6の正規分布になるのでしたね.
ということは,

> 標準誤差を少なく見積もってしまうようだ.

は間違いで,差分の paired t-testでも有意確率は正確なはず.
ということは,こちらでもよいのかもしれない.
どこが違うのだろう...

例数 10,3水準,平均 0,1,2,分散 1でシミュレーション↓
> loop <- 100000
> n <- 10
> df <- (n-1)*2
> t <- replicate(loop, {
+ x <- matrix(rnorm(n*3, c(0, 1, 2)), 3)
+ mc <- rep(colMeans(x), each=3)
+ mr <- rowMeans(x)
+ mt <- mean(x)
+ d <- x[1,]-2*x[2,]+x[3,]
+ c(contrast= sum(mr*c(1, -2, 1))/sqrt(sum((x-mr-mc+mt)^2)/df*6/n),
+ ttest= mean(d)/sqrt(var(d)/n) )
+ }
+ )
> rowSums(abs(t)>=qt(0.975, c(df, n-1)))/loop
contrast ttest
0.05019 0.04958

No.03967 Re: 一元配置分散分析における「差の差」の検定  【伊藤】 2007/07/20(Fri) 21:29

マスオさん,太郎さん,ありがとうございます。
多重性を考慮しつつ,対比の検定を行えばよいということですね。
またわからないことがあったら,質問させてください。

No.03968 Re: 一元配置分散分析における「差の差」の検定  【マスオ】 2007/07/20(Fri) 23:40

ありゃ,こっそり修正しようと思っていたらまたレスがついてしまった.(^^);

>> 標準誤差を少なく見積もってしまうようだ.
> は間違いで,差分の paired t-testでも有意確率は正確なはず.
> ということは,こちらでもよいのかもしれない.

こちらでは,あわて者の過誤率は正確でも,誤差自由度が小さい分,検出力が低いですね.
nを小さくしてみるとよくわかる.

> f <- function(n=10, mean=c(0,1,2), sd=1, loop=1000) {
+ df <- (n-1)*2
+ t <- replicate(loop, {
+ x <- matrix(rnorm(n*3, mean, sd), 3)
+ mc <- rep(colMeans(x), each=3)
+ mr <- rowMeans(x)
+ mt <- mean(x)
+ d <- x[1,]-2*x[2,]+x[3,]
+ c(contrast= sum(mr*c(1, -2, 1))/sqrt(sum((x-mr-mc+mt)^2)/df*6/n),
+ ttest= mean(d)/sqrt(var(d)/n))
+ }
+ )
+ cbind("<0.05"=rowSums(abs(t)>qt(0.975, c(df, n-1))),
+ "<0.01"=rowSums(abs(t)>qt(0.995, c(df, n-1))),
+ "<0.001"=rowSums(abs(t)>qt(0.9995, c(df, n-1))))/loop
+ }
>
> f(n=10, mean=c(0, 1, 2), loop=100000)
<0.05 <0.01 <0.001
contrast 0.04983 0.00983 0.00105
ttest 0.04931 0.00976 0.00087
>
> f(n=10, mean=c(0, 1, 4), loop=100000)
<0.05 <0.01 <0.001
contrast 0.68852 0.41118 0.14332
ttest 0.63651 0.32789 0.08225
>
> f(n=3, mean=c(0, 1, 7), loop=100000)
<0.05 <0.01 <0.001
contrast 0.75213 0.34935 0.05989
ttest 0.48354 0.12532 0.01372

● 「統計学関連なんでもあり」の過去ログ--- 040 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る