目次(まとめ)
◾️ 2つの数値データの「平均値」を使って検定
◾️ 2つの数値データに「対応」があるかどうかによって実行方法が異なる
◾️ 対応がないt-検定では、分散を考慮して、2つの検定手法を使い分ける必要がある
◾️ 対応があるt-検定では、分散を考慮せず、1つの検定手法を適用する
◾️ 関連記事
こんにちは、みっちゃんです。
今回の記事では、2種類の数値データ(正規分布にしたがう)があったとき、そのデータ間に意味のある差があるかどうか検定するため、Rを使ってt-検定を行う手順を解説します。
2つの数値データの「平均値」を使って検定
今回の記事では、Rという無料の統計解析ソフトウェアを、Macのターミナルというソフトウェア上で行う手順を解説します(Rの使用方法については、こちらの記事をご覧ください)。
まず、ターミナル上でRを起動して、仮の数値データを準備します。ここでは、標準正規分布に基づく乱数を10個発生させています(正規分布については、こちらの記事をご覧ください)。
$ R -q
> num_a <- rnorm(10)
> num_b <- rnorm(10)
この操作を行うことで、標準正規分布にしたがう乱数が10個ずつ "num_a" と "num_b" という変数に保存されます。
ちなみに、平均 \(\mu\) と標準偏差 \(\sigma\) を「rnorm(10, \(\mu\), \(\sigma\))」と指定すれば、正規分布にしたがう乱数を10個生成することができます。
以下のように確認することができます。
> num_a
[1] 0.06921037 1.31435876 -0.13490667 -0.82222162 -0.68372956 0.13090847
[7] 0.19503523 -0.54451818 1.08138514 -0.87732370
>
> num_b
[1] -0.97197369 -0.80049965 -1.76252520 1.26708058 -0.50004732 -0.61888550
[7] 1.04205510 -0.29763897 -0.02399204 -1.37044010
ここでは、この2つの変数("num_a" と "num_b")に保存された数値データがどのようなものなのか可視化するために、箱ひげ図(ボックスプロット)を作成してみます。
Rでは、以下のように実行するだけです。
> boxplot(num_a, num_b, names = c("A", "B"))
"names" の箇所は必須項目ではありませんが、それぞれの箱ひげ図の名前を指定することができます。
箱ひげ図で、箱の中に引かれている太線は「中央値」を示しています。したがって、今回の例では、Bと名付けられた "num_b" に保存されている数値データの中央値が、Aと名付けられた "num_a" に保存されている数値データの中央値より小さいことがわかります。
t-検定では、このAとBの差が「意味がある」と言えるのか、それぞれの数値データの「平均値」を使って検定します。
2つの数値データに「対応」があるかどうかによって実行方法が異なる
2つの数値データを比較する場合に「対応」があるかどうかを認識しておく必要があります。
例えば、「中学校Aの生徒10名の数学の点数」と「中学校Bの生徒10名の数学の点数」を比較して、平均値に基づき差があるか検定したいとします。
この場合には、「中学校Aの生徒」と「中学校Bの生徒」は別人なので、対応がないt-検定を行うべきです。
一方、「薬Aを服用した場合の治験者10名の血中濃度」と「薬Bを服用した場合の治験者10名の血中濃度」を比較して、平均値に基づき差があるか検定したいとします。
ここで、治験者10名は、薬Aの場合と薬Bの場合で、同じ10名だとすると、対応があるt-検定を行うことになります。
※t-検定を行う前提条件として、2つの数値データが、それぞれ正規分布にしたがうと考えられる必要があります
対応がないt-検定では、分散を考慮して、2つの検定手法を使い分ける必要がある
2つの数値データについて、分散が等しいと仮定できる場合には、以下のように実行します。
> t.test(num_a, num_b, var.equal=T, paired=F)
"t.test" という関数の引数として、上で準備した "num_a" と "num_b" を入れています。
いま対応がないt-検定を考えているので、"paired" というオプションを "F"(Falseの意味)に指定し、分散が等しいと考えているので、"var.equal" というオプションを "T"(Trueの意味)に指定しています。
実行すると、以下のように「Two Sample t-test(ステューデントのt-検定)」が実施されます。
Two Sample t-test
data: num_a and num_b
t = 0.971, df = 18, p-value = 0.3444
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.4381273 1.1911404
sample estimates:
mean of x mean of y
-0.02718017 -0.40368668
この検定についての理論については、こちらの記事をご参照ください。
同じように、2つの数値データについて、分散が等しいと仮定できない場合には、以下のように実行します。
> t.test(num_a, num_b, var.equal=F, paired=F)
この場合には、以下のように「Welch Two Sample t-test(ウェルチのt-検定)」が実施されます。
Welch Two Sample t-test
data: num_a and num_b
t = 0.971, df = 17.06, p-value = 0.3451
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.4413574 1.1943704
sample estimates:
mean of x mean of y
-0.02718017 -0.40368668
どちらの検定の場合でも、"p-value" が一般的な有意水準0.05より大きいので、「数値データ間には有意な差がない」と主張する帰無仮説が棄却できず、数値データ間には有意な差がないと判断されます。
対応があるt-検定では、分散を考慮せず、1つの検定手法を適用する
同じように、対応があるt-検定では、以下のように実行します。
対応があるt-検定では、分散については、気にする必要がありません。
> t.test(num_a, num_b, paired=T)
この場合には、以下のように「Paired t-test」が実施されます。
Paired t-test
data: num_a and num_b
t = 0.95486, df = 9, p-value = 0.3646
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.5154705 1.2684835
sample estimates:
mean of the differences
0.3765065
この検定の場合でも、"p-value" が一般的な有意水準0.05より大きいので、「数値データ間には有意な差がない」と主張する帰無仮説が棄却できず、数値データ間には有意な差がないと判断されます。