【R講座】Tukey-Kramerの多重比較

R講座

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

みなさん、こんにちは!

ここでは、この回で紹介した分散分析(ANOVA)について解説しています。

今回の内容
  • Tukey-Kramer多重比較の概要
  • Tukey-Kramerの方法
  • 結果の見方

Tukey-Kramerの多重比較とは

Tukey-Kramerの多重比較検定(Tukey's HSD:Honest Significant Difference)は、複数のグループ間の平均値の差を全群比較するための方法です。これにより、どのグループ間の平均値が統計的に有意に異なるかを明らかにすることができます。

分散分析との違い

分散分析では、全体のF値とp値を計算し、グループ間に差があるかどうかを確認します。一方、多重比較では、具体的にどのグループ間に有意差があるかを検定します。つまり、分散分析が全体の差異を確認するのに対し、多重比較は個々の差異を確認するためのものです。

分散分析の結果を見てから、事後検定としてTukeyの多重比較を行うこともありますが、検定の多重性問題に注意が必要です。

前提条件

Tukey-Kramerの多重比較を実施する際には以下の条件を確認します。

  • 正規性:データが正規分布に従っていること。
  • 等分散性:2つの群のデータが等分散であること。
  • 群数:3群以上。
  • データ尺度:データが間隔尺度または比率尺度であること。

仮説の設定

Tukey-Kramerの多重比較では次の仮説を設置し、全群で比較を行います。

  • 帰無仮説(H0:2つの群の平均に差はない。
  • 対立仮説(H1:2つの群の平均に差がある。

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

RでTukey-Kramerの多重比較を行うには、TukeyHSD()関数を使用します。

関数の構造

TukeyHSD(x, which, ordered = FALSE, conf.level = 0.95, ...)

引数オプション
  • x: 適合したモデルオブジェクト、通常はaovでフィットされたもの。
  • which: 適合したモデル内の用語をリストする文字ベクトル。デフォルトはすべての用語。
  • ordered: ファクターのレベルをサンプル内の平均値の増加順に並べるかどうかを示す論理値。orderedTRUEの場合、計算された平均の差はすべて正の値になります。有意な差は、下限点が正の値であるものです。
  • conf.level: 使用するファミリー全体の信頼水準を示す、0から1の間の数値。

まとめると、aov()関数は次のように使います。

TukeyHSD(aov(モデル式))

分析の実践

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

RでTukey-Kramer多重比較の手順
  • STEP 1
    データの読み込み

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

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

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

  • STEP 3
    Tukey-Kramerの多重比較を実行

    TukeyHSD()関数で分散分析を実行します。

  • STEP 4
    結果の出力

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

使用するデータ

csvファイル

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

Temperature (°C)Height (cm)Weight (g)
2511.40856335683434.032819857028
259.4582396378988954.9096737259706
2510.278664724106454.2160336538475
259.806027255329768.739038985953
2511.576158181218760.3451432394433
258.5244523647394850.8181031035401
259.8553917926894649.1747623798284
258.9249898091818356.060734308621
2510.406542731944941.125798546829
2512.229262201640951.0542139019377
3013.4855029917497103.528744733185
3014.938292577988105.503933584551
3014.85272920996188.6566903148316
3016.541593068827114.623515387464
3014.0181443311961107.021167106676
3015.4965781726617125.071111484834
3016.696947880723181.0997285637598
3014.739263691431994.1018720980883
3014.294071414332382.8549770315418
3014.838821493827795.790021021833
3515.501321827723778.1014137650469
3513.986460329505292.025705860145
3516.614752235468170.5661519563607
3515.005641984852563.0140291668191
3512.095100939654471.926190857745
3513.892835181031381.2105420273818
3516.547566932618376.8190219140427
3514.023169649653388.1840093119247
3514.898496552368372.0109068656934
3515.042650249796758.5177825784117

データの読み込み

まずは、次のコードを使って、オブジェクト「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)は、スペース「 」や括弧「()」が含まれているため、そのままオブジェクト名として使用できませんが、バッククォートを使うことでオブジェクト名として使用できます。

検定の実行と結果の見方

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

Tukey-Kramerの多重比較
# Tukeyの多重比較
TukeyHSD(aov(data$`Height (cm)` ~ data$`Temperature (°C)`))
Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = data$`Height (cm)` ~ data$`Temperature (°C)`)

$`data$`Temperature (°C)``
            diff       lwr      upr    p adj
30-25  4.7433653  3.419748 6.066982 0.000000
35-25  4.5139704  3.190353 5.837587 0.000000
35-30 -0.2293949 -1.553012 1.094222 0.903592
結果の見方

今回の例では、30-2535-25はp値( p adj )が0.05より小さいので有意差があり、35-30はp値( p adj )が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値が大きくても「差がない」とは言えない(サンプル数が少ない可能性)。

多重比較の結果にアルファベットを振る

論文では、多重比較の結果を示す際に “a”, “b”, “c” などのアルファベットを用いて有意差を示す方法がよく使われます。これは、異なるグループ間の統計的な差を視覚的に分かりやすく示すための手法です。

multcompパッケージを使用すると、Tukeyの多重比較の結果に基づいて自動的にアルファベットを振ることができます。

multcompパッケージをインストール

multcompパッケージを使うと、多重比較の結果に添字をつけることができます。

初めてこのパッケージを使う場合は、install.packages("multcomp")でインストールを行います。次回以降はlibrary(multcomp)で起動します。

# 必要なパッケージの読み込み
install.packages("multcomp")
library(multcomp)

アルファベットの出力と結果

アルファベットの出力はaov()glht()cld()関数を使います。

アルフファベット出力の流れ

aov()で分散分析モデル → glht()で比較方法を選択 → cld()でアルファベット

# 分散分析のモデル
anova_result <- aov(data$`Height (cm)` ~ data$`Temperature (°C)`, data = data)

# 一般線形仮説検定と多重比較の方法を設定
glht_result <- glht(anova_result, linfct = mcp("data$`Temperature (°C)`" = "Tukey"))

# アルファベットの出力
cld(glht_result, decreasing = FALSE, level = 0.05)
 25  30  35
"a" "b" "b" 
結果の見方

添字が同じグループ同士は有意差がないことを示します。
25は"a"、30と35は"b"なので、25は30・35と有意に異なると言えます。また、30と35はどちらも"b"なので、有意な差があるとは言えない結果となります。

cld()関数の引数オプションを変更することで、アルファベットの出力を変更できます。

  • decreasing = TRUEで降順、decreasing = FALSE昇順
  • levelの値で有意水準(例:0.05で5%水準)

まとめ

まとめ
  • Tukey-Kramer多重比較の概要
    • 分散分析 → 全体に差異があるか確認
    • 多重比較 → 個々の差異を確認
  • Tukey-Kramerの方法
    • TukeyHSD()関数に分散分析モデル
    • パッケージを使ってアルファベットの添え字
  • 結果の見方
    • 有意水準よりp値が低いと有意差あり
    • アルファベットの添え字が異なると有意差あり

ここでは、Rを使用してTukey-Kramerの多重比較を行う方法について解説しました。

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

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

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

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

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

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