R で仮説をテストする
R には、仮説検定を実行するための多くの関数が用意されています。
この記事では、t
テストと Wilcoxon テストを実行するのに役立つ 2つの関数を紹介します。 また、R に組み込まれている他の多くのテストを検出する方法についても説明します。
Rでのt
テスト
関数 t.test()
は Student の t
テストに使用されます。 同じ関数を、1 標本検定と 2 標本検定、両側検定と片側検定に使用できます。
主な引数は次のとおりです。
x
: 数値のベクトル。mu
: 未知の平均値または未知の平均差。alternative
: 片側検定の場合、対立仮説としてgreater
またはless
を指定する必要があります。conf.level
: 間隔の信頼水準。 デフォルトでは、0.95 のレベルが使用されます。
2 標本検定では、以下も使用します。
式
:numeric_vector ~ two-factor_vector
形式です。data
: このデータ フレームには、formula
で説明されている変数が含まれている必要があります。var.equal
:TRUE
の場合、プールされたサンプルの分散が計算されます。FALSE
(デフォルト) の場合、ウェルチ近似が使用されます。
出力には以下が含まれます。
- サンプル平均付近の所定の信頼水準における信頼区間。
- サンプル平均が与えられた場合に、真の平均が指定された値
mu
になる確率を示すp 値
。
R での 1 サンプル両側 t
検定
ここで、サンプル データに対して 1 サンプル両側 t
検定を実行し、出力を確認します。
コード例:
# Data
# Population Mean = 8; Population SD = 3.
set.seed(3232)
one = rnorm(232,8,3)
# One-sample two-tailed t tests.
# mu is the correct value.
t.test(one, mu = 8)
# mu is some desired value.
# Let us check if mu is 10
t.test(one, mu = 10)
# Change the confidence level.
t.test(one, mu = 10, conf.level = 0.99)
出力:
> # One-sample two-tailed t tests.
> # mu is the correct value.
> t.test(one, mu = 8)
One Sample t-test
data: one
t = 0.59131, df = 231, p-value = 0.5549
alternative hypothesis: true mean is not equal to 8
95 percent confidence interval:
7.741578 8.480045
sample estimates:
mean of x
8.110811
> # mu is some desired value.
> # Let us check if mu is 10
> t.test(one, mu = 10)
One Sample t-test
data: one
t = -10.081, df = 231, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 10
95 percent confidence interval:
7.741578 8.480045
sample estimates:
mean of x
8.110811
mu
が 8 に等しいという仮説をテストしたところ、最初のケースで非常に大きな p 値
が得られました。 帰無仮説を棄却することはできません。
サンプル平均の信頼区間には、mu
の値が含まれます。
2 番目のテストでは、小さな p 値
は、mu
が 10 である確率が非常に低いことを示しています。 3 番目のケースは、信頼水準を変更するための構文を示しています。
R での 1 サンプル片側 t
検定
片側検定の場合、引数 alternative
が使用されます。 これが対立仮説です。
コード例:
# One-sample, one-tailed t test.
t.test(one, mu = 10, alternative = "less", conf.level = 0.99)
# Change mu
t.test(one, mu = 8.3, alternative = "less", conf.level = 0.99)
出力:
> # One-sample, one-tailed t test.
> t.test(one, mu = 10, alternative = "less", conf.level = 0.99)
One Sample t-test
data: one
t = -10.081, df = 231, p-value < 2.2e-16
alternative hypothesis: true mean is less than 10
99 percent confidence interval:
-Inf 8.549816
sample estimates:
mean of x
8.110811
> # Change mu
> t.test(one, mu = 8.3, alternative = "less", conf.level = 0.99)
One Sample t-test
data: one
t = -1.0095, df = 231, p-value = 0.1569
alternative hypothesis: true mean is less than 8.3
99 percent confidence interval:
-Inf 8.549816
sample estimates:
mean of x
8.110811
最初に、mu
が 10 以上であるという仮説をテストし、低い p 値
を得ました。
2 番目のケースでは、mu
が 8.3 以上であるという仮説を検証しました。 p-value
が高くなりました。
R での 2 サンプル t
テスト
2 サンプル t
検定の場合、データはデータ フレームまたは行列の形式でなければなりません。
- 単一の数値ベクトルに両方のサンプルが含まれている必要があります。
- サンプル/グループは、2 因子ベクトルを使用して指定する必要があります。
- したがって、データ フレームまたは行列の各行には、観測値とそれが属するグループが含まれます。
- 第 1 因子と第 2 因子のどちらであるかに応じて、引数
mu
の第 1 平均から第 2 平均を差し引いた差を計算する必要があります。 これはとても重要です。
最初に、2つのサンプルの平均が同じであるという仮説を検証します。 2 番目のテストでは、平均が mu
だけ異なるかどうかをチェックします。
コード例:
# Create vectors and data frame.
set.seed(6565)
two_a = rnorm(75, 8, 3.5)
set.seed(9898)
two_b = rnorm(65, 8.5, 3)
two = c(two_a, two_b)
ftr = c(rep("A",75), rep("B",65))
dtf = data.frame(DV = two, FV = ftr)
# Two-sample t test for no difference in means.
t.test(formula=DV~FV, data=dtf)
# Two-sample t test for a difference of mu between the means.
t.test(formula=DV~FV, data=dtf, mu=-1.5)
# Two-sample t test with pooled variance at 90 percent confidence interval.
t.test(formula=DV~FV, data=dtf, var.equal=TRUE, conf.level=0.9)
出力:
> # Two-sample t test for no difference in means.
> t.test(formula=DV~FV, data=dtf)
Welch Two Sample t-test
data: DV by FV
t = -2.2723, df = 137.16, p-value = 0.02462
alternative hypothesis: true difference in means between group A and group B is not equal to 0
95 percent confidence interval:
-2.3975526 -0.1663727
sample estimates:
mean in group A mean in group B
7.815221 9.097184
> # Two-sample t test for a difference of mu between the means.
> t.test(formula=DV~FV, data=dtf, mu=-1.5)
Welch Two Sample t-test
data: DV by FV
t = 0.38648, df = 137.16, p-value = 0.6997
alternative hypothesis: true difference in means between group A and group B is not equal to -1.5
95 percent confidence interval:
-2.3975526 -0.1663727
sample estimates:
mean in group A mean in group B
7.815221 9.097184
最初に、デフォルトの 2 サンプル t
検定である Welch 検定を実行し、平均の差が 0 であるという帰無仮説を検定しました。p 値
は約 0.02 です。
次に、平均値の差が -1.5 であるかどうかをテストしました。
3 番目のケースは、2つのサンプルの分散が同じであると仮定して、t
検定の構文を示しています。
R のウィルコクソン検定
Wilcoxon 検定の構文も同様です。
R での 1 サンプル両側 Wilcoxon 検定
引数 mu
は、テストしている帰無仮説による中央値です。
コード例:
# Wilcoxon test.
# One-sample two-tailed test.
wilcox.test(one, mu=8)
# Try a different mu.
wilcox.test(one, mu=9, )
出力:
> wilcox.test(one, mu=8)
Wilcoxon signed rank test with continuity correction
data: one
V = 13992, p-value = 0.6408
alternative hypothesis: true location is not equal to 8
> # Try a different mu.
> wilcox.test(one, mu=9, )
Wilcoxon signed rank test with continuity correction
data: one
V = 8953, p-value = 8.341e-06
alternative hypothesis: true location is not equal to 9
最初のケースでは、標本は中央値が 8 であるという帰無仮説を支持しています。
2 番目のケースでは、非常に小さい p 値
が得られます。
R での 2 サンプル ウィルコクソン検定
これは、マン・ホイットニー検定とも呼ばれます。
コード例:
# Test whether two locations differ by mu.
wilcox.test(formula=DV~FV, data=dtf, mu=-1.5)
wilcox.test(formula=DV~FV, data=dtf)
出力:
> # Test whether two two locations differ by mu.
> wilcox.test(formula=DV~FV, data=dtf, mu=-1.5)
Wilcoxon rank sum test with continuity correction
data: DV by FV
W = 2530, p-value = 0.7007
alternative hypothesis: true location shift is not equal to -1.5
> wilcox.test(formula=DV~FV, data=dtf)
Wilcoxon rank sum test with continuity correction
data: DV by FV
W = 1888, p-value = 0.0218
alternative hypothesis: true location shift is not equal to 0
最初のケースでは、2つのサンプルの位置が -1.5 異なるという仮説を検証しました。 大きな p 値
は帰無仮説を支持します。
2 番目のケースでは、2つのサンプルが同じ場所にあるという仮説を検証しました。
R における対応のある t
および Wilcoxon 検定
データがペアになっている場合、単位ごとに 2つの観測値があります。 これらの検定の対応のあるバージョンを使用して、サンプルの対応のある観測値の間に差がない、または指定された差がないという仮説を検定する必要があります。
- これらのテストには引数
paired = TRUE
を使用します。 - データは、引数
x
およびy
と同じ長さの 2つの別個の数値ベクトルで指定する必要があります。
コード例:
# Data
set.seed(4455)
m = rnorm(92, 15, 3)
set.seed(7788)
n = rnorm(92, 14, 2.5)
# Paired t test. Testing for NO DIFFERENCE.
t.test(x=m, y=n, paired = TRUE)
# Paired Wilcoxon test.
wilcox.test(x=m, y=n, paired = TRUE, mu=1)
出力:
> # Paired t test. Testing for NO DIFFERENCE.
> t.test(x=m, y=n, paired = TRUE)
Paired t-test
data: m and n
t = 2.5187, df = 91, p-value = 0.01353
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
0.1962145 1.6605854
sample estimates:
mean of the differences
0.9283999
> # Paired Wilcoxon test.
> wilcox.test(x=m, y=n, paired = TRUE, mu=1)
Wilcoxon signed rank test with continuity correction
data: m and n
V = 1930, p-value = 0.4169
alternative hypothesis: true location shift is not equal to 1
対応のある t
検定の例では、差が 0 であるという帰無仮説は、このサンプルではサポートされません。
対応のある Wilcoxon 検定では、差が 1 であるという仮説を検定しました。p 値
が高いことがわかりました。
R の stats
パッケージのその他のテスト
R のデフォルトのインストールには stats
パッケージが含まれています。 このパッケージは、サンプル統計に関する仮説をテストするための他の多くの機能を提供します。
以下のコードを実行して、パッケージ内のすべての関数のリストを取得します。
コード例:
library(help = "stats")
R は、組み込みのヘルプからアクセスできる各テスト関数のドキュメントと例を提供します。