Rで学ぶ統計講座(初級)

Rによる平均の差の検定 1サンプル

分散が既知

ある集団について分散が既知の時に、その標本の平均値がある基準値と異なっているかどうかの検証を行うときには「Z検定」を行う。

ある集団から500人無作為抽出して得られた年齢データを用いる。

関西圏を中心に全国規模で展開しているある高齢者向けサービスでは会員の平均年齢は57.00歳であり、年齢の分散は36.91である。このたびD県にて新たにサービスを開始することになり、新規会員を募った。その新規加入者から500人を無作為抽出し、年齢を調べた(設定は架空)。

  • 年齢の分散が全国と等しいものとするとD県新規加入者の平均年齢は何歳であると推定できるか。
  • 全会員平均年齢57.00と今回調査対象者の標本平均57.56を比較してD県新規加入者の平均年齢は全国平均より高いと言えるか。
  • 今回標本から得られた年齢の分散(V)は39.79である。全会員の年齢の分散よりも分散が大きいとなるとマーケティングのターゲットが十分に絞り込めていないことになるが、今回の新規会員年齢の分散についてどう判断すべきか。

分散を既知とみなす時にはz検定を行う。

Rスクリプト

data <- read.csv("http://kyoto-edu.sakura.ne.jp/weblesson/statistics/data/age.csv", fileEncoding = "utf-8")
summary(data)
x <- data$年齢
testVal <- 57
sigma2 <- 36.91

source("http://kyoto-edu.sakura.ne.jp/weblesson/statistics/socialStatisticsBasic.R", encoding="UTF-8")
output.z.test <- z.test(x,testVal,sigma2)

#結果出力
output.z.test

#ファイルへの書き出し
write.output(output.z.test,"output.z.test.csv")

z.test関数(socialStatisticsBasic.Rで読み込まれる自作関数)

z.test(x,mu,sigma2,a)
  • x=平均値の比較をしたい間隔・比例尺度のベクトルデータ (例) c(1,3,2,6)
  • mu=基準平均値
  • sigma2=基準分散
  • a=有意水準(初期値は0.05)

出力結果

$statistics
                 summary
N             500.000000
df            499.000000
mean           57.560000
u2             39.874148
u               6.314598
Missing Value   0.000000
$z_test
               z-test
SE         0.27169836
Z          2.06110922
rejection  1.95996398
p(!=)      0.03929262
p(>)       0.01964631
p(<)       0.98035369
Upper     58.09251900
Lower     57.02748100
$var_test
         var-test
chisq 539.0734218
p(!=)   0.2087466
p(>)    0.1043733
p(<)    0.8956267
  • 母平均の信頼区間
    • Lower 57.02748100
    • Upper 58.09251900
  • 平均の差の検定(両側)
    ※全国平均と比べて平均年齢が高くても低くても検知したい。今回加入者のほうが年齢が高いというのはデータを見て初めて分かったことである。
    • Z 2.06110922
    • p(≠) 0.03929262
  • 母分散の差の検定(片側)
    ※D県新規加入者の分散が基準値(全国値)を上回りさえしなければマーケティング上問題なしとされる。
    • chisq 539.0734218
    • p(>) 0.1043733

考察例

新規会員の年齢の区間推定を行った。95%の信頼区間で57.03<μ<58.09 であった。

新規会員の平均年齢が全国平均(57.00)と差があるかどうかを平均の差の検定を用いて検証を行った。

今回の調査で得られた標本の平均年齢は57.56である。

Z検定(両側)より5%の危険度で有意であると確認できた(Z=2.06, p<.05)。

この結果よりD県新規会員の年齢は全国平均より高いと言える。

今回の調査で得られた標本の分散が全国の分散(36.91)より大きいと言えるかどうか、検定を行った。

今回の標本年齢の分散は39.87 であった。

母分散の差の検定(片側)より5%の危険度で有意であるとは言えない(Χ^2(499)=539.07,p=0.10)。

分散が未知

ある集団について分散が未知の時に、その標本の平均値がある基準値と異なっているかどうかの検証を行うときには「t検定」を用いる。

ある集団から500人無作為抽出して得られた年齢データを用いる。

定年退職者が集まって様々な社会活動を行っている団体で、メンバーの高齢化が話題となった。20年前はこの団体メンバーの平均年齢は57.00歳だったが、今はそれよりも年齢が高くなっているのではないかというのだ。そこでそのメンバーから500人を無作為抽出し、年齢を調べた(設定は架空)。

  • 現在のメンバーの平均年齢は何歳であると推定できるか。
  • 20年前の平均年齢57.00と今回調査対象者の標本平均57.56を比較して20年前に比べて現在高齢化が進んでいると言えるだろうか。

母分散が分からない時にはt検定を用いる。

Rスクリプト

data <- read.csv("http://kyoto-edu.sakura.ne.jp/weblesson/statistics/data/age.csv", fileEncoding = "utf-8")
summary(data)
x <- data$年齢
testVal <- 57

output.t.test0 <- z.test(x,testVal)

#結果出力
output.t.test0

#ファイルへの書き出し
write.output(output.t.test0,"output.t.test0.csv")

z.test関数(socialStatisticsBasic.Rで読み込まれる自作関数)

z.test(x,mu,a)
  • x=平均値の比較をしたい間隔・比例尺度のベクトルデータ (例) c(1,3,2,6)
  • mu=基準平均値
  • a=有意水準(初期値は0.05)

※sigma2(基準分散)の指定をしない時はt検定を行う。

出力結果

$t_test
               t-test
SE         0.28239741
t          1.98302103
rejection  1.96472939
p(!=)      0.04791290
p(>)       0.02395645
p(<)       0.97604355
Upper     58.11483449
Lower     57.00516551
d          0.08868340
r          0.08842448
  • 母平均の信頼区間
    • Lower 57.00516551
    • Upper 58.11483449
  • 平均の差の検定(片側)
    ※今回の事例では現在の平均年齢が過去と比べて高くなっていることだけを懸念している。差があると言えないか、むしろ低い場合、いずれも懸念は解消される。
    • t 1.98302103
    • p(>) 0.02395645
  • 効果量
    • d 0.08868340
    • r 0.08842448

考察例

現メンバー年齢の区間推定を行った。95%の信頼区間で母平均は57.01<μ<58.11 である。

現メンバー平均年齢が過去平均(57.00)に比べて高くなっているかどうかを平均の差の検定を用いて検証を行った。

今回の調査で得られた標本の平均年齢は57.56であり、過去の平均年齢との差は0.56である。

t検定(片側)より5%の危険度でこの平均の差は有意である(t(499)=1.98, p<.05, r=0.09)。

この結果より現メンバーの平均年齢は過去平均より高いと言える。ただし効果量rより、この結果で顕著な差があるとは言えない。