R言語

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

  1. HOME >
  2. R言語 >

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

スポンサーリンク

R言語でF検定を実行する方法を解説していきます。

2群間の等分散性の検定であるF検定を実行する関数とその実行例について見ていきます。

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

【統計学】等分散性のF検定・分散の比の検定

2つの母集団の分散の比ついての仮説を検定する際に用いられるF検定を解説する。 F検定の検定統計量の導出や検定統計量がF分布に従うことの証明をしていく。 また、母集団の分散の比を検定しt検定を行う際の検 ...

続きを見る

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

F検定

F検定の概要とR言語の関数を以下にまとめました。

概要

F検定

\(x_{11}, \ldots, x_{1n_1}\)は\(N(\mu, \sigma_1^2)\)からの独立同一な標本であるとし、\(x_{21}, \ldots, x_{2n_2}\)は\(N(\mu, \sigma_2^2)\)からの独立同一な標本であるとする。このとき、次の「2つの母集団の分散\(\sigma_1^2\)と\(\sigma_2^2\)は等しいか」の仮説を検定する。

\begin{align}&H_0: \sigma_1^2 = \sigma_2^2\\&H_1: \sigma_1^2 \neq \sigma_2^2\end{align}

検定統計量として次を用いる。

\begin{align} F = \cfrac{s_1^2}{s_2^2}\sim F_{n_2-1}^{n_1-1},\end{align}

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

\begin{align}[0, F_{n_2-1, 1-\alpha/2}^{n_1-1}) \cup (F_{n_2-1, \alpha/2}^{n_1-1}, \infty),\end{align}

ここに、\(s_1^2\)と\(s_2^2\)は次で定義される不偏標本分散の確率変数である。

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

関数var.test

次の関数var.testを用いることで、F検定を実行することができます。

var.test(x, y, ratio = 1, alternative = c("two.sided", "less", "greater"), conf.level = 0.95, …)

var.test(formula, data, subset, na.action, …)

関数var.testの引数
x片方の群のnumric型のベクトルのデータ、または線形モデルのオブジェクト。
yもう一方の群のnumric型のベクトルのデータ、または線形モデルのオブジェクト。
ratio帰無仮説で与える分散の比の値。デフォルトで1。
alternative対立仮説の設定。"two-sided"で両側検定、"greater"で右片側検定、"less"で左片側検定を指定できる。
conf.level信頼区間の信頼度。
formula式。次の引数dataで与えたデータセットに列名aとbがあるとき、bの水準に関するaの分散の比の検定がしたい場合a~bとする。
dataデータセット。
subset検定に用いる標本の部分集合をベクトルで指定できる。
na.actionデータセットに欠損値がある場合に行うこと。

実行例

F検定の実行例を紹介します。

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

データセットとして次のirisを用います。

データirisには3つの水準をもつSpeciesという列があります。

Speciesの水準に関するSepal.Lengthの経験分布と箱ひげ図は次のようになります。

setosaとversicolorのヒストグラムと箱ひげ図

SetosaVersicolorの箱ひげ図のひげの長さが異なるため、例として「SetosaとVersicolorか」という仮説検定をしたいと思います。

等分散性のF検定は次のように関数var.testの引数dataにデータセット、formulaに変数名~グループ名を渡すことで実行することができます。

また、3行目以降のように第1引数と第2引数に2つの群のデータを渡す方法でも実行できます。

testResultを参照するとコンソール上にF検定の結果が表示されます。

ポイント

p値=0.008657<0.05より、「SetosaとVersicolorの群のSepal.Lengthの分散は等しいとは言えない」という結果が得られ、SetosaとVersicolor間で分散が異なることが分かりました。

上の実行結果に書いてある検定結果は次のようにtestResultの後ろに$を付けることで取得することが可能です。

csvファイル等に保存したいときは、以下のように関数data.frameを用いこれらの検定結果の値をデータフレームに格納し、write.tablewrite.csvなどでcsvファイルへ出力することができます。

作業ディレクトリに次の"F検定.csv"が保存されます。

F検定結果

次に片側検定の例について見ていきます。

データセットに次の正規乱数のデータxyを用います。

以下、xとyのヒストグラムと箱ひげ図です。xの方が標準偏差が大きいのが分かります。

xとyのヒストグラムと箱ひげ図

「xの母分散はyの母分散よりも大きい」という仮説検定を実行するには、次のように関数var.testの引数alternativeを"greater"にします。

testResultを参照すると片側検定の結果が出力されます。

ポイント

p値=2.967e-07<0.05より、「xとyの母分散は等しいとは言えない」という結果が得られ、xの母分散はyの母分散よりも大きいことが分かりました。

両側検定と同様に、上で計算した検定結果を次のようにして取得することが可能です。

まとめ

R言語でF検定の関数とその実行例について解説しました。

標準で実装されている関数var.testを用いることでF検定を実行することができます。

スポンサーリンク

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

usagi-san

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

-R言語
-, , ,