【R講座】ウィルコクソンの符号順位検定

R講座

研究室に配属されたばかりの新入生や、これからRで統計分析を始めたいと思っている方へ向けて、【R講座】では、RとRStudioの基本的な使い方から統計手法の選び方、基本的なデータ分析方法を解説しています。特にRが初めての方でも安心して学べるように、RStudioのクリック操作も紹介していきます。実際のコード例を交えながら進めるので、これからの研究やデータ分析に、役立てていただけたら嬉しいです。

みなさん、こんにちは!

ここでは、この回で紹介したウィルコクソンの符号順位検定について解説しています。

今回の内容
  • ウィルコクソンの符号順位検定の概要
  • ウィルコクソンの符号順位検定の方法
  • 結果の見方

ウィルコクソンの符号順位検定とは

ウィルコクソンの符号順位検定は、2つの関連するサンプル間の差を評価するためのノンパラメトリックな検定です。対応のあるt検定のノンパラメトリック版として使われます。

前提条件

ウィルコクソンの符号順位検定を実施する際には以下の条件を確認します。

  • 対応の有無:対応あり(ペアデータ)
  • 正規性:不要
  • 等分散性:不要
  • 群数:2群
  • データ尺度:順序尺度または間隔尺度・比例尺度
仮説の設定

ウィルコクソンの符号順位検定では次の仮説を設定します。

  • 帰無仮説(H0:2つのサンプル間に差がない。
  • 対立仮説(H1:2つのサンプル間に差がある。

関数の構造と引数オプション

Rでウィルコクソンの符号順位検定を行うには、wilcox.test()関数を使用します。

マンホイットニーのU検定と同じ関数ですが、引数オプションをpaired = TRUEとすることで、ウィルコクソンの符号順位検定の計算が行われます。

関数の構造

# ベクトルを使う方法
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,
tol.root = 1e-4, digits.rank = Inf, ...)

引数オプション
  • x: 数値ベクトル。データの値を指定します。無限大や欠損値などの非有効値は省略されます。
  • y: オプションの数値ベクトル。xと同様にデータの値を指定します。無限大や欠損値などの非有効値は省略されます。
  • alternative: 対立仮説を指定する文字列。デフォルトは"two.sided"で、"greater"または"less"も指定できます。最初の文字だけでも指定可能です。
  • mu: 帰無仮説を形成するために使用されるオプションのパラメーターを指定する数値。詳細は後述。
  • paired: 対応のある検定を行うかどうかを示す論理値。
  • exact: 正確なp値を計算するかどうかを示す論理値。
  • correct: p値の正規近似に連続性補正を適用するかどうかを示す論理値。
  • conf.int: 信頼区間を計算するかどうかを示す論理値。
  • conf.level: 信頼区間の信頼水準を指定する数値。
  • tol.root: (conf.intがTRUEの場合) uniroot(*, tol=tol.root)呼び出しで使用される正の数値トレランス。
  • digits.rank: 数値。有限の場合、テスト統計量のランクを計算するためにrank(signif(r, digits.rank))が使用されます。デフォルトはrank(r)
  • formulalhs ~ rhsの形式の数式。lhsはデータ値を与える数値変数であり、rhsは1つのサンプルまたは対応のある検定の場合は1、または対応するグループを与える2レベルのファクター。
  • data: 数式内の変数を含むオプションのマトリックスまたはデータフレーム(または類似のもの)。デフォルトでは変数はenvironment(formula)から取得されます。
  • subset: 使用する観測値のサブセットを指定するオプションのベクトル。
  • na.action: データにNAが含まれている場合にどうするかを示す関数。デフォルトはgetOption("na.action")
  • ...: メソッドに渡す追加の引数。

マンホイットニーのU検定では、ベクトル型とフォーミュラ型の入力に対応していますが、ウィルコクソンの符号順位検定は、ベクトル型のみに対応しています。

wilcox.test(ベクトル1ベクトル2, paired = TRUE)

分析の実践

次のステップでデータを分析していきます。

Rでウィルコクソンの符号順位検定の手順
  • STEP 1
    データの読み込み

    csvファイルからデータを読み込みます。

  • STEP 2
    データの前処理
    • 読み込んだデータの要因データを、Factor型に変更します。
    • ベクトル型にデータを整形します。
  • STEP 3
    ウィルコクソンの符号順位検定の実行

    wilcox.test()関数でウィルコクソンの符号順位検定を実行します。

  • STEP 4
    結果の出力

    計算された結果がコンソールペインに出力されます。

使用するデータ

この講座では、説明のために同じ CSV データを使い回しています。
実際には、データの性質(分布・尺度・サンプル数など)に合わせて、適切な統計検定を選びましょう。

csvファイル

このcsvファイルには次のデータが含まれています。

Temperature (°C)Height (cm)Weight (g)
259.88120857.412763
2510.19768450.685115
258.93130746.762492
259.19678739.134970
258.88623539.840711
2511.58009242.322098
2511.49781938.802799
2510.26264545.518258
258.76709954.717364
259.99627638.195093
3016.511672114.702570
3014.52430286.885794
3015.79791699.034751
3014.025997123.697199
3015.689373108.906265
3014.04416197.478168
3013.76829391.342362
3014.043108105.825860
3014.13021799.874707
3014.08931996.251452

データの読み込み

まずは、次のコードを使って、オブジェクト「data」にread.csv()関数でcsvファイルのデータを代入します。

# データの読み込み
data <- read.csv(file.choose(),
                 check.names = F)

データの前処理

次に、データの因子変換をします。

Rでは説明変数をFactor型のデータとします。今回の分析ではTemperature (°C)を説明変数とするので、as.factor()関数でデータ型をinteger型からFactor型に変更します。

# 説明変数をデータ型をFactor型に変更
data$`Temperature (°C)` <- as.factor(data$`Temperature (°C)`)

実行結果は、Environmentタブで確認できます。Temperature (°C)のデータ型がinteger型(左図)からFactor型(右図)に変わります。

バッククォート「`」について、少しだけ補足します。

R言語においてバッククォート「 ` 」で文字列を挟むと、通常は予約語や空白、特殊文字を含む名前を使うことができます。これにより、通常は無効な識別子として扱われる文字列を有効なオブジェクト名として扱うことができます。

ヘッダー名であるHeight (cm)は、スペース「 」や括弧「()」が含まれているため、そのままオブジェクト名として使用できませんが、バッククォートを使うことでオブジェクト名として使用できます。

ベクトル型に整形

Height (cm)のデータを、Temperature (°C)2530の場合をそれぞれ取り出して、オブジェクトTemp25Temp30に代入します。

# データの整形
Temp25 <- data$`Height (cm)`[data$`Temperature (°C)` == 25]
Temp30 <- data$`Height (cm)`[data$`Temperature (°C)` == 30]

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

次のコードでウィルコクソンの符号順位検定を実行します。

# ウィルコクソンの符号順位検定を実行
wilcox.test(Temp25, Temp30, paired = TRUE)
Warning message:
In wilcox.test.default(group1, group2) : 
 cannot compute exact p-value with ties

という警告文が出る場合は、exactRankTestsパッケージのwilcox.exact関数を使うこともできます。

2024.07.10時点で、exactRankTestsは古いためcoinパッケージを使うようにメッセージが表示されるようです。また、coinパッケージのwilcox_testもエラーが発生しているようです。

Error in UseMethod("wilcox_test") · Issue #85 · kassambara/rstatix
I was using the this format for running wilcox_test() this morning and it was working: greed_wilcox % wilcox_test(match_...

結果の見方

検定を実行した結果は、コンソールペインに表示されます。

	Wilcoxon signed rank exact test

data:  Temp25 and Temp30
V = 0, p-value = 0.001953
alternative hypothesis: true location shift is not equal to 0

この結果から、p値が0.05より小さいため、2つのグループの中央値に有意な差があると判断することができます。

有意水準・p値・信頼区間
項目説明
有意水準 (α)帰無仮説を棄却する基準。通常 0.05(5%) や 0.01(1%) を使用する。
例: α = 0.05なら、5%未満の確率で偶然起こる差を「有意」と判断する。
p値検定統計量が観測された値以上になる確率。
p値 < 有意水準 (α) なら、統計的に有意と判断し、帰無仮説を棄却する。
統計的に有意とは?「偶然の変動では説明できない差がある」と判断すること。ただし「実験的に重要」や「因果関係がある」とは限らない。
信頼区間 (Confidence Interval, CI)母集団の真の値(2つのグループの平均値の差)が含まれる範囲を示す。例えば 95%信頼区間 は、繰り返し実験したときに95%の確率で真の値(平均値の差)を含む。
信頼区間と有意性の関係もし信頼区間が ゼロ(または比較対象の値)を含まなければ、統計的に有意と判断できる。
例:平均差の95%信頼区間が (0.5, 2.3) なら、有意水準5%で有意。
注意点統計的有意でも「効果の大きさ(実用的な意味)」とは異なる。
p値が大きくても「差がない」とは言えない(サンプル数が少ない可能性)。

まとめ

まとめ
  • ウィルコクソンの符号順位検定
    • ノンパラメトリック・等分散・2群・対応のあるデータ
    • 間隔・比例・順序尺度
  • ウィルコクソンの符号順位検定
    • ベクトル型で入力:wilcox.test(ベクトル1,ベクトル2, paired = TRUE)
  • 結果の見方
    • 有意水準・p値・信頼区間から判断
    • 統計的な意味と実用的な意味に注意

ここでは、Rを使用してウィルコクソンの符号順位検定を行う方法について解説しました。

配布したcsvデータにはWeight (g)のデータもあるので、コードを書き換えて練習してみてください。

Rでは、コードの文法が正しければどんな統計手法でも計算が実行されてしまうため、結果が出たからといって安心するのは危険です。統計解析では、データの種類や前提条件に適した手法を選ぶことが重要であり、誤った検定を適用すると意味のない結果を得てしまう可能性があります。

そのため、単にコードを動かすだけでなく、

  • データの分布(正規分布かどうか)
  • 変数の尺度(カテゴリーデータか、連続データか)
  • サンプルサイズ(母数が少ないと適さない検定もある)

などを考慮し、統計の知識をもとに適切な解析方法を選択する必要があります。

タイトルとURLをコピーしました