実装関連事項

各種プログラミング言語の基本的な書き方やソフトウェア等の使用方法について.

R にてハートレイ検定 (Hartley test) を行う.ハートレイ検定は得られた複数群のデータ間に等分散性,すなわち分散の一様性が仮定できるかどうかを検定する手法である.アメリカの統計学者,Herman Otto Hartley によって開発された.等分散性の検定には本検定法以外に,バートレット検定ルビーン検定等がよく用いられる.これら2つの検定法の使い分けは明確である.等分散性を正しく判定するためには,バートレット検定の使用が推奨され,正規分布に従わない可能性のあるデータに対してはルビーン検定を用いることが良しとされる.一方で,ハートレイ検定は,弘前大学の研究グループが公開している実験結果によると,上述の3検定法の中でハートレイ検定は,真の分散値に差がある2つ以上の標本に対して,正確に差があると判定する能力 (1-β) が最も優れている.すなわち,ハートレイ検定は,高い検出力が必要とされるような場合に用いるべき検定法である.R では,パッケージ SuppDists の関数 pmaxFratio() を利用することで実行できる.

最初に,Rを起動させ,以下のコマンドにてパッケージをインストールし,そのパッケージを読み込む.既にインストール済みの場合,1行目のコマンドは不要.

$ install.packages("SuppDists", repos="http://cran.ism.ac.jp/")
$ library(SuppDists)

以下のサンプルサイズが3からなるデータA,B,C,D,Eが得られたとき,各データ間における分散が等しいか否かをハートレイ検定にて解析する.ハートレイ検定では,各データのサンプルサイズが揃っている必要がある.ここで,帰無仮説 (H0) は各群の母分散は全て等しいことである.

データA12.2, 18.8, 18.2
データB22.2, 20.5, 14.6
データC20.8, 19.5, 26.3
データD26.4, 32.6, 31.3
データE24.5, 21.2, 22.4

p値の計算

最初に,データを読み込む.以下のコマンドにて,上のデータAからEをまとめて変数 vx に格納する.

$ vx=c(12.2, 18.8, 18.2, 22.2, 20.5, 14.6, 20.8, 19.5, 26.3, 26.4, 32.6, 31.3, 24.5, 21.2, 22.4)

次に,以下のコマンドにて,読み込んだデータの各水準に名前を付ける.名前は新たな変数 fx に格納する.データAからEの標本数はそれぞれ,3,3,3,3,3であるが,以下のコマンドの rep(...) にてその標本数に対応するAからEの文字列ベクトルを発生させる.factor(...) はベクトルを因子に変換する関数である.データの読み込み,およびその後の解析は,分散分析を行うときと同様にエクセルやテキストファイル形式のデータをデータフレームとしてそのまま読み込んでも良い.

$ fx=factor(rep(c("A", "B", "C", "D", "E"), c(3, 3, 3, 3, 3)))

次に,以下のコマンドにてハートレイ検定の統計量を求め,新たな変数 fmax に格納する.ここで,by は fx にて指定した水準毎に,オプション FUN で指定した関数 (この場合,不偏分散を求める関数 var) を適用して算出する関数である.max はAからEの不偏分散の中で最も大きい値を返す関数であり,min は最も小さい値を返す関数である.

$ fmax=max(by(vx,fx,FUN=var))/min(by(vx,fx,FUN=var))

以上で求めた fmax を用い,ハートレイ検定は 1-pmaxFratio(fmax,水準内の自由度,水準数) のように行う.水準内の自由度は,各水準におけるサンプルサイズから1を引いた値である.ハートレイ検定では各水準におけるサンプルサイズは揃っている必要があり,この場合サンプルサイズは3なので (3-1) より2となる.水準数はAからEの5つ水準があるので5である.実際には以下のように打つ.

$ 1-pmaxFratio(fmax, 2, 5)

結果は以下のようになる.

0.8154272

算出される値はp値である.有意水準を5%としていた場合はこの値が0.05より小さいとき,1%としていた場合は0.01より小さいとき帰無仮説が棄却され,各水準間の分散が一様であるとはいえない,という結論が導かれる.以上の場合は,p値は0.05と比較しても,0.01と比較しても非常に大きいため (p > α) 帰無仮説は保留され,各データ間の分散に一様性を仮定できる.ただし,以上の関数 pmaxFratio() は指定する水準数および自由度の組み合わせによっては明らかな異常値を返す場合があり,得られたp値は注意深く観察することが必要.

Hatena Google+