jnobuyukiのブログ

研究していて困ったことやその解決に関するメモ。同じように困ったあなたのために。twitter ID: @j_nobuyuki

サンプルサイズが条件ごとに異なる一要因分散分析

今回は、一要因分散分析について考えます。典型的な教科書では、分散分析の条件ごとのサンプルサイズが揃っている場合を扱います。もしも条件ごとのサンプルサイズが大きく異なる場合はどんな問題に気をつければよいかを見てみましょう。

ちなみに似たような疑問をt検定について取り上げたことがありますので、よろしければそちらも御覧ください。

webbeginner.hatenablog.com

そもそも分散分析とは?

分散分析という名前が示す通り、2つの分布の分散を比によって比較します。主な用途は実験や調査で設定されたグループや条件の比較です。グループ間、または条件間の平均値差をグループ間のデータ変動(ある種の分散)とみなして、グループ間変動の大きさが、グループ内のデータ変動に比べて何倍大きいのかを計算します。

各グループのサンプルサイズが大きく異なる場合

統計学のテキストなどでは、各条件のサンプルサイズが揃っている場合が扱われることがほとんどです。そこで、今回はあえて、サンプルサイズの異なる3つの条件を比較してみたいと思います。

以下のデータは、R言語のrnorm関数を使って生成しました。条件Aと条件Bは50個のサンプルがありますが、条件Cでは10個のサンプルにしています。

f:id:jnobuyuki:20170115165057p:plain

上記の下半分に示されている数字(-0.283, 0.936, 0.967)が各条件の平均値です。ここで条件Aと条件 Bの差よりも条件Aと条件Cの差の方が大きいことを覚えておきましょう。

さて、このデータについてR言語のlm関数を使って一要因分散分析をした結果が以下の通りです。

f:id:jnobuyuki:20170115165418p:plain

R言語の出力のうち、最終行が分散分析の結果を示しています。F(2,107) = 24.49, p < .001.と出力から、論文やテキストで良く見かける表記に書き直しました。さて、この結果が示すように、分散分析の結果は、0.1%の有意水準で有意です。3つの条件のいずれかに偶然とは呼べないような差があると考えられます。実は、lm関数の出力を見ると、A条件とB条件の差、A条件とC条件の差が既に示されています。出力上半分のcoefficientsの内、groupBとgroupCという行がそれです。この出力結果は、groupAを基準とした時のgroupBとgroupCの差が示されています。一番左のEstimateの部分です。みてわかるように条件Aとの差異は条件Bより条件Cで大きくなっています。ただし、この結果をt値という統計量で見ると結果が逆転します。条件Aと条件Bの差に対応するt値は6.673、条件Aと条件Cの差に対応するt値は3.948です。t値を計算する差異には、各条件の平均の差が条件内のばらつきを基準に計算されます。例えば、サンプルサイズが小さいと平均値についての誤差は相対的に大きくなるので、t値は小さくなります。つまり、サンプルサイズが小さい条件を含む比較では、有意差が得られにくくなります。今回の数値例では、どちらの条件比較も有意差がありますが、場合によっては平均値の値の上では同じようなペアであっても有意差が出たり出なかったりすることも考えられます。これを考えるとやはり一般的なテキストに書かれているように「各条件のサンプルサイズはなるべくそろえるように」という言葉に従っておいた方が良さそうです。

R言語の一要因分散分析の関数はどんな計算をしている?

さて、条件間でサンプルサイズが違う場合の分散分析をする上で、1つ気をつけた方がよいことがあります。それは、すべてのデータの平均の計算方法です。今回のサンプルでは、3つの条件の平均値がそれぞれ-0.283, 0.936, 0.967でしたので、その3つの数字の平均を単純に計算すると0.54になります。しかしこれはデータ全体の平均値としては不適切です。各条件のサンプルサイズを考慮した平均値は0.3847235(2017/1/16 修正しました)となります。分散分析をするときに、各条件の平均値を基準としたデータのばらつきは、サンプルサイズの計算に影響を及ぼさないのですが、条件間のデータ変動を計算する差異には、全体の平均がどこになるかで結果が異なるので注意が必要です*1

*1:R言語やMS Excelの分散分析では特に指定しなくても重み付けされた平均値が計算されるので安心してください。