R言語

【R言語】ウィルコクソンの順位和検定 マン・ホイットニーのU検定 関数wilcox.test

  1. HOME >
  2. R言語 >

【R言語】ウィルコクソンの順位和検定 マン・ホイットニーのU検定 関数wilcox.test

スポンサーリンク

R言語でノンパラメトリック検定であるウィルコクソンの順位和検定とマン・ホイットニーのU検定を実行する関数やその実行例を紹介します。

実行例では、正規性をもたないデータセットに対し、ウィルコクソンの順位和検定やマン・ホイットニーのU検定で位置母数に関する検定を行う例について見ていきます。

この記事で扱うRスクリプトは以下からダウンロードできます。

また、ウィルコクソンの順位和検定について詳しく見たい方は次の記事を参照してください。

【統計学】ウィルコクソンの順位和検定

ノンパラメトリックの検定の一種であるウィルコクソンの順位和検定について解説する。 ウィルコクソンの順位和検定の検定統計量と棄却域を紹介し、それらを導出する方法を紹介する。 順位和統計量の期待値と分散を ...

続きを見る

Rでデータ解析を始めるならコレ
¥3,300 (2022/06/01 17:20時点 | Amazon調べ)

ウィルコクソンの順位和検定

ノンパラメトリック検定であるウィルコクソンの順位和検定の概要と検定を実行する関数を紹介します。

検定の概要

ウィルコクソンの順位和検定の概要は以下の通りです。

次に示すように、分布(モーメント)を仮定していないのが特徴です。

パラメトリック検定で代表的なt検定では母集団分布に正規性を仮定しましたが、ウィルコクソンの順位和検定ではしないため、標本数が十分であればどのようなデータに対しても位置母数に関する検定を行うことができます。

ウィルコクソンの順位和検定

\(x_1, \ldots, x_{n_1}\)と\(y_1, \ldots, y_{n_2}\)をそれぞれ確率密度関数\(f(x)\)と\(g(y)\)分布関数\(F(x)\)と\(G(y)\)をもつ母集団からの標本数\(n_1\)、\(n_2\)の標本とする。また、これらの標本\(x_1, \ldots, x_{n_1}\)と\(y_1, \ldots, y_{n_2}\)を小さい順に並べ、ぞれぞれの母集団に対応する順位を\(r_1, \ldots, r_{n_1}\)、\(s_1, \ldots, s_{n_2}\)とする。今、母集団分布の尺度母数は等しいと仮定する。すなわち\(F(x) = G(x + \Delta)\)。ここで、「2つの母集団分布の位置母数が等しい」という次の仮説を考える。

\begin{align}&H_0:\ \Delta = 0\\ &H_1:\ \Delta \neq 0\end{align}

この仮説の検定統計量として次を用いる。

\begin{align} Z = \cfrac{W - \mathrm{E}[W]}{\sqrt{\mathrm{Var}[W]}} \sim N(0,1),\end{align}

ここに、\(W\)は次で定義される順位和統計量である。

\begin{align}W = \sum_{i = 1}^{n_1}R_i.\end{align}

また、\(W\)の期待値と分散は次で与えられる。

\begin{align}\mathrm{E}[W] &= \cfrac{n_1(n_1 + n_2 + 1)}{2},\\ \mathrm{Var}[W] &= \cfrac{n_1n_2(n_1 + n_2 + 1)}{12}.\end{align}

有意水準\(\alpha\)の検定の棄却域は次のとおりである。

\begin{align}(-\infty, Z(\alpha/2)) \cup (Z(\alpha/2) , \infty)\end{align}

関数wilcox.test

続いてウィルコクソンの順位和検定の関数を紹介します。

次のwilcox.testによって、ウィルコクソンの順位和検定を実行することができます。

2標本検定の場合はマン・ホイットニーのU検定と同じ結果が得られます。

wilcox.test(x, …)

# S3 method for default
wilcox.test(x, y = NULL, alternative = c("two.sided", "less", "greater"), mu = 0, paired = FALSE, exact = NULL, correct = TRUE, conf.int = FALSE, conf.level = 0.95, …)

# S3 method for formula wilcox.test(formula, data, subset, na.action, …)

また、wilcox.testの引数は以下の通りです。

関数wilcox.testの引数
xnumeric型の観測値のベクトル。有限で無い値は除外される。
ynumeric型の観測値のベクトル。二標本検定の際に用いる。有限で無い値は除外される。
alternativecharacter型。"two.sided"で両側検定、"greater"で右片側検定、"less"で左片側検定を指定できる。
munumeric型。帰無仮説の下での位置パラメータ。
pairedlogical型。TRUEのとき対応のある検定をする。
exactlogical型。TRUEのとき正確なp値を算出する。
correctlogical型。TRUEのときp値の計算の際に正規近似に連続性補正を適用する。
conf.intlogical型。TRUEのとき信頼区間を算出する。
conf.levelnumeric型。信頼区間の信頼水準。
formulalhs~rhsの形から成るformula型。lhsは観測値を表すnumeric型の変数名であり、rhsはグループをlevelsにもつfactor型の変数名。
dataformulaで記述した変数をもつデータフレームまたは行列。
subsetどの行を検定に用いるか指定するためのベクトル。
na.action欠測値NAが含まれているときどうするか。

実行例

wilcox.testの実行例を紹介します。

1標本検定と2標本検定の2つに分けて実行例をみていきます。

ヒストグラムのプロットなどで次のパッケージggplot2を使うので事前にインストールしといてください。

1標本検定

1標本のウィルコクソンの順位和検定を実行例をみていきます。

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

データセットtreesは木のGirth(周囲の長さ)、Height(高さ)、Volume(重さ)の3つの変数から構成されます。

今、Volumeの位置母数(中央値)に関心があるとします。

Volumeがどのようなデータであるのか把握するために、まずヒストグラムを描いてみます。つぎを実行するとVolumeのヒストグラムがプロットされます。

ヒストグラム

上の図のヒストグラムからVolumeは左右対称的に分布しておらず、正規性を持たないことが確認できます。

このようなデータに対しt検定などの母集団分布に正規性を仮定する検定を用いるのは不適切であるため、ウィルコクソンの順位和検定により位置母数の検定を行いたいと思います。

「Volumeの中央値は20であるか」という仮説検定は、wilcox.testを用いることで次のように行えます。

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

ポイント

「p-value = 0.003184」と書いてあることから、Volumeの中央値は20であるとは言えないという結論が得られました(Volumeの中央値は20ではないことが分かりました)。

p値や検定統計量などの検定結果を取得したいときは、次のようにtestResultの後ろに$を付ければ大丈夫です。

補足として、これらの検定結果をcsvファイルなどに保存する場合は、data.frameを使って検定結果をデータフレームに格納し、write.tablewrite.csvを用いて外部ファイルへ保存しましょう。以下、csvファイルへの保存例です。

ウィルコクソンの順位和検定結果

2標本検定

次に、2標本のウィルコクソンの順位和検定(マン・ホイットニーのU検定)の実行例について見ていきます。

ggplot2で作成したプロットを結合させるために、次のgirdExtraを用います。インストールしといてください。

データセットとして、次のCO2を使います。

CO2uptake(二酸化炭素の吸収量)やTreatment(凍らしたか、凍らしてないか)などの要素から成ります。

uptakeTreatmentのlevels別にヒストグラムと箱ひげ図をプロットすると次のようになります。

ヒストグラムと箱ひげ図

また、次を実行することで、下の図のようなuptakeの順位に関するグラフを作成することができます。

順位プロット

ヒストグラムと上の順位のプロットから、Treatmentlがnonchilledであるときはデータの順位が高い傾向があり、chilledであるとき順位が低い傾向があるのが見てとれます。

順位に関するプロットを描いたのは、ウィルコクソンの順位和検定(マン・ホイットニーのU検定)の検定統計量が順位和に基づいているからです。

この後、「Treatmentに関してuptakeは同じである」仮説検定を実行していきますが、この帰無仮説の下では、Treatmentがnonchilledまたはchilledのグループのuptakeの順位和がその期待値より大きく下回ったり、上回ったりすることはないはずです。

「Treatmentによってuptakeは同じである」という仮説検定を実行したいと思います。この2標本の検定は、次のようにwilcox.testの引数xyを指定するか、formuladataを指定します。2通りの書き方があります。

ウィルコクソンの順位和検定の結果は次のようになります。

「p-value = 0.006358 < 0.05」より、有意水準0.05の下で帰無仮説は棄却され、Treatmentによってuptakeは同じであるとはいえないことが分かりました。

検定結果を取得するには、1標本のきと同様にtestResultのうしろに$を付けます。

これらの検定結果をまとめるときは次のように関数data.frameを使ってデータフレームに格納すると便利です。

まとめ

R言語でウィルコクソンの順位和検定やマン・ホイットニーのU検定を実行する関数や実行例を見てきました。

関数wilcox.testを用いることでウィルコクソンの順位和検定を行うことが可能です。

関数wilcox.testは1標本検定と2標本検定のどちらにも対応しています。

2標本検定の場合は、マン・ホイットニーのU検定の結果と一致します。

スポンサーリンク

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

usagi-san

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

-R言語
-, , ,