分散分析と多重比較法(Tukey-Kramer・Bonferroni)前編
年が明けましたが、年末年始は統計学の勉強をざっとしていました。
使った本はこれ。
- 作者: 栗原伸一
- 出版社/メーカー: オーム社
- 発売日: 2011/07/26
- メディア: 単行本(ソフトカバー)
- 購入: 20人 クリック: 51回
- この商品を含むブログ (2件) を見る
その中で、すぐ使いそうな分散分析(ANOVA)と多重比較法をまとめておくことにしました。
分散分析
3つ以上の群の平均がすべて同じかどうか調べます。
検定には、F検定が使われます。
適当にデータをでっちあげて、とりあえずやってみることにします。
群1 | 群2 | 群3 | 群4 | |
標本1 | 10 | 15 | 24 | 28 |
標本2 | 11 | 12 | 26 | 30 |
標本3 | 8 | 13 | 23 | 31 |
群ごとに何か1つの要因が、強さを変えてはたらいている場合を考えます。
その要因が効果を影響を及ぼしているか、調べようと思います。
このとき、
帰無仮説:要因による影響はない。
となります。
群間変動(要因による)と群内変動(誤差による)の分散の比を算出し、F境界値よりもその値が大きければ帰無仮説は棄却されます。
つまり、要因に効果があると言うことができます。
今回は、エクセルの関数を使って(分析ツールを使わないで)計算していきます。
群間変動
- 群ごとの平均と総平均を算出します。
群1 群2 群3 群4 群平均 9.67 13.3 24.3 29.7 総平均 18.4 - 群平均から総平均を引きます。
群1 群2 群3 群4 群平均-総平均 -9.58 -5.91 5.08 10.4 - 偏差平方和を求めます。
群平均-総平均を群ごとに二乗した後、それぞれ足し合わせ、標本サイズ(今回は3)をかけます。偏差平方和 784 - 偏差平方和を自由度で割って、分散を求めます。
自由度=群数-1
今回は3です。分散 261
群内変動
- 群ごとの偏差平方和をDEVSQ関数で算出し、合計します。
群1 群2 群3 群4 偏差平方和 4.67 4.67 4.67 4.67 合計 18.7 - 偏差平方和を自由度で割って、分散を求めます。
群間変動のときの自由度とは、異なります。
自由度=(標本サイズ-1) × 群数
今回は8です。分散 2.33
F値とp値
群間・郡内変動の分散が分かったので、検定に入っていきます。
p値とF境界値は、エクセルの関数で求められます。
p値=FDIST(F値,群間変動の自由度,群内変動の自由度)
F境界値=FINV(有意水準,群間変動の自由度,群内変動の自由度)
有意水準を0.05とすると
値 | |
F値 | 112 |
F境界値 | 4.07 |
p値 | <0.001 |
となり帰無仮説が棄却され、いずれかの群間で要因による影響はあると言えます。
しかし、どの群間で要因による影響があるのかは分からないので、それを知りたい場合は多重比較が必要になります。
多重比較については、明日書く予定です。
追記:後編も書きました。合わせて、標本の数値を一部変更しました。
標本数→標本サイズに修正。
分析ツールを使う場合は、
http://www.aoni.waseda.jp/abek/document/anova.html
が参考になります。
Python用にサクラエディタをインストールしてみた
家では対話型シェルでポチポチしていたが、そろそろ何かのエディタを入れてみようかと思いました。
そこで、評判のいいサクラエディタを入れてみることにしました。
サクラエディタ初心者なら必ず入れたい便利機能3選 | Code部
取りあえず、リンク先の「インストールして真っ先にやっておきたい設定」をしました。
1.設定→共通設定→タブバー
2.「タブバーを表示」にチェック。
3.設定→共通設定→ファイル
4.「自動的に保存する」にチェック。
次に、Python用にタイプ別設定をしました。
これによって、キーワードが強調表示されます。
chonan blog: サクラエディタでPython mode
1.メニューバーの"設定">"共通設定"と選び、"強調キーワード"タブをクリックする。
2."セット追加ボタン"をクリックし、セット名をPythonとする。
3."インポート"から、python_2.5_kwdを選んで、OKを押す。
4.メニューバーの"設定">"タイプ別設定一覧"を選択し、設定されていない設定(設定17等)を選択して"設定変更"をクリックする。
5.設定の名前をPythonとし、ファイル拡張子にpyと入れる。
6."カラー"タブをクリックし、強調キーワード1にPythonのセットを選択する。
7.コメントスタイルはブロック型(F)"""~(T)"""、ブロック型(A)#~(Z)として、OKを押す。
設定されていない設定は、「追加」ボタンで追加できます。
また、コメントスタイルには、ブロック型'''~'''を追加しました。
加えて、インデントと文字コードも変えておきます。
1.設定→タイプ別設定→スクリーン
2.タブ幅を4に、「SPACEの挿入」にチェック。
3.設定→タイプ別設定→ウィンドウ
4.文字コードをUTF-8に。
ボタンを押すだけで実行できると便利だと思ったので、そのためのマクロを登録することにしました。
Python §48 : 開発環境をエディターで行う(サクラエディターのマクロを使って実行)|hitochan007のブログ(Pythonの勉強ブログ)
Editor.FileSave(); Editor.ExecCommand("python " + '"' + Editor.GetFilename() + '"', 1) // '"' はパスに空白が含まれている場合に有効
をpythondebug.jsという名前で保存。
1.設定→共通設定→マクロ
2.pythondebug.jsのあるディレクトリを参照します。
3.マクロ名を入力、ファイルはpythondebug.jsを選び、「設定」ボタンをクリック。
4.設定→共通設定→キー割り当て
5.種別を外部マクロにし、マクロ名とキーの組み合わせを選び、「割付」ボタンを押します。
これで割り当てられたボタンを押すと、【アウトプット】というタブが出現し、結果が出力されるようになりました。
numpy arrayの保存
numpy配列をそのままファイルに保存できることに気付きました。
リストと同じようにcsvモジュールで保存していたのは何だったのでしょうか……
Numpy.savetxtでcsv出力をする方法 | memotoxin
という訳で、上のページに書いているのを参考にしてnp.savetxtで配列を保存してみます。
import numpy as np x = np.ones((2, 3, 4)) np.savetxt("save.txt", x, fmt="%.0f", delimiter=",")
実行すると、float argument required, not numpy.ndarrayとエラーが出ました。
python - How to write a multidimensional array to a text file? - Stack Overflow
どうやら3次元以上の配列だと、2次元配列に変換しないとnp.savetxtで保存できないらしい。
そこで、もう1つの保存する関数であるnp.saveを使うことにしました。
np.save("save.npy", x)
今度は正常にファイルが保存できました。
.npy以外の拡張子を付けると、自動で.npyがファイル名の最後に付くようです。
保存したデータを読み込みたいときは、
y = np.load("save.npy")
で読み込むことができます。
ちなみにnp.savetxtで保存した配列は、np.loadtxtで読み込むことができるが、delimiterを正しく設定する必要があります。