対応あり・なしt検定(Cursor×R)

この記事を読んでできること

この記事では、CursorというAIエディタを使ってRを動かし、一切コードを書かずにAIへの指示のみで、対応なし・ありのt検定が行えるようになることを目指します。

AIエディタを使えば、AIに指示するだけで驚くほど簡単に解析が完了します。

AIエディタについてもう少し詳しく知りたい方はこちらをご覧ください。

本記事と同じ解析環境を準備する手順は下記の記事で詳細に解説しています。

AI活用でコードを書かずにt検定をしよう!

本記事の解析環境

  • AIエディタ: Cursor (Version 0.44.8)
  • モデル: gemini-2.0-flash-exp

以下のステップで分析を進めていきます。

  1. データセットの準備: palmerpenguinsデータセットを用いて、ペンギンのデータを確認します。
  2. 対応のないt検定: アデリーペンギンの性別ごとの翼の長さの平均に差があるか検定します。
  3. 対応のあるt検定: テスト前後の平均に差があるか検定します。

解析時にエラーが出て困ったときに読む記事もあるのでご安心ください。

それでは、早速分析を始めましょう。


1. データセットの準備

今回は、Rに標準で付属しているpalmerpenguinsパッケージのpenguinsデータセットを使用します。このデータセットには、ペンギンの身体測定データが含まれています。

吹き出しのアイコン

(Ctrl+K) palmerpenguinsパッケージの’penguins’データを読み込んで、’df’という名前で保存する。

※必要に応じてパッケージをインストールしてください。


library(palmerpenguins)
df <- penguins
変数名 説明
species ペンギンの種(アデリー、ヒゲペンギン、ジェンツー)
island ペンギンが観測された島(ビスコー、ドリーム、トーガーセン)
bill_length_mm くちばしの長さ (mm)
bill_depth_mm くちばしの深さ (mm)
flipper_length_mm 翼の長さ (mm)
body_mass_g 体重 (g)
sex ペンギンの性別(メス、オス)
year 観測年 (2007, 2008, 2009)

2. 対応のないt検定

t検定は2群間の平均値の差を検定する手法です。下記の2つの違いを知っておきましょう。

  • 等分散を仮定したt検定(Studen`s t-test): 2つの母集団で分散が同じであると仮定する
  • ウェルチのt検定(Welch t-test): 2つの母集団間で分散が異なることを許容する

ウェルチのt検定は、母集団の分散が異なる場合と等しい場合の両方でうまく機能します。Rにおけるデフォルトはウェルチのt検定であり、本記事ではより柔軟な(等分散の仮定が不要な)ウェルチのt検定を行います。

Adelie種内でオスとメスの翼の長さを比較してみましょう。

吹き出しのアイコン

(Ctrl+K)speciesがAdelieのサブグループにおいて、目的変数をflipper_length_mm、説明変数をsexとして対応のないt検定を実行 。


library(dplyr)
adelie_df <- df %>%
filter(species == "Adelie")
t.test(flipper_length_mm ~ sex, data = adelie_df)

Welch Two Sample t-test
data: flipper_length_mm by sex
t = -4.5589, df = 140.25, p-value = 1.11e-05
alternative hypothesis: true difference in means between group female and group male is not equal to 0
95 percent confidence interval:
-6.618429 -2.614448
sample estimates:
mean in group female mean in group male
187.7945 192.4110

結果のサマリとしては以下のようになります。

  • p値 (p-value): 1.11e-05 (1.11 × 10^-5)
  • 95%信頼区間 (95% confidence interval): -6.618429 から -2.614448
  • 標本平均値 (sample estimates):
    • メスの翼長の平均値 (mean in group female): 187.7945
    • オスの翼長の平均値 (mean in group male): 192.4110

2. 対応のあるt検定

対応のないt検定と対応のあるt検定との違いは下記のように使い分けます。

  • 対応のないt検定
    • 独立な2つのグループのデータ
    • 例: 男性と女性の平均身長、薬を飲んだグループと飲まないグループの治療効果
  • 対応のあるt検定
    • 同じ人や同じ評価者など、クラスターとしてまとめられるデータを比較
    • 例: ある人のテスト前後の点数、ダイエット前後の体重

ここではまず適当なデモデータを作成し、対応のあるt検定を実践してみましょう。

吹き出しのアイコン

(Ctrl+K) Rで対応のあるt検定の練習用データ(df2)を作成して


# サンプルサイズ
n <- 30
テスト前の点数(ベースとなる乱数)
pre_test <- rnorm(n, mean = 60, sd = 15)

テスト後の点数(テスト前の点数に少し変化を加える)
post_test <- pre_test + rnorm(n, mean = 5, sd = 8) # 学習効果などを想定して平均を大きく

データフレームにまとめる
df2 <- data.frame(pre = pre_test, post = post_test)

対応のあるt検定を実行する
t.test(df2$pre, df2$post, paired = TRUE)

データを確認する
print(head(df2))

作成したdf2を使って対応のあるt検定を行います。 まずはデータの中身を確認します。

吹き出しのアイコン

(Ctrl+K) df2の中身を確認。


print(head(df2))

pre post
1 78.48213 76.40327
2 57.67195 57.47528
3 59.86373 59.29893
4 69.60837 68.88145
5 79.68696 90.08053
6 48.36334 59.17660
吹き出しのアイコン

(Ctrl+K)df2を用いて対応のあるt検定を行う。


t.test(df2$pre, df2$post, paired = TRUE)

Paired t-test
data:  df2$pre and df2$post
t = -3.0035, df = 29, p-value = 0.005452
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
 -7.169359 -1.360745
sample estimates:
mean difference
      -4.265052