R で対応のあるサンプルの t 検定を実行する方法
対応のあるサンプルの t 検定は、一方のサンプルの各観測値がもう一方のサンプルの観測値と一致する場合に、2 つのサンプルの平均を比較する統計検定です。
たとえば、特定のカリキュラムが特定の試験における生徒の成績に大きな影響を与えるかどうかを知りたいとします。これをテストするために、クラスの 20 人の生徒に事前テストを受けてもらいます。その後、各学生は 2 週間毎日学習プログラムに参加します。その後、学生は同様の難易度のテストを再受験します。
1 回目と 2 回目のテストの平均スコアの差を比較するには、各生徒の最初のテストのスコアが 2 回目のテストのスコアと関連付けられるため、対応のある t テストを使用します。
対応のある t 検定を実行する方法
対応のある t 検定を実行するには、次のアプローチを使用できます。
ステップ 1: 帰無仮説と対立仮説を述べます。
H 0 : μ d = 0
H a : μ d ≠ 0 (両側)
H a : μ d > 0 (片側)
H a : μ d < 0 (片側)
ここで、 μ d は平均差です。
ステップ 2: 検定統計量と対応する p 値を見つけます。
a = 最初のテストでの生徒のスコア、 b = 2 回目のテストでの生徒のスコアとします。テストスコア間の真の平均差がゼロであるという帰無仮説を検定するには、次のようにします。
- スコアの各ペアの差を計算します (d i = b i – a i )。
- 平均差を計算します (d)
- 差の標準偏差を計算します s d
- t 統計量を計算します。これは、T = d / (s d / √n) です。
- n-1自由度の t 統計量に対応する p 値を見つけます。
ステップ 3: 有意水準に基づいて、帰無仮説を棄却するか、棄却しません。
p 値が選択した有意水準より小さい場合、帰無仮説は棄却され、2 つのグループの平均値の間に統計的に有意な差があると結論付けられます。そうしないと、帰無仮説を棄却できなくなります。
R で対応のある t 検定を実行する方法
R でペアの t 検定を実行するには、次の構文で組み込み関数t.test()を使用できます。
t.test (x、y、ペア = TRUE、代替 = 「両側」)
- x、y:比較したい 2 つのデジタル ベクトル
- ペア:ペアのある t 検定を計算することを指定する論理値
- 代替:対立仮説。 「両面」(デフォルト)、「上面」または「下面」に設定できます。
次の例は、対応のある t 検定を実行して、20 人の生徒の事前テストと事後テストの平均スコアに有意な差があるかどうかを判断する方法を示しています。
データを作成する
まず、データセットを作成します。
#create the dataset data <- data.frame(score = c(85,85, 78, 78, 92, 94, 91, 85, 72, 97, 84, 95, 99, 80, 90, 88, 95, 90, 96, 89, 84, 88, 88, 90, 92, 93, 91, 85, 80, 93, 97, 100, 93, 91, 90, 87, 94, 83, 92, 95), group = c(rep('pre', 20), rep('post', 20))) #view the dataset data #scoregroup #1 85 pre #2 85 pre #3 78 pre #4 78 pre #5 92 pre #6 94 pre #7 91 pre #8 85 pre #9 72 pre #10 97 pre #11 84 pre #12 95 pre #13 99 pre #14 80 pre #15 90 pre #16 88 pre #17 95 pre #18 90 pre #19 96 pre #20 89 pre #21 84 post #22 88 post #23 88 post #24 90 post #25 92 post #26 93 post #27 91 post #28 85 post #29 80 post #30 93 post #31 97 post #32 100 posts #33 93 post #34 91 post #35 90 post #36 87 post #37 94 post #38 83 post #39 92 post #40 95 post
違いを視覚化する
次に、 dplyrライブラリのgroup_by()関数とsummary ()関数を使用して、2 つのグループの要約統計を調べます。
#load dplyr library
library(dplyr)
#find sample size, mean, and standard deviation for each group
data %>%
group_by (group) %>%
summarize (
count = n(),
mean = mean(score),
sd = sd(score)
)
# A tibble: 2 x 4
# group count mean sd
#
#1 post 20 90.3 4.88
#2 pre 20 88.2 7.24
R のboxplot()関数を使用して箱ひげ図を作成し、事前グループと事後グループのスコアの分布を表示することもできます。
boxplot (score~group,
data=data,
main="Test Scores by Group",
xlab="Group",
ylab="Score",
col="steelblue",
border="black"
)
要約統計量と箱ひげ図から、事後グループの平均スコアが事前グループの平均スコアよりわずかに高いことがわかります。また、グループ後のスコアは、グループ前のスコアよりもばらつきが少ないこともわかります。
これら 2 つのグループの平均の差が統計的に有意かどうかを確認するには、対応のある t 検定を実行します。
対応のある t 検定を実行する
対応のある t 検定を実行する前に、差の分布が正規分布 (またはほぼ正規分布) であることを確認する必要があります。これを行うには、事前スコアと事後スコアの差として定義される新しいベクトルを作成し、この値のベクトルに対して正規性について Shapiro-Wilk テストを実行します。
#define new vector for difference between post and pre scores differences <- with(data, score[group == "post"] - score[group == "pre"]) #perform shapiro-wilk test for normality on this vector of values shapiro.test(differences) # Shapiro-Wilk normality test # #data: differences #W = 0.92307, p-value = 0.1135 #
検定の p 値は 0.1135 で、アルファ = 0.05 より大きくなります。したがって、データが正規分布しているという帰無仮説を棄却できません。これは、対応のある t 検定を続行できることを意味します。
次のコードを使用して、対応のある t 検定を実行できます。
t.test (score~group, data = data, paired = TRUE)
# Paired t-test
#
#data: score by group
#t = 1.588, df = 19, p-value = 0.1288
#alternative hypothesis: true difference in means is not equal to 0
#95 percent confidence interval:
# -0.6837307 4.9837307
#sample estimates:
#mean of the differences
#2.15
結果から次のことがわかります。
- t検定統計量は1.588です。
- 19 自由度 (df) のこの検定統計量の p 値は0.1288です。
- 平均差の 95% 信頼区間は(-0.6837, 4.9837)です。
- 事前グループと事後グループのスコア間の平均差は2.15です。
したがって、p 値が有意水準 0.05 を下回っているため、2 つのグループの平均値が統計的に有意であるという帰無仮説を棄却できません。
言い換えれば、事前グループと事後グループの平均スコアが統計的に異なると言える十分な証拠はありません。これは、カリキュラムがテストのスコアに大きな影響を与えなかったことを意味します。
さらに、95% 信頼区間は、2 つのグループ間の真の平均差が-0.6837から4.9837の間にあることを「95% 確信している」ことを示しています。
値ゼロがこの信頼区間内に含まれているため、実際には平均スコア間の真の差がゼロである可能性があることを意味します。それが、この場合に帰無仮説を棄却できなかった理由です。