【R講座】Tukey-Kramerの多重比較の方法と実践

R

研究室に配属されたばかりの新入生や、これからRで統計分析を始めたいと思っている方へ向けて、【R講座】では、RとRStudioの基本的な使い方から統計手法の選び方、基本的なデータ分析方法までを解説しています。

特にRが初めての方でも安心して学べるように、難しいコマンドやコードは少なめで、RStudioのクリック操作を中心に進めていくので、プログラミングの経験がなくても大丈夫です。

実際のコードを交えながら進めるので、これからの研究やデータ分析に、ぜひ役立ててください!

R講座の記事一覧
「R講座」の記事一覧です。

この記事では、Tukey-Kramerの多重比較の方法について解説しています。

Tukey-Kramerの多重比較とは

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

前提条件

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

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

仮説の設定

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

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

分散分析との違い

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

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

Tukey-Kramerの多重比較の関数と引数オプション

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

この関数は次のような引数があります。

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

分析の実践

Rで分散分析の手順
  • STEP 1
    データの読み込み

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

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

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

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

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

  • STEP 4
    結果の出力

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

使用するデータ

次のデータを使用します。

この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)

csvファイルの読み込みでは、パスを指定することもできますが、今回はfile.choose関数でファイルを選択する方法をとっています。

データの整理

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

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

検定の実行

# 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

有意水準が5%とするとき、p値が0.05より小さい場合に帰無仮説を棄却し、2つの群の平均値に有意な差があると結論づけます。

今回の例では、30-2535-25に有意差があり、35-30に有意差が検出できない結果となりました。

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

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

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

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

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

アルファベットの出力

アルファベットの出力は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)
  • decreasingオプションで昇順か降順を設定できます。
  • levelの値で有意水準を設定できます。

結果の見方

 25  30  35
"a" "b" "b" 

cld()関数を使うことで、各グループがどのように分類されるかを視覚的に確認できます。添字が同じグループ同士は有意差がないことを示します。

今回の分析の結果は、30-2535-25に有意差があり、35-30に有意差が検出できない結果となりました。

まとめ

今回は多重比較について紹介しました。

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

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

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

# Tukeyの多重比較
TukeyHSD(aov(data$`Height (cm)` ~ data$`Temperature (°C)`))

次回はマンホイットニーのU検定の方法について紹介します。

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