【R講座】t検定の方法と実践

R

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

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

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

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

今回の講座では、Rを使用してt検定を行う方法について解説しています。

t検定とは

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

前提条件

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

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

仮説の設定

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

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

t検定の種類

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

ウェルチのt検定では、分散比を問わずに平均値の差を検定する設計になっています。
そのため、F検定(等分散性の検定)の後にt検定を行うのではなく、最初からウェルチの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ファイルを使用して説明します。

t.test()関数のフォーミュラ型に対応したデータ入力法方にしています。

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

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

確認のために、コンソールペインに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検定の実行

次に、以下のコードでウェルチのt検定を実行します。
(引数にvar.equal = TRUEを追加することで、ステューデントのt検定を実行できます。)

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

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

ステューデントのt検定対応のあるt検定を実行するためのコードをメモしておきます。

ステューデントのt検定は、引数オプションのvar.equal = TRUEを指定することで実行できます。

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

対応のあるt検定は、t.test(ベクトル1 ~ ベクトル2)の形にデータを整形します。

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

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

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

結果の出力

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

      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 

有意水準が5%とするとき、p値p-value)が0.05より小さい場合、帰無仮説を棄却し、2つの群の平均に有意な差があると結論づけます。
また、95%信頼区間95 percent confidence interval)は、真の平均値の差が95%の確率で含まれている範囲を示しています。(この区間に0が含まれる場合は、平均値の差が0の可能性があります)

今回の結果から、p値が3.266e-09であり、95%信頼区間が-5.674898 から -3.810543である(0が含まれない)ため、2つの群の平均に有意な差があると結論できます。

まとめ

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

最後に、コードをまとめておきます。

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

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

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

次回は、分散分析の方法について紹介します。

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