コンテンツへスキップ

統計R言語:ウィルコクソン及びマン-ホイットニー検定

    統計R言語

    ウィルコクソン順位和検定は、マン-ホイットニーU検定としても知られ、2つの独立したグループを比較して、それらの分布が互いに大きく異なるかどうかを判断するために使われるものです。R言語を用いてウィルコクソン順位和検定を行いたい場合は、Rの基本パッケージに入っているwilcox.test() 関数を使用して簡単に行うことができます。

    このR言語シリーズでは、現在イギリス教育テクノロジー研究所の博士課程でPhD取得を目指す筆者が、統計やデータ分析で使っているR言語のメモを共有しています。

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

    ウィルコクソン順位和検定(マン-ホイットニーU検定)は、非パラメトリック統計手法の一つです。2つの独立したグループを比較するときに使われますが、特にそれぞれのグループ、あるいは2つのグループの一つが正規分布(Normal distribution)に従わない場合に適用されます。

    ちなみに2つのグループが正規分布に従う場合は、この検定ではなくt-testを使うことになります。

    正規分布と非正規分布の検定、パラメトリック手法と非パラメトリック手法については、以下の記事にまとめてありますので合わせてご参照ください。

    [blogcard url = “https://yuko.tv/how-to-test-normality/”]

    ウィルコクソン順位和検定のためのデータ準備

    まず、比較したい2つのグループのデータを用意するところから始めます。グループごとに 1 つずつ、2つのベクトルとしてデータを準備します。以下のコードで2つのデータをベクトルとして書くことができます。

    # サンプルデータの準備
    data1 <- c(15, 20, 25, 30, 35)
    data2 <- c(10, 18, 22, 28, 32)

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

    比較する2つのデータが準備できたら、早速ウィルコクソン順位和検定(マン-ホイットニーU検定)を実行します。この検定に使われるwilcox.test() 関数は、Rの基本パッケージに含まれているので、以下のコードで簡単に行うことができます。

    # ウィルコクソン検定を実行
    wilcox.test(data1, data2)

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

    早速検定を実行してみると、以下のような結果が得られます。上記の例は検定のやり方を簡単に説明するためのもので、データポイントが非常に少ないので、こういった検定を行う上であまり良い例とはいえませんが、以下のように検定結果が得られるのはわかりますね。

    Wilcoxon rank sum exact test
    data:  data1 and data2
    W = 15, p-value = 0.6905

    このp値から判断すると2つのグループのデータにそれほど大きな違いはないということがわかります。

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

    では、ウィルコクソン順位和検定(マン-ホイットニーU検定)の効果量(Effect size)を求めるにはどのようにすれば良いのでしょうか?

    ウィルコクソン順位和検定(マン-ホイットニーU検定)は非パラメトリック手法なので、Rの基本パッケージの中には使える関数が入っていないのですが、rstatixパッケージをインストールして行うことができます。

    rstatixパッケージをインストールする

    まずは以下のコードを使ってrstatixパッケージをインストールします。

    install.packages("rstatix")

    続いて以下のコードでプロジェクトに読み込みをします。

    library(rstatix)

    データを準備する

    先ほどと同じサンプルデータを使ってやってみることにします。

    # サンプルデータの準備
    data1 = c(15, 20, 25, 30, 35)
    data2 = c(10, 18, 22, 28, 32) 

    続いて、サンプルデータのマトリックスからデータフレームを作ります。

    # データフレームの準備
    data1and2 = c(data1, data2)
    group = c(rep("data1", length(data1)), rep("data2", length(data2)))
    df = data.frame(group, data1and2)

    効果量を算出する

    最後に、効果量を算出します。

    wilcox_effsize(data1and2 ~ group, paired=TRUE, data=df)

    この関数についての公式ページはこちら↓になります。合わせてご参照ください。

    https://www.rdocumentation.org/packages/rstatix/versions/0.7.2/topics/wilcox_effsize

    まとめ

    ウィルコクソン順位和検定(マン-ホイットニーU検定)の実行の仕方についてご理解いただけたと思います。Rの基本パッケージに入っている関数なので簡単ですが、この検定を使う前に正規分布かどうかの確認をするのをお忘れなく!