Excel VBAで分析ツールの分散分析に多重比較をちょい足ししてみた1
自分の中で勝手にシリーズ化していた「Excel VBAで学ぶ『統計学がわかる』」も、いよいよ最後のテーマになりました。ラスボス、多重比較です。ちょっと前の記事で
分散分析は多重比較については書かれていません。多重比較から一気に難易度が上がるのでしかたないですね。
『統計学がわかる』シリーズを読み返してみた - 静粛に、只今統計勉強中
なんて書いていたのですが、t検定の有意水準を α÷要素の組合せ数 にするだけのボンフェローニ法ならそれほど難しくもなかったですね。でも、検出力の低さに定評があるボンフェローニ法は、あまり使いたくありません。
ここは、そこそこ人気のありそうなテューキー=クレーマー法にチャレンジしたい!
と思ったものの、どこをどう探しても、検定統計量q値を「スチューデント化された範囲の表」から読み取った境界値と照らし合わせる方法しか見つかりません。じゃなければ、SPSSとかRを使えと。う~む。
高価なSPSSは論外としても、Rなら勉強中だし、計算結果を出したいだけならRの使い方を調べれば済む話でしょう。でも!
一度火がついてしまった作りたい欲求は、そう簡単には消えないのです。
q境界値を求める
というわけで、力業(ちからわざ)で「スチューデント化された範囲の表」を丸々ソースコードに埋め込むことにしました。
こんな感じで、水準数(群数)2から10までの境界値を全て手入力。しんどかった!
入力ミスについてはチェック済みです。
また、自由度21以上の表から抜けている値については、
こんな風に補完の計算をする関数も作りました。
ちなみに、この関数の製作にあたっては、以下のブログを参考にさせていただいています。Deus ex machinaな日々先生、ありがとうございました。
さらに、自由度121以上の取り扱いについては、こちらも参考にしました。
試算してみたところ、水準数3、自由度137で q=3.31546558704453 となりました。
う~ん、精度はイマイチ。まあでも、そもそも「スチューデント化された範囲の表」自体が小数点3桁以下を丸めちゃってるわけで、今さら精度にこだわってもしょうがないかな、と。精度を求める向きはRをお使いください。
q検定統計量を求める
次は、検定統計量q値の計算です。「スチューデント化された範囲の表の補完」に続いてDeus ex machinaな日々先生のお世話になろうと思ったのですが、しかし???
こちらはネットで見つけた、日本女子大学の岡本安晴先生の資料*1に書かれている数式ですが、
http://mcn-www.jwu.ac.jp/~yokamoto/openwww/stat/multicomp/Tukey/readme.pdf
Deus ex machinaな日々先生の計算式
= ( i群平均値 - j群平均値 ) ÷ SQRT(分散の平均値 × (1÷i群のN数 + 1÷j群のN数))
には、 分母に 1/2 が見当たりません。
一方、別のサイトhttps://stats.biopapyrus.jp/stats/multivariate-test/tukeystest.html
では、
と書かれていて、検定統計量を求める式の分母に1/2がないのですが、その代わりに検定時にq境界値を√2で割っています。これはつまり、式変換で辺を移動したってことですよね。 ↓の式変換で合ってます、よね?
というわけで、Deus ex machinaな日々先生の計算式は誤りではないかと思われます。
以上を踏まえて、検定統計量を求める計算式は、
を使わせていただきます。
引数を渡す
引数は、エクセルExcelの分析ツール「分散分析:一元配置」で出力されるデータ*2からプログラムに渡してやります。
q境界値を求める関数の引数は水準数(群数)と誤差自由度ですから、以下の2つ。
q検定統計量を求める数式は、以下のとおりとなります。
さあ、あとはVBAで実装するだけです。