R言語

【R言語】バートレット検定 bartlett.testの使い方

  1. HOME >
  2. R言語 >

【R言語】バートレット検定 bartlett.testの使い方

スポンサーリンク

R言語でバートレット検定を実行する関数とその実行例について解説していきます。

この記事では、多群の等分散性の検定であるバートレット検定の概要やR言語での実行例を扱っています。

2群のF検定については、下の記事で解説しています。

【R言語】分散の比の検定・F検定 関数var.testの使い方

R言語でF検定を実行する方法を解説していきます。 2群間の等分散性の検定であるF検定を実行する関数とその実行例について見ていきます。 F検定の詳細については、下の記事で解説しています。 また、この記事 ...

続きを見る

また、この記事で紹介するプログラミングコードは以下のzipファイル中のスクリプトに保存しています。

バートレット検定

バートレット検定の概要とR言語の関数をまとめました。

概要

標本\(x_{i1}, x_{i2}, \ldots, x_{in_i},\ i= 1, 2, \ldots, k\)を\(N(\mu_i, \sigma_i^2)\)からの無作為標本とする。また、これらの標本に対応する確率変数を\(X_{i1}, X_{i2}, \ldots, X_{in_i},\ i= 1, 2, \ldots, k\)とする。次の「すべての母集団の分散が等しい」という仮説検定を考える。

\begin{align}&H_0:\ \sigma_1^2 = \sigma_2^2 = \cdots = \sigma_k^2\\ &H_1:\ \mathrm{not}\ H_0\end{align}

この仮説の検定統計量は次で与えられる。

\begin{align}X^2 &= \cfrac{(N-k) \log S^2+ \sum_{i = 1}^k (n_i - 1)\log S_i^2}{\left. 1 + \Bigl[ \sum_{i = 1}^k \bigl\{1 / (n_i - 1)\bigr\} - 1 / (N- k ) \Bigr\} \right/ 3(k - 1)} , \end{align}

ここに\(N = \sum_{i = 1}^k n_i\)、

\begin{align}S_i &= \cfrac{1}{n_i-1} \sum_{j=1 }^{n_i}(X_{ij} - \bar{X}_i)^2,\ i = 1, 2, \ldots, k, \\ \bar{X}_i &= \cfrac{}{} \sum_{j = 1}^{n_i} X_{ij},\ i = 1,2, \ldots, k,\\ S^2 &= \cfrac{1}{N - k}\sum_{i=1}^k (n_i - 1)S_i^2 .\end{align}

また、この検定の有意水準\(\alpha\)の棄却域は次で与えらえる。

\begin{align} (\chi_{k - 1, \alpha}^2, \infty),\end{align}

ここに、\(\chi_{k, \alpha}^2\)は自由度\(k\)のカイ二乗分布の上側\(\alpha\)点。

関数bartlett.test

次の関数bartlett.testを使うことで、バートレット検定を行うことができます。

bartlett.test(x, g, …) bartlett.test(formula, data, subset, na.action, …)
関数bartlett.testの引数
x数値データのベクトル、またはそれぞれの水準を表すリスト型のデータ、もしくは線形モデルのオブジェクト。
g群に対応するfactor型のベクトル。
formula式。次の引数dataで与えたデータセットに列名aとbがあるとき、bの水準に関するaの分散の比の検定がしたい場合a~bとする。
dataデータセット。
subset検定に用いる標本の部分集合をベクトルで指定できる。
na.actionデータセットに欠損値がある場合に行うこと。

実行例

バートレット検定の実行例について見ていきます。

データセットをプロットする際に以下のパッケージが必要なため、事前にインストールしたライブラリに追加しときます。

では、実際にバートレット検定を行っていきます。

データセットには次のirisを使います。SpeciesはSetosa、Versicolor、Virginicaという3つの水準があるため、これら3群間の分散の検定を行いたいと思います。

各SpeciesごとのSepal.Lengthのヒストグラムと箱ひげ図を描くには次のように関数ggplotを実行します。

ヒストグラムと箱ひげ図

バートレット検定によって「SpeciesによってSepal.Lengthの分散が等しい」という仮説検定を行いたいと思います。

次のように関数bartlett.testのの第1引数にデータ、第2引数にラベル(factor型のベクトル)を指定することで、バートレット検定をことができます。

また、2行目のように引数dataformulaを使って実行することもできます。

ポイント

上の結果から、p値=0.0003345<0.05より「Speciesの3水準間のSepal.Lengthの分散は全て等しくい」という仮説は棄却され、3水準間の分散は全て等しくないことが分かりました。

bartlett.testによる検定結果も以下のようにして取得することができます。検定統計量やp値などの検定結果を抽出することができます。

最後に検定結果をcsvファイルへ出力する例を紹介します。

次のように、関数data.frameを用いて検定結果(検定統計量やp値)データフレームに格納し、write.csvを用いてデータフレームをcsvファイルに出力します。

作業ディレクトリを確認すると、次の画像の"バートレット検定.csv"が作成されています。

バートレット検定結果

まとめ

R言語でバートレット検定を実行する関数とその実行例について紹介しました。

関数bartett.testを用いることでバートレット検定を簡単に実行することが可能です。

是非、今回紹介した内容を解析に役立出てください。

スポンサーリンク

  • この記事を書いた人
  • 最新記事

usagi-san

統計学とゲームとかをメインに解説していくよ。 数式とかプログラミングコードにミスがあったり質問があったりする場合はコメントで受け付けます。すぐに対応します。

-R言語
-, , ,