set.seed(123)このとき,anovaとboxplotの結果のみから第3群が1群と2群よりも大きな平均値を取るなどと言ってしまってはいけないですよね?anovaで示したのはこれら3群は他の2群と差がないとは言えない程度のもので,ある群が他の群より大きいことを示すには,
a <- as.factor(rep(c(1, 2, 3), each=100))#群番号の作成
b <- runif(100, 0, 1)#第1群に属するデータ
c <- runif(100, 10, 11)#第2群に属するデータ
d <- runif(100, 20, 21)#第3群に属するデータ
e <- c(b, c, d)
res <- lm(e~a)
anova(res)#他の群と平均値が同じとは言えないという結果
boxplot(b,c,d)#データ概観
summary(res)の結果,つまりモデルの係数値を比較しないといけないのではないかと考えるのですが,合っているでしょうか?
No.08937 Re: 分散分析のみでどの群間の平均値が一番大きいか言えるのか 【青木繁伸】 2009/01/17(Sat) 21:57
> set.seed(123)anova(res) の F value が 126195 で, p 値が < 2.2e-16 というのは,lm の 分散分析結果の F-statistic: 1.262e+05 on 2 and 297 DF, p-value: < 2.2e-16 というのは,全く同じ結果ですよね。
> n <- 100
> a <- as.factor(rep(c(1, 2, 3), each=n))#群番号の作成
> b <- runif(n, 0, 1)#第1群に属するデータ
> c <- runif(n, 10, 11)#第2群に属するデータ
> d <- runif(n, 20, 21)#第3群に属するデータ
> e <- c(b, c, d)
> res <- lm(e~a)
> anova(res)#他の群と平均値が同じとは言えないという結果
Analysis of Variance Table
Response: e
Df Sum Sq Mean Sq F value Pr(>F)
a 2 19975.0 9987.5 126195 < 2.2e-16 ***
Residuals 297 23.5 0.1
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> boxplot(b,c,d)#データ概観
> summary(res)
Call:
lm(formula = e ~ a)
Residuals:
Min 1Q Median 3Q Max
-0.50376 -0.24763 -0.02017 0.23388 0.49609
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.49856 0.02813 17.72 <2e-16 ***
a2 10.01567 0.03979 251.74 <2e-16 ***
a3 19.98749 0.03979 502.38 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.2813 on 297 degrees of freedom
Multiple R-squared: 0.9988, Adjusted R-squared: 0.9988
F-statistic: 1.262e+05 on 2 and 297 DF, p-value: < 2.2e-16
a2, a3 の 偏回帰係数(Estimate)が 10.01567,19.98749 というのも,ほぼ 0, 10, 20 になっているというのも,意味深。どの平均値が一番大きいかという判断は,効果量を使うとよいかも。
No.08940 Re: 分散分析のみでどの群間の平均値が一番大きいか言えるのか 【Sai】 2009/01/17(Sat) 23:02
返信ありがとうございます。効果量という言葉は初耳でしたので,少し調べてみました。
http://www.mizumot.com/files/EffectSize_KELES31.pdf
の 60ページ目にt検定など2つの群の差の比較を行う場合の効果量の導出法が書かれておりました。62ページを参照すると,分散分析の場合はまた違った効果 量を用いるのが慣例のようですが,今回はどの平均値が最も大きいのか知りたかったので,各群間での効果量の差がわかるt検定の場合の方法を採用しました。 書かれてある通りに計算したのが以下の例です。> m <- matrix(0,3,1)上記より,群1よりも群2が大きく,群2よりも群3のほうが大きいので,群3が最も大きな平均値を持つと結論付けましたがこのような方法で合っているでしょうか?
> m[1,1] <- (coef(res)[1]-coef(res)[2])/(sqrt((0.02813)^2+(0.03979)^2)/2)
> m[2,1] <- (coef(res)[2]-coef(res)[3])/(sqrt((0.03979)^2+(0.03979)^2)/2)
> m[3,1] <- (coef(res)[3]-coef(res)[1])/(sqrt((0.03979)^2+(0.02813)^2)/2)
> m
[,1]
[1,] -390.6116#群1は-391標準誤差分群2から離れている。つまり群2の方が大きい。
[2,] -354.4180#群2は-354標準誤差分群3から離れている。つまり群3の方が大きい。
[3,] 799.8863#群3は800標準誤差分群1から離れている。つまり群3の方が大きい。
それから"意味深"とは何を指しているのでしょうか??
No.08941 Re: 分散分析のみでどの群間の平均値が一番大きいか言えるのか 【青木繁伸】 2009/01/17(Sat) 23:14
> それから"意味深"とは何を指しているのでしょうか??
よくわからないけど,何か意味があるんだろうなと言う正直な感想です
データ数(n)を10000とか1000000とかにすると殆ど0,10,20になりますので。。。(まあ,この場合は,factor にしても,間隔尺度で扱っても殆ど同じになるということなんでしょう)> n <- 1000000
省略
> res <- lm(e~a)
省略
> summary(res)
省略
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.995e-01 2.886e-04 1731 <2e-16 ***
a2 1.000e+01 4.082e-04 24502 <2e-16 ***
a3 2.000e+01 4.082e-04 49000 <2e-16 ***
No.08943 Re: 分散分析のみでどの群間の平均値が一番大きいか言えるのか 【Sai】 2009/01/17(Sat) 23:36
返信ありがとうございます。>Coefficients:つまりデータ数が多くなるとぴったりになりやすいということでしょうか?それから連続でもカテゴリー変数でも結果が変わらないということですね。
> Estimate Std. Error t value Pr(>|t|)
>(Intercept) 4.995e-01 2.886e-04 1731 <2e-16 ***
>a2 1.000e+01 4.082e-04 24502 <2e-16 ***
>a3 2.000e+01 4.082e-04 49000 <2e-16 ***> a <- rep(c(1, 2, 3), each=100)#factorをとったそれでは効果量を使ってどの平均値が一番大きいか述べることにします。どうもありがとうございました。
省略
> summary(res)
Estimate Std. Error t value Pr(>|t|)
(Intercept) -9.51146 0.04458 -213.3 <2e-16 ***
a 9.99967 0.02064 484.5 <2e-16 ***
---
省略
Residual standard error: 0.2919 on 298 degrees of freedom
Multiple R-squared: 0.9987, Adjusted R-squared: 0.9987
F-statistic: 2.348e+05 on 1 and 298 DF, p-value: < 2.2e-16 #p値変わらず
No.08944 Re: 分散分析のみでどの群間の平均値が一番大きいか言えるのか 【青木繁伸】 2009/01/18(Sun) 09:49
b,c,d の平均値が 0,10,20 なので,直線関係なので,そうなって当たり前でしたね。
● 「統計学関連なんでもあり」の過去ログ--- 042 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る