静粛に、只今統計勉強中

仕事でデータ分析をすることになったバリバリ文系アラフィフのおっさんが、独学で統計の勉強を始めました。

Excel VBAで分析ツールの分散分析に多重比較をちょい足ししてみた1

自分の中で勝手にシリーズ化していた「Excel VBAで学ぶ『統計学がわかる』」も、いよいよ最後のテーマになりました。ラスボス、多重比較です。ちょっと前の記事で

分散分析は多重比較については書かれていません。多重比較から一気に難易度が上がるのでしかたないですね。

『統計学がわかる』シリーズを読み返してみた - 静粛に、只今統計勉強中

なんて書いていたのですが、t検定の有意水準を α÷要素の組合せ数 にするだけのボンフェローニ法ならそれほど難しくもなかったですね。でも、検出力の低さに定評があるボンフェローニ法は、あまり使いたくありません。
ここは、そこそこ人気のありそうなテューキー=クレーマーにチャレンジしたい!

 

と思ったものの、どこをどう探しても、検定統計量q値を「スチューデント化された範囲の表」から読み取った境界値と照らし合わせる方法しか見つかりません。じゃなければ、SPSSとかを使えと。う~む。
高価なSPSSは論外としても、なら勉強中だし、計算結果を出したいだけならの使い方を調べれば済む話でしょう。でも!
一度火がついてしまった作りたい欲求は、そう簡単には消えないのです。

 

q境界値を求める

というわけで、力業(ちからわざ)で「スチューデント化された範囲の表」を丸々ソースコードに埋め込むことにしました。

f:id:cyclo-commuter:20180105182631j:plain

こんな感じで、水準数(群数)2から10までの境界値を全て手入力。しんどかった!
入力ミスについてはチェック済みです。
また、自由度21以上の表から抜けている値については、

f:id:cyclo-commuter:20180105183227j:plain

こんな風に補完の計算をする関数も作りました。
ちなみに、この関数の製作にあたっては、以下のブログを参考にさせていただいています。Deus ex machinaな日々先生、ありがとうございました。

さらに、自由度121以上の取り扱いについては、こちらも参考にしました。

試算してみたところ、水準数3、自由度137で q=3.31546558704453 となりました。
う~ん、精度はイマイチ。まあでも、そもそも「スチューデント化された範囲の表」自体が小数点3桁以下を丸めちゃってるわけで、今さら精度にこだわってもしょうがないかな、と。精度を求める向きはをお使いください。

 

q検定統計量を求める

次は、検定統計量q値の計算です。「スチューデント化された範囲の表の補完」に続いてDeus ex machinaな日々先生のお世話になろうと思ったのですが、しかし???

 

こちらはネットで見つけた、日本女子大学の岡本安晴先生の資料*1に書かれている数式ですが、

f:id:cyclo-commuter:20180105212628j:plain
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

では、

f:id:cyclo-commuter:20180105215244j:plain f:id:cyclo-commuter:20180105215301j:plain

と書かれていて、検定統計量を求める式の分母に1/2がないのですが、その代わりに検定時にq境界値を√2で割っています。これはつまり、式変換で辺を移動したってことですよね。 ↓の式変換で合ってます、よね?

f:id:cyclo-commuter:20180105222844j:plain

というわけで、Deus ex machinaな日々先生の計算式は誤りではないかと思われます。

以上を踏まえて、検定統計量を求める計算式は、

f:id:cyclo-commuter:20180106061012j:plain

を使わせていただきます。

 

引数を渡す

引数は、エクセルExcelの分析ツール「分散分析:一元配置」で出力されるデータ*2からプログラムに渡してやります。

q境界値を求める関数の引数は水準数(群数)と誤差自由度ですから、以下の2つ。

f:id:cyclo-commuter:20180106065008j:plain

q検定統計量を求める数式は、以下のとおりとなります。

f:id:cyclo-commuter:20180105235640j:plain

さあ、あとはVBAで実装するだけです。

*1:実はこの資料には、q境界値を求める数式も書かれているのですが、例によって文系脳には理解できませんでした。無念・・・

*2:統計学がわかる』第6章の例題のデータを拝借しています。