【R講座】t検定

R講座

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

今回の内容
  • t検定の概要
  • t検定の方法
  • 結果の見方

t検定とは

t検定は2つのグループの平均値に統計的に有意な差があるかどうかを調べる手法です。

前提条件

t検定を実施する際には以下の条件を確認します。

  • 対応の有無
    • 対応のあるデータ:同じ対象の前後比較(例:同じ人のダイエット前後の体重)
    • 対応のないデータ:異なる対象の比較(例:異なる人々のグループ間比較)
  • 正規性: データが正規分布に従っているか。
  • 等分散性:2つの群のデータが等分散かどうか。
  • 群数:比較する群が2つであること。
  • データ尺度:データが間隔尺度または比率尺度であること。

仮説の設定

t検定を実施する前に、以下の仮説を設定します。

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

t検定の種類

  • ステューデントのt検定:2群の分散が等しいと仮定
  • ウェルチのt検定:2群の分散が等しいと仮定しない場合に使用
  • 対応のあるt検定:同一対象から得られた2つの関連する標本の比較

ウェルチのt検定では、分散比を問わずに平均値の差を検定する設計になっています。
そのため、F検定(等分散性の検定)の後にt検定を行うのではなく、最初からウェルチのt検定を使用することで検定の多重性(複数の検定を行うことによる誤った結論のリスク)を避けることができます。

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

Rでt検定を行うには、t.test()関数を使用します。引数を変更することで、ステューデントのt検定ウェルチのt検定対応のあるt検定を実行することができます。

この関数は次の引数が設定されています。

関数の構造

# 2つのベクトルを使う方法
t.test(x, y = NULL,
alternative = c("two.sided", "less", "greater"),
mu = 0, paired = FALSE, var.equal = FALSE,
conf.level = 0.95, ...)

# データフレームを使う方法
t.test(formula, data, subset, na.action, ...)

引数オプション
  • x: 空でない数値ベクトルを指定します。
  • y: 任意の空でない数値ベクトルを指定します。指定しない場合、1標本のt検定が行われます。
  • alternative: 対立仮説を指定する文字列。"two.sided"(両側検定、デフォルト)、"greater"(右片側検定)、または "less"(左片側検定)を指定します。頭文字だけでも指定可能です。
  • mu: 帰無仮説での平均値を指定する数値。2標本検定の場合は、平均値の差を指定します。
  • paired: 対応のあるt検定を行うかどうかを指定する論理値。TRUEの場合、対応のあるt検定が行われます。
  • var.equal: 2つの分散が等しいと仮定するかどうかを指定する論理値。TRUEの場合、2つの群のデータを結合して1つの共通分散を計算し、それを用いて検定を行います。FALSEの場合、ウェルチまたはサタースウェイトの自由度近似を使用します。
  • conf.level: 信頼区間の信頼水準を指定する数値。デフォルトは95%です。
  • formula: lhs ~ rhs形式の式。lhsは数値変数を指定し、rhsは1標本の場合は1を指定します。対応のある検定の場合や2水準の因子に基づく検定の場合、rhsに対応するグループを指定します。
  • data: formulaで指定された変数を含むオプションのデータフレームまたは行列。
  • subset: 使用する観測値のサブセットを指定する任意のベクトル。
  • na.action: データにNAが含まれる場合の処理方法を指定する関数。デフォルトはgetOption("na.action")です。

簡単にまとめると、t.test()関数では、次の2通りの方法を使うことができます。

  • ベクトル型の場合:t.test(ベクトル1,ベクトル2)
  • フォーミュラ型の場合:t.test(目的変数 ~ 説明変数)

ベクトル型フォーミュラ型で、データの入力フォーマットが異なります。

ベクトル型を使う場合のデータ入力例
ベクトル1ベクトル2
1518
2225
3028
2423
2721
フォーミュラ型を使う場合のデータ入力例
説明変数目的変数
試験区114
試験区116
試験区120
試験区118
試験区119
試験区222
試験区224
試験区223
試験区225
試験区221

ステューデントとウェルチのt検定は、ベクトル型・フォーミュラ型のどちらでも検定を実行できますが、対応のあるt検定フォーミュラ型で実行します。

フォーミュラ型で引数オプションのpaired = TRUEを指定すると次のエラーが表示されます。

t.test(data$`Height (cm)` ~ data$`Temperature (°C)`, paired = TRUE)
Error in t.test.formula(data$`Height (cm)` ~ data$`Temperature (°C)`,  :
cannot use 'paired' in formula method

分析の実践

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

Rでt検定の手順
  • STEP 1
    データの読み込み

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

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

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

  • STEP 3
    t検定の実行

    t.test()関数でt検定を実行します。

  • 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)

確認のために、コンソールペインにdataと入力すると、次の表示が出力されます。

# データの確認
data
      Temperature (°C)  Height (cm)  Weight (g)
1                25     9.881208    57.41276
2                25    10.197684    50.68512
3                25     8.931307    46.76249
4                25     9.196787    39.13497
5                25     8.886235    39.84071
6                25    11.580092    42.32210
7                25    11.497819    38.80280
8                25    10.262645    45.51826
9                25     8.767099    54.71736
10               25     9.996276    38.19509
11               30    16.511672   114.70257
12               30    14.524302    86.88579
13               30    15.797916    99.03475
14               30    14.025997   123.69720
15               30    15.689373   108.90626
16               30    14.044161    97.47817
17               30    13.768293    91.34236
18               30    14.043108   105.82586
19               30    14.130217    99.87471
20               30    14.089319    96.25145

データの前処理

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

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

t検定

入力法方はフォーミュラ型で、目的変数はHeight (cm)のデータ、説明変数はTemperature (°C)としています。目的変数を変更すれば、Weight (g)のデータを検定できます。

ステューデントのt検定

次のコードでステューデントのt検定を実行します。

# ステューデントのt検定を実行
t.test(data$`Height (cm)` ~ data$`Temperature (°C)`, var.equal = TRUE)
ウェルチのt検定

次のコードでウェルチのt検定を実行します。

# ウェルチのt検定を実行
t.test(data$`Height (cm)` ~ data$`Temperature (°C)`)
対応のあるt検定

次のコードで対応のあるt検定を実行します。

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

# 対応のあるt検定
t.test(Temp25, Temp30, paired = TRUE)

対応のあるt検定は、t.test(ベクトル1 ~ ベクトル2)の形にデータを整形します。Height (cm)のデータを、Temperature (°C)2530の場合をそれぞれ取り出して、オブジェクトTemp25Temp30に代入しています。

結果の見方

検定を実行した結果は、コンソールペインに表示されます。今回は例として、ウェルチのt検定の実行結果で解説します。

      Welch Two Sample t-test

data:  data$`Height (cm)` by data$`Temperature (°C)`
t = -10.691, df = 17.945, p-value = 3.266e-09
alternative hypothesis: true difference in means between group 25 and group 30 is not equal to 0
95 percent confidence interval:
 -5.674898 -3.810543
sample estimates:
mean in group 25 mean in group 30 
        9.919715        14.662436 

今回の結果から、p値が3.266e-09であり、95%信頼区間が-5.674898 から -3.810543である(0が含まれない)ため、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値が大きくても「差がない」とは言えない(サンプル数が少ない可能性)。

まとめ

まとめ
  • t検定の概要
    • 2群間の平均値の差を検定
    • ベクトル型とフォーミュラ型の入力方法
  • t検定の方法
    • 引数変更でステューデント・ウェルチ・対応のあるt検定
    • 対応のあるt検定はベクトル型の入力のみに対応
  • 結果の見方
    • 有意水準・p値・信頼区間から判断
    • 統計的な意味と実用的な意味に注意

ここでは、Rを使用してt検定を行う方法について解説しました。

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

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

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

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

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

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