Take a Risk:林岳彦の研究メモ

自らの研究に関連するエトセトラについてのメモ的ブログです。主にリスク学と統計学を扱っています。

無から有(意差)を生む:多重比較でウソをつく方法

前回の記事では多重検定がキーワードとなりましたが、良い機会なので、今回は例を交えながら多重検定がもつ問題のインパクトについて説明したいと思います。
(*「多重検定って何?」という方はこちら

結論を先に書くと、多重性を調整しない多重比較がなぜ忌むべきものかというと、それはそのような多重比較を悪用すると「いとも簡単に無から有(意差)を生むことができる」からです。

では、そのことを「マウスへ化学物質を投与して影響を調べる」という仮想実験を例に見てみましょう。

仮想実験:マウスへ5種類の化学物質を投与する

仮想例として、5つの化学物質(物質A, B, C, D, E)をマウスに投与してその影響を調べる実験を考えてみます。

影響のエンドポイントとしては5つの器官(肝臓・腎臓・脳・肺・皮膚)の各細胞における量的なバイオマーカーの変化を用います。

それぞれの「エンドポイント・化学物質」ごとのサンプルサイズ(マウス数)は10匹として、バイオマーカー量のバラツキは正規分布する(&標準偏差は器官ごとに異なる)とします。

まずはRで仮想データを生成してみましょう:

#Generating experiment data
Control.kanzou <- rnorm(10,100,10)
Control.zinzou <- rnorm(10,100,10)
Control.nou <- rnorm(10,100,15)
Control.hai <- rnorm(10,100,20)
Control.hihu <- rnorm(10,100,25)
A.kanzou <- rnorm(10,100,10)
A.zinzou <- rnorm(10,100,10)
A.nou <- rnorm(10,100,15)
A.hai <- rnorm(10,100,20)
A.hihu <- rnorm(10,100,25)
B.kanzou <- rnorm(10,100,10)
B.zinzou <- rnorm(10,100,10)
B.nou <- rnorm(10,100,15)
B.hai <- rnorm(10,100,20)
B.hihu <- rnorm(10,100,25)
C.kanzou <- rnorm(10,100,10)
C.zinzou <- rnorm(10,100,10)
C.nou <- rnorm(10,100,15)
C.hai <- rnorm(10,100,20)
C.hihu <- rnorm(10,100,25)
D.kanzou <- rnorm(10,100,10)
D.zinzou <- rnorm(10,100,10)
D.nou <- rnorm(10,100,15)
D.hai <- rnorm(10,100,20)
D.hihu <- rnorm(10,100,25)
E.kanzou <- rnorm(10,100,10)
E.zinzou <- rnorm(10,100,10)
E.nou <- rnorm(10,100,15)
E.hai <- rnorm(10,100,20)
E.hihu <- rnorm(10,100,25)

これで仮想実験データを生成することができました。変数名は"化学物質名"."エンドポイント名"になっており、それぞれ10匹ぶんのバイオマーカーの量のデータが含まれています。

このデータの生成においては、コントロール区と処理区の間に全く違いを与えていないことに注意してください。

統計解析:多重性を調整せずにペアワイズのt検定を行う

では説明のために、検定の多重性の調整を考えずに統計解析を行います。

それぞれのペアで、「コントロール群」と「各化学物質曝露を行った群」の間でバイオマーカー量の平均値に差があるかどうかを調べるためにt検定により検定してみましょう:

# t-test
Ak.res <- t.test(Control.kanzou,A.kanzou)
Az.res <- t.test(Control.zinzou,A.zinzou)
An.res <- t.test(Control.nou,A.nou)
Aha.res <- t.test(Control.hai,A.hai)
Ahi.res <- t.test(Control.hihu,A.hihu)
Bk.res <- t.test(Control.kanzou,B.kanzou)
Bz.res <- t.test(Control.zinzou,B.zinzou)
Bn.res <- t.test(Control.nou,B.nou)
Bha.res <- t.test(Control.hai,B.hai)
Bhi.res <- t.test(Control.hihu,B.hihu)
Ck.res <- t.test(Control.kanzou,C.kanzou)
Cz.res <- t.test(Control.zinzou,C.zinzou)
Cn.res <- t.test(Control.nou,C.nou)
Cha.res <- t.test(Control.hai,C.hai)
Chi.res <- t.test(Control.hihu,C.hihu)
Dk.res <- t.test(Control.kanzou,D.kanzou)
Dz.res <- t.test(Control.zinzou,D.zinzou)
Dn.res <- t.test(Control.nou,D.nou)
Dha.res <- t.test(Control.hai,D.hai)
Dhi.res <- t.test(Control.hihu,D.hihu)
Ek.res <- t.test(Control.kanzou,E.kanzou)
Ez.res <- t.test(Control.zinzou,E.zinzou)
En.res <- t.test(Control.nou,E.nou)
Eha.res <- t.test(Control.hai,E.hai)
Ehi.res <- t.test(Control.hihu,E.hihu)

# giving p-values
Ak.res$p.value
Az.res$p.value
An.res$p.value
Aha.res$p.value
Ahi.res$p.value
Bk.res$p.value
Bz.res$p.value
Bn.res$p.value
Bha.res$p.value
Bhi.res$p.value
Ck.res$p.value
Cz.res$p.value
Cn.res$p.value
Cha.res$p.value
Chi.res$p.value
Dk.res$p.value
Dz.res$p.value
Dn.res$p.value
Dha.res$p.value
Dhi.res $p.value
Ek.res$p.value
Ez.res$p.value
En.res$p.value
Eha.res$p.value
Ehi.res$p.value

私が上の式でデータ生成→検定を10回繰り返したところ、以下のような結果がでました(5%有意水準を採用)*1

  • 1回目:化学物質Eが肝臓に影響(p= 0.034)
  • 2回目:化学物質Eが皮膚に影響(p= 0.037)
  • 3回目:どのケースにおいても有意差なし
  • 4回目:化学物質Aが皮膚に影響(p= 0.035)
  • 5回目:化学物質Eが肝臓に影響(p= 0.034)
  • 6回目:化学物質Cが肝臓に影響(p= 0.034)
  • 7回目:化学物質Aが脳に影響(p= 0.045)&化学物質Eが腎臓に影響(p= 0.028)
  • 8回目:化学物質Bが脳に影響(p= 0.034)
  • 9回目:化学物質Cが脳に影響(p= 0.024)
  • 10回目:化学物質Cが皮膚に影響(p= 0.033)

というわけで、とても簡単に無から有(意差)を生むことができました。検定を25通り(5物質×5エンドポイント)も繰り返すと、ふつうに1つくらいは間違って有意差を拾ってきてしまうものなのです。おそろしいですね。


検定の多重性を考慮し、全体での危険率(偽陽性*2になってしまう確率)を5%水準とすると、ペアワイズのt検定における本来のp値はp=0.002ほどになります*3。このような多重性を考慮したp値は、偶然だけでは20回に1回ほどしか現れてきません。

ちなみにどのエンドポイントにおいて偽陽性が現れやすいかというのは、バイオマーカーのバラツキ(標準偏差)には依存しません*4。バラツキが小さいと、そのぶん有意差も検出されやすくなるからです。

完全犯罪:"トリミング"というブラック行為

さすがに、上記のようなケースでは「それは多重比較でしょ」というツッコミが来るかもしれません。

しかしながら、もし実験者が上記の実験を行い「化学物質Eが肝臓に影響(p= 0.034)」という結果を得たとして、そのうち有意差がでた「化学物質Eと肝臓」のことしか論文に書かないとしたらどうなるでしょうか(他の化学物質とエンドポイントの話は都合が悪いので"トリミング"してしまう)。

そうなると、本来の多重性はもう誰にも見えなくなってしまいます。完全犯罪です。こういうことをしたら、ダメ、絶対です。

グレーのグラデーション:非意図的な"トリミング"

さすがに、上記のような明確な悪意をもった"トリミング"が行われているケースは少ないとは思われます。たぶん。

しかし、例えば本当に「化学物質Eが肝臓に与える影響」を知ることが本来の目的で、他の化学物質やエンドポイントは測定の「デフォルト」として一応データをとっていた、というケースもあるかもしれません。そのような場合には、論文を書くときに「他の化学物質とエンドポイントの話」を"トリミング"しちゃうというのは、少なくとも心情的には理解できます。このような場合には必ずしろ「クロ」とは言い切れないものがあります。

また、調査観察データからスクリーニング的にいろいろなやり方でいろいろな方向から影響を調べていてたまたま「ある影響」を検出して、その「ある影響」に関するストーリーを中心に"トリミング"をして論文を発表する、みたいなケースもあるかもしれません。これも本人としては「黒い意図」はないかもしれませんが、ちょっと多重検定的な危うさは伴います。


みなさま、気をつけましょう。

結論:だから「追試は大事」なの

結論としてとりあえず言えるのは、「検定を繰り返して有意差を拾ってきて何とかする」という形のアプローチは、統計的に非常に危うい物であり、偽陽性を非常に拾いやすいということですかね。気をつけたいものです。

あと、上記で述べてきたような「偽陽性」の問題を解決する王道はやはり「追試」ということになるわけであり、大事な教訓として言えるのは「やっぱり追試は大事だよ」だということかもしれません。

科学的知見というのものは(方法論的に意外と危うい側面が拭えない)単一の研究だけからではなく、複数の研究による知見が積み重なってはじめて「信頼できるエビデンス」となるのだ、ということを改めて認識したいものです。



【追記:20110210】多重検定に関しては、粕谷さん&久保さんの2004年の生態学会自由集会のサイトも非常に勉強になりますのでオススメとして追記しておきます。

関連書籍(オススメ)

生物学を学ぶ人のための統計のはなし―きみにも出せる有意差

生物学を学ぶ人のための統計のはなし―きみにも出せる有意差

統計的多重比較法の基礎

統計的多重比較法の基礎

*1:もちろんそのつど乱数が生成されているのでやるたびに結果が違います

*2:すみませんここ漢字間違ってました:◯偽陽性、☓擬陽性

*3:なので、t検定の繰り返しではなく、テューキーやダネットの多重比較法を使いましょう

*4:たぶん