ここから本文です

この知恵ノートを「知恵コレクション」に追加しました。

追加した知恵ノートはMy知恵袋の「知恵コレクション」ページで確認できます。

知恵コレクション」に登録済みです。

再登録しました。

追加に失敗しました。

ノートに戻り、もう一度やり直してください。

すでに1,000件のノートが登録されています。

新しく追加したい場合は、My知恵袋の「知恵コレクション」ページで登録されているノートを削除してください。

追加できませんでした。

ノートは削除されました。

ウェルチ多重検定と2群の分散分析 t検定,Rのpairwise.t.testを利用

ライターさん(最終更新日時:2015/12/19)投稿日:

  • ナイス!:

    0

  • 閲覧数:2185

印刷用のページを表示する

 Welch.gif
執筆責任:井口豊(長野県岡谷市・生物科学研究所

多重検定に関しては,ノンパラメトリック検定として利用される Steel-Dwass 検定の利用上の注意を解説した知恵ノートも参照。


この Steel-Dwass 検定に関する知恵ノートでも活躍したフリーの統計解析ソフト R には,多重比較を行なうのに便利な関数として pairwise.t.test もある。 pairwise という名称の通り,2群ずつ対にして多重検定を行なうのだが, pairwise.t.test が,等分散を仮定したt検定なのか,ウェルチ(Welch)検定なのか,意外と知られていないし,ウェブ解説もほとんどない。

それを知るには,実際に調べてみれば良い。ここでは,単純なモデルとして2群の分散分析(ANOVA)を考え,ボンフェローニ(Bonferroni)法で検定してみる。

ここで注意したいのは,分散分析は2群以上の平均値の差の検定だという点である。以下に示すように, t 検定とは,まさに2群の分散分析である。その背景には,自由度 n の t 分布に従う統計量 t の2乗は,自由度(1, n)のF分布に従う,という統計学上の定理がある。論文などで,F(1, )と書かれている場合は,t検定をやっているのと同じなのである。

分散分析は3群以上と間違って理解したり,あるいは,そのようなトンチンカンな解説をしたりする人が,大学教員にさえいるので注意が必要である。

もちろん2群だけを用いた対比較(paired comparison)に, pairwise.t.test 関数を使うことも可能であり,これまた3群以上の場合だと誤解しないでほしい。

次のような2群 x1,x2 を考える。

x1<- c(2, 2, 3)
x2<- c(4, 8, 11)

なお,この場合,2標本検定(two-sample test)なので,当然ながらサンプル数(number of samples)は2である。一方で,標本の大きさ,つまり,サンプルサイズ(sample size)は共に3である。このサンプル数とサンプルサイズについても,混同する人が非常に多い。

これに関しては,私の研究室ブログも参照


それでは,実際に検定を進めてみよう。まず, pairwise.t.test を使い,ボンフェローニ法で計算する。特に, p 値に注目する。

dat<- c(x1, x2)
grp<- rep(c(1, 2), c(3, 3))
pairwise.t.test(dat, grp, p.adj = "bonf")$p.value

結果は
t tests with pooled SD
p = 0.06033057

次に,このデータで, t 検定を行なう。

t.test(x1, x2)$p.value

結果は
Welch Two Sample t-test
p = 0.1155964

これは,分散のオプションを敢えて指定して
t.test(x1, x2, var.equal=F)$p.value
としても同じ結果である。

つまり, R では,デフォルトの t 検定は, Welch 検定なのである。これは, t 検定の種類を決める際に,等分散検定の結果で判断することは,理論的にも,結果的にも望ましくないからである。私の別の知恵ノートも参照してほしい。


一方で,等分散を仮定した t 検定を行なうと
t.test(x1, x2, var.equal=T)$p.value

結果は,
p = 0.06033057
である。

前述のとおり,この t 検定の結果は,2群の分散分析としても得られる。その場合は, oneway.test 関数を使うと良い。

# 等分散仮定の分散分析
oneway.test(dat~grp, var=T)$p.value

# Welchの分散分析
oneway.test(dat~grp, var=F)$p.value

p 値は,それぞれ, t 検定の場合と一致する。

これらの t 検定の p 値を, pairwise.t.test の p 値と見比べてみると分かるが, pairwise.t.test  は,デフォルトで等分散 t 検定を行なっているのである。それが出力結果の説明にもあった pooled sd (プールされた標準偏差)の意味でもある。

もし, pairwise.t.test 多重検定で, Welch 検定を利用したければ,標準偏差をプールしなければ良いので,オプション pool.sd を F とすれば良い。

pairwise.t.test(dat, grp, p.adj = "bonf", pool.sd=F)$p.value

結果は
p = 0.1155964
前述の t.test 関数による Welch 検定の結果と同じになる。

なお, pairwise.t.test のヘルプを読むと,オプション pool.sd を True とするのは,小さな標本(サイズが小さい標本)が存在する場合に役立つと書かれている。

このノートに関するQ&A

このノートに関するQ&Aは、まだありません。

このノートについて質問する

このノートについてライターの方に質問できます。

※ライターの方から必ず回答をいただけるとは限りません

※別ウィンドウで開きます

この知恵ノートのライター

グレード

グレード知恵ノートのグレード:2-3

iguchi_yuさん男性

ピックアップ

お尻や足の贅肉にさよなら、「...
本にできない「正しい」下半身ダイエットなぜ「本にできない...
耳鼻科の先生に聞いた、しゃっ...
  皆さん、しゃっくりってわずらわしいですよね  ある時急に...
知っておきたい無線LANルーター...
知っておきたい無線LANルーターの知識と選び方iPod touchやPS...
本文はここまでです このページの先頭へ