【R講座】フリードマン検定

R講座

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

みなさん、こんにちは!

ここでは、この回で紹介したフリードマン検定について解説しています。

今回の内容
  • フリードマン検定の概要
  • フリードマン検定の方法
  • 結果の見方

フリードマン検定とは

フリードマン検定は、繰り返し測定データを分析するために使用されるノンパラメトリック統計検定です。主に、分散の正規性と均質性の仮定が満たされない場合に使用され、繰り返し測定ANOVAのノンパラメトリック版として使用されます。

前提条件

フリードマン検定を実施する際には以下の条件を確認します。

  • 対応の有無:対応あり
  • 正規性:不要
  • 等分散性:不要
  • 群数:3群以上
  • データ尺度:順序尺度
仮説の設定

フリードマン検定では次の仮説を設定します。

  • 帰無仮説(H0:各群間に有意差はない。
  • 対立仮説(H1:少なくとも1つの群間に有意差がある。

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

Rでフリードマン検定を行うには、friedman.test()関数を使用します。

関数の構造

# 行列を利用する方法
friedman.test(y, ...)

# ベクトルを利用する方法
friedman.test(y, groups, blocks, ...)

# データフレームを利用する方法
friedman.test(formula, data, subset, na.action, ...)

引数オプション
  • y:数値データ値のベクトル、またはデータマトリックスのいずれか。
  • groups:yがベクトルの場合、対応する要素のグループを示すベクトル。yがマトリックスの場合は無視される。factorオブジェクトでない場合は、factorに強制変換される。
  • blocks:yがベクトルの場合、対応する要素のブロックを示すベクトル。yがマトリックスの場合は無視される。factorオブジェクトでない場合は、factorに強制変換される。
  • formula:a ~ b | cの形式の式。a、b、およびcはそれぞれデータ値、対応するグループ、およびブロックを示す。
  • data:省略可能なマトリックスまたはデータフレーム(または類似のもの:model.frameを参照)で、formula内の変数を含む。デフォルトでは、変数はenvironment(formula)から取得される。
  • subset:使用する観察のサブセットを指定する省略可能なベクトル。
  • na.action:データにNAが含まれている場合に何を行うべきかを示す関数。デフォルトはgetOption("na.action")。
  • :メソッドからまたはメソッドへのさらに多くの引数。

まとめると、friedman.test()関数は次のように三つの使い方があります。

# 行列を利用する方法
friedman.test(行列)

# ベクトルを利用する方法
friedman.test(目的変数, 説明変数, ID, ...)

# データフレームを利用する方法
friedman.test(目的変数 ~ 説明変数 | ID)

分析の実践

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

Rでフリードマン検定の手順
  • STEP 1
    データの読み込み

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

  • STEP 2
    データの型変換(キャスト)

    読み込んだデータの要因データを、Factor型に変更します。

  • STEP 3
    フリードマン検定の実行

    friedman.test()関数でフリードマン検定を実行します。

  • STEP 4
    結果の出力

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

使用するデータ

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

csvファイル

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

IDTemperature (°C)Height (cm)Weight (g)
12511.4134.03
2259.4654.91
32510.2854.22
4259.8168.74
52511.5860.35
6258.5250.82
7259.8649.17
8258.9256.06
92510.4141.13
102512.2351.05
13013.49103.53
23014.94105.50
33014.8588.66
43016.54114.62
53014.02107.02
63015.50125.07
73016.7081.10
83014.7494.10
93014.2982.86
103014.8495.79
13515.5078.10
23513.9992.03
33516.6170.57
43515.0163.01
53512.1071.93
63513.8981.21
73516.5576.82
83514.0288.18
93514.9072.01
103515.0458.52

データの読み込み

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

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

データの前処理

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

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

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

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

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

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

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

フリードマン検定

入力法方はベクトル型で、第一引数の目的変数はHeight (cm)のデータ、第二引数の説明変数はTemperature (°C)、第三引数にIDを設定しています。目的変数を変更すれば、Weight (g)のデータを検定できます。

# フリードマン検定の実行
friedman.test(data$`Height (cm)`, data$`Temperature (°C)`, data$ID)

結果の見方

	Friedman rank sum test

data:  data$`Height (cm)`, data$`Temperature (°C)` and data$ID
Friedman chi-squared = 15.2, df = 2, p-value = 0.0005005

この結果から、有意水準を5%とするとき、p値が0.05より小さいことから帰無仮説を棄却し、少なくとも一つの群間に有意差があると結論できます。

有意水準・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値が大きくても「差がない」とは言えない(サンプル数が少ない可能性)。

まとめ

まとめ
  • フリードマン検定の概要
    • 対応のあるANOVAのノンパラメトリック版
  • フリードマン検定の方法
    • friedman.test()関数を使う
    • 第一引数に目的変数、第二引数に説明変数、第三引数にID
  • 結果の見方
    • 有意水準・p値・信頼区間から判断
    • 統計的な意味と実用的な意味に注意

ここでは、Rを使用してフリードマン検定を行う方法について解説しました。

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

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

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

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

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

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