[8] 2つの母数の差の検定と区間推定


  [8.1] 2つの分散の差の検定
  [8.2] 2つの平均値の差の検定と区間推定(独立データの場合)
  [8.3] 2つの平均値の差の検定と区間推定(関連データの場合)
  [8.4] 2つの割合の差の検定と区間推定

[8.1] 2つの分散の比の検定

 独立データのt検定を行う前に、2つの母分散が等しいかどうかをF検定します。その結果に応じて、「等分散を仮定したt検定」あるいは「非等分散を仮定したt検定」に進みます。

 等分散性のF検定は、同じ母集団から2つの標本を抽出するとき、その標本分散の比を検定量Fとし、Fが、自由度1と自由度2のF分布に従うことを利用します。検定の手順は、他の検定と同様です。
        標本1の分散
 検定量 F0 = ---------------
        標本2の分散

 Rでは、subset( )関数を使って、ある条件を満たすデータだけを抽出することができます。あるいは、変数1 ~ 変数2という式を使うと、変数2のカテゴリを使って、別の変数1のデータを分割することができます。F検定を行う際には、var.test( )関数に、引数として2つのデータを渡してもよいし、あるいはチルダ ~ 式(formula)を渡すこともできます。

【例題】ある新聞に掲載された投書198件のデータについて、投書者の性別ごとに基本語彙の使用率を調査したところ、次のような結果が得られた。

 標本サイズ(N)平 均(Xbar)分散(var)標準偏差(SD)
男性の基本語彙使用率10229.4936.716.06
女性の基本語彙使用率9630.0532.625.71

 上のデータに基づいて、あるいは、元のデータを読み込んで、男女の基本語彙使用率の母分散が等しいかどうかを有意水準5%で検定しなさい。

# 集約データに基づき、F検定を行う
( f <- qf( 0.05/2, 102-1, 96-1 ) ) # 境界値

[1]
( F0 <- 36.71 / 32.62 ) # 検定量F0
[1] 1.125383
( P <- pf( F0, 102-1, 96-1, lower.tail=F ) * 2 ) # 有意確率
[1] 0.5616896 # 帰無仮説を棄却できない
# 元データに基づき、F検定を行う
# データ読み込み
sample <- read.table( "male.dat" )
basic.M <- subset( sample, sample$sex=="M" )$basic # 男性の基本語彙率データ
basic.F <- subset( sample, sample$sex=="F" )$basic # 女性の基本語彙率データ

# 等分散性の F 検定
var.test( basic.M, basic.F )

> var.test( basic.M, basic.F )

      F test to compare two variances

data: basic.M and basic.F
F = 1.1251, num df = 101, denom df = 95, p-value = 0.5625
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
0.7544002 1.6738379
sample estimates:
ratio of variances
     1.125101

 var.test( )にフォーミュラを渡すと、たった1行でF検定を行えます。

var.test( sample$basic ~ sample$sex )

    F test to compare two variances

data: sample$basic by sample$sex
F = 0.8888, num df = 95, denom df = 101, p-value = 0.5625
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
0.5974294 1.3255564
sample estimates:
ratio of variances
    0.8888087

 先ほどのF検定と比較すると、分母と分子が入れ替わっているため、F値(と信頼区間の値)が異なっていますが、結果のP値はまったく同じ(0.5625)です。

(※注1)この理由は、sample$sexのカテゴリは"F"と"M"という値を取りますが、アルファベット順で先行するFの方を第1のデータと扱うためです。先ほどのF検定では、basic.Mの方を第1引数として渡していました。basic.Fの方を第1引数とすると、ここと同じ分析結果が得られます。
(※注2)変数カテゴリはデフォルトではアルファベット順ですが、factor( )関数を使って順序を並べ替えることができます。asashi.df$$sexで、"M"を先にして、

asahi.df$sex &;lth- factor( asahi.df$sex, levels = c( "M", "F" ) )
var.test( asahi.df$basic ~ asahi.df$sex )
を実行すれば、う結果が得られます。

 F検定の結果、帰無仮説「2つの母分散が等しい」を棄却できません。このような場合は、等分散を仮定したt検定へと進みます。

R の関数を使いこなそう
qf( alpha, df1, df2 )有意水準αのF分布境界値
両側検定のときは、第1引数をalpha/2とする
lower.tail=T/FFのとき、上側の境界値
Tのとき、下側の境界値(デフォルト)
pf( F0, df1, df2 )F0の下側確率(デフォルト)
lower.tail=FF0の上側確率
var.test( データ1, データ2 )等分散性のF検定を行う
alternative="検定の型""two.sided"(両側検定)
"greater"(右片側検定)
"less"(左片側検定)
var.test( データ1 ~ データ2 )データ1をデータ2のカテゴリで分割して、F検定を行う
(注)データ2に含まれるカテゴリ数は2であること


[8.2] 2つの平均値の差の検定と区間推定(独立データの場合)

 F検定の結果、等分散を仮定できるかどうかが判明します。等分散を仮定できるかどうかによって、検定量や自由度の計算のしかたが異なります。


8.2.1 等分散を仮定するt検定

 等分散を仮定できる場合、次の検定量が自由度(n1+n2-2)のt分布に従うことを利用して、t検定を行います。
           標本1の平均 - 標本2の平均
 検定量 T= ------------------------------------------- ,
       sqrt( 共通の分散 * ( 1 / n1 + 1 / n2 ) )

         標本1の分散*標本1の自由度+標本2の分散*標本2の自由度
 共通の分散 V = ----------------------------------------------------------- ,
              標本1の自由度+標本2の自由度
 標本1の自由度 = n1 - 1
 標本1の自由度 = n1 - 1

 Rを使って、等分散を仮定する、2平均値の差のt検定を行うには、t.test( )関数に2データを渡し、オプションとしてvar.equal=TRUEを指定します。

【例題】次のデータを用いて、投書における基本語彙使用率の平均値に男女間で違いがあるかどうか、有意水準5%で検定しなさい。

 標本サイズ(N)平 均(Xbar)分散(var)標準偏差(SD)
女性の基本語彙使用率9630.0532.625.71
男性の基本語彙使用率10229.4936.716.06

また、平均値差の95%信頼区間を推定しなさい。

# 箱ひげ図を描画する
boxplot( basic.F, basic.M, names=c( "female", "male" ) ) # 軸ラベル名を指定
title( "基本語彙使用率の箱ひげ図(男女別)" )


# 境界値を算出する
df1 <- 96 - 1
df2 <- 102 - 1
df <- 102 + 96 - 2
( t <- qt ( 0.05/2, df, lower.tail=F ) ) # 境界値t

[1] 1.972141
# 検定量を算出する
( pooledV <- ( 32.62 * df1 + 36.71 * df2 ) / ( df1 + df2 ) )

[1] [1] 34.60303
( SE <- sqrt( pooledV * ( 1/df1 + 1/df2 ) ) ) # 標準誤差
[1] 0.8364769
( t0 <- ( 30.05 - 29.49 ) / SE )
[1] 0.6694745
pt( t0, df, lower.tail=F ) * 2 # 有意確率
[1] 0.5039807
# 95%信頼区間を推定する
( ( 30.05 - 29.49 ) - t * SE ) # 下限値

[1] -1.089496
( ( 30.05 - 29.49 ) + t * SE ) # 上限値
[1] 2.209496

 検定量t0=0.669が境界値1.972よりも小さいので、帰無仮説を棄却できます。有意確率P(t>t0は0.504です。95%信頼区間が(-1.089, 2.209)で、間に0を含んでいます。

 Rに組み込まれている t.test( )を使っても、同じ結果が得られます。今の場合のように、「2つの母分散が等しいとできる」ケースでは、t.test( ) を実行する際、忘れずにvar.equal=TRUEを指定します。t.test( )はデフォルト(何も指定しない場合)では、2分散が等しくないと仮定しているからです。

t.test(basic.F, basic.M, var.equal=T)
     Two Sample t-test

data: basic.F and basic.M
t = 0.6685, df = 196, p-value = 0.5046
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-1.092391 2.212832
sample estimates:
mean of x mean of y
30.04542 29.48520


8.2.2 非等分散を仮定するt検定

 F検定の結果、2つの母分散が等しくないと結論されるときは、いわゆるウェルチの検定(Welch's test)を行います。これは、次の式によって検定量Tを求め、それが以下の式で算出される自由度dfのt分布に従うことを利用します。たいへん複雑な式ですが、検定の手順は今までとまったく同じです。
                 標本1の平均 - 標本2の平均
 検定量 T = ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
       sqrt( ( 標本1の分散 / 標本1の標本数 + 標本2の分散 / 標本2の標本数 ) )

       ( 標本1の分散 / 標本1の標本数 + 標本2の分散 / 標本2の標本数 )2
 自由度 df = ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
       (標本1の分散2/(標本数12*標本1の自由度) + (標本2の分散2/(標本数22*標本2の自由度) )

 Rでは、t.test( )関数に2つのデータを渡し、var.equal=FALSEを指定して、検定を行います。

【例題】ある新聞投書198件のデータについて、男女別に漢字使用率を調査したところ、次のような結果が得られた。

 標本サイズ(N)平 均(Xbar)分散(var)標準偏差(SD)
男性の漢字使用率10235.5448.696.98
女性の漢字使用率9629.0228.215.31

もとのデータを読み込んで、漢字使用率の平均が男女間で等しいかどうか有意水準5%で検定しなさい。また、平均値の差の95%信頼区間を推定しなさい。

# 男女別漢字率データを準備する
sample <- read.table( "sample.dat", header=T ) # データ読み込み
kanji.M <- subset( sample, sex=="M" )$kanji # 男性の漢字率データ
kanji.F <- subset( sample, sex=="F" )$kanji # 女性の漢字率データ
# 箱ひげ図を描画する
boxplot( kanji.M, kanji.F, names=c( "male", "female" ) ) # 軸ラベル名
title( "漢字使用率の箱ひげ図(男女別)" )


# 等分散性のF検定を行う
var.test( kanji.M, kanji.F )


     F test to compare two variances

data: kanji.M and kanji.F
F = 1.7261, num df = 101, denom df = 95, p-value = 0.007628
 ←有意(→非等分散)
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
1.157409 2.568021
sample estimates:
ratio of variances
     1.726144


# 非等分散を仮定するt検定(ウェルチの検定)を行う
t.test( kanji.M, kanji.F, var.equal=F )

     Welch Two Sample t-test

data: kanji.M and kanji.F
t = 7.414, df = 187.912, p-value = 4.067e-12
 ←有意差あり
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
4.778476 8.243166
sample estimates:
mean of x mean of y
35.53520 29.02437


[8.3] 2つの平均値の差の検定と区間推定(関連データの場合)

 平均値の差が0である(平均値の等しい)2つの母集団から1対を抽出し、その差を D = X1-X2とする。N 個の対からなる標本があるとき、次の検定量Tが自由度(N-1)のt分布に従うことを利用して検定を行います。
            差Dの平均
  検定量 T = ----------------------------------
        差Dの標準偏差 / sqrt(標本サイズ)

 Rでは、t.test( )関数に、引数として2データを渡し、オプションとして paired=TRUE を指定します。等分散に関するF検定を行う必要がないので、var.equalに関するオプション指定も必要ありません。

【例題】ある新聞に掲載された投書200件に関し、漢字使用率と過去形使用率を調査したところ、次のようなデータが得られた。

 標本サイズ(N)平 均(Xbar)標準偏差(SD)
漢字使用率20028.515.07
過去形使用率20031.2722.10

このデータをRで読み込んで、漢字使用率と過去形使用率の平均が等しいと見なしてよいか、有意水準5%で検定しなさい。また、差の95%信頼区間を推定しなさい。

data <- read.table("kanji_past.dat", header=T) # データ読み込み
t.test( data$kanji, data$past, paired=T ) # 対応のあるt検定

     Paired t-test

data: data$kanji and data$past
t = -1.7162, df = 199, p-value = 0.08769
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-5.9437139 0.4122139
sample estimates:
mean of the differences
        -2.76575

 P値(有意確率)が0.088ですので、5%レベル有意でないことがわかります。また、平均値差の95%信頼区間が0を含んでいることからも、有意でないことが確認できます。
 確認のために、上の公式に従って、検定を行ってみます。

# α=0.05(両側)の境界値tを算出
( N <- length( data$kanji ) ) # 標本サイズN

[1] 200
( df <- N - 1 ) # 自由度
[1] 199
( t <- qt( 0.05/2, df, lower.tail=F ) ) # 境界値t
[1] 1.971957
# 検定量t0を算出
( D.mean <- mean( data$kanji - data$past ) ) # 差Dの平均

[1] -2.76575
( D.sd <- sd( data$kanji - data$past ) ) # 差Dの標準偏差
[1] 22.79117
( t0 <- D.mean / ( D.sd / sqrt( N ) ) # 検定量t0
[1] -1.716174
# 有意確率Pを算出
pt( t0, df ) * 2 # 両側検定なので2倍する

[1] 0.0876864
# 95%信頼区間を算出
( SE <- Dsd / sqrt( N ) ) # 差の標準誤差
[1] 1.611579
D.mean - t * SE ) # 下限値

[1] -5.943714
D.mean + t * SE # 上限値
[1] 0.4122139

R の関数を使いこなそう
t.test( データ1、データ2 )2つの母平均の差のt検定を行う
paired=T/FTRUE(対応のあるt検定)
FALSE(対応のないt検定、デフォルト)
var.equal=T/FTRUE(等分散を仮定するt検定)
FALSE(非等分散を仮定するt検定=ウェルチの検定)
alternative="検定の型""two.sided"(両側検定、デフォルト)
"greater"(右片側検定)
"less"(左片側検定)


[8.4] 2つの割合の差の検定と区間推定

 2つの標本においてあるイベントの発生する割合に基づいて、2つの母割合が同じかどうかを検定します。割合πの母集団から標本抽出されるとき、標本サイズが30以上の場合、次の検定量Tが標準正規分布に近似することを利用します。検定の手順は今までとまったく同様です。
                 | 標本1での割合 - 標本2での割合 |
 検定量 T = ---------------------------------------------------------------------------------,
       sqrt( 標本全体での割合 * ( 1 - 標本全体での割合 ) * ( 1/標本数1+1/標本数2 ) )

 Rでは、まずxtabs( )で分割表を作成し、必要とされる情報をprop.test( )関数に渡します。Rでは、デフォルトの場合、イェーツの補正(Yates' correction)を行った次の式で検定量を算出します。この補正を行わないときは、correction=FALSEを指定します。
         | 標本1での割合 - 標本2での割合 | - 0.5 * ( 1/標本数1+1/標本数2 )
 検定量 T = ---------------------------------------------------------------------------------,
       sqrt( 標本全体での割合 * ( 1 - 標本全体での割合 ) * ( 1/標本数1+1/標本数2 ) )

【例題】ある新聞の投書198件のデータに関して、投書中で明喩表現を使用しているかどうかを調査したところ、次のような結果が得られた。

 明喩の使用あり明喩の使用なし標本サイズ
男性36(35.3%)66(64.7%)102
女性27(28.1%)69(71.9%)96

 男性と女性の間で、擬音語を使用する割合が同じと言えるかどうか、有意水準5%で検定しなさい。また、割合の差の95%信頼区間を推定しなさい。

# 男女の明喩データの分割表を作成する
sample <- read.table( "sample.dat", header=T ) # データ読み込み
addmargins( xtabs( ~sample$sex + sample$simili ) ) # 性別と使用回数で分割表

  simili
sex   0  1  2  3 Sum
  F  69 18  8  1 96
  M  66 30  5  1 102
 Sum 135 48 13  2 198

# 2割合の差の検定を行う
prop.test( c( 27, 36 ), c( 96, 102 ) ) # ありの数、全体数

  2-sample test for equality of proportions with continuity correction

data: c(27, 36) out of c(96, 102)
X-squared = 0.8645, df = 1, p-value = 0.3525
alternative hypothesis: two.sided
95 percent confidence interval:
-0.21099077 0.06760841
sample estimates:
 prop 1  prop 2
0.2812500 0.3529412

 表面的には男性の明喩使用が女性よりも約7ポイント多いのですが、割合の差の検定の結果は有意となりませんでした。95%信頼区間が0を含んでいることによっても確認されます。

R の関数を使いこなそう
xtabs( ~ カテゴリデータ )データのカテゴリごとの頻度集計
xtabs( ~ カテゴリデータ1+カテゴリデータ2 )2元分割表を作成
データ1が表側、データ2が表頭の変数
addmargins( 表データ )行と列の合計を追加表示する
prop.table( 表データ, margin )行と列の合計を追加表示する
margin=1: 行パーセント、margin=2: 列パーセント
prop.test( yesの頻度ベクトル, 全体の頻度ベクトル )割合の差の検定を行う
3つ以上の割合の差の検定も可能
correction=T/FT:イェーツの補正を行う(デフォルト)
F: 補正を行わない