厳しいテストについての私の拙い理解(久馬巌さんへの返答)

このブログ記事の内容は,他のブログ記事と同様,筆者だけに責任があり,所属組織は一切の責任を負いません.

 

このブログ記事は,以下の久馬巌さんのつぶやきに対する個人的なリプライです.

 

Twitterで返事すればいいのですが,長くなるのでブログ記事にしました.

 

ひどい間違いがあれば,この記事ごと削除するかもしれません.

 

まずお断りですが,私は久馬巌さんよりも,Mayo先生の誤り統計学について理解していないと思います.このブログ記事では,私が,どの文献のどこを見て,現在どのように解釈しているかを述べます.

 

以下,Mayo, D. G. (2018), Statistical Inference as Severe Testing: How to Get Beyond the Statistics Wars, Cambridge University Pressを「SIST」と表記します.また,ページ数は Kindle版のものです(紙版は持ち合わせていません).購入履歴を見ると,2019年9月末に私は購入していました.何のきっかけで同書を購入したかは不明です.

なお,このブログ記事全体を通じて,取り上げた仮想例は,簡単のため,<観測値が,分散既知の独立同一正規分布に従っている>という前提を置いています.そして,分析者は,この真の状態を知っており,母平均だけが未知だとします.より現実的な例については,今後の課題としたいと思います.

 

厳しいテストの大まかな方針

Mayo先生の「厳しいテスト」は,<ある主張をしたい時には,生ぬるいテストに合格しただけでは駄目で,その主張が間違っているときには高い確率で「間違っている!」と検出できるテスト(=厳しいテスト)に合格しないといけない>という考えに基づいてると,私は解釈しています.

私がそう思うのは,SISTのp.xiiにて,次のように説明されているからです.

A claim is severely tested to the extent it has been subjected to and passes a test that probably would have found flaws, were they present.

拙訳:「もし誤りがあれば,その誤りを高い確率で見つけるであろうテストにかけられて,そして,合格したとき,その主張は厳しくテストされた[と言う].」

この「厳しさ」という用語はPopperから来ているようです.SISTのp.9に次のように書かれています.

The term “severity” is Popper’s, though he never adequately defined it.

拙訳:「この用語「厳しさ」は,Popperの用語である.ただし,Popperは,この用語を適切に定義しなかった.」

 

厳しいテストを提案した動機?

SISTの前書きを読む限り,第1に統計学における各派閥間の論争(「統計学戦争」とMayo先生が呼ぶもの)に決着を付けるために,第2に大規模データに対する妥当なテストを提案するため(従来の統計的検定では,検出力が高くなるため,ちょっとの差でも有意となる)との動機があったようです.

そのような動機を読む限り,SISTは,統計学の現状を記述するというよりも,科学哲学の立場から「テストとはこうあるべき」という「べき」論を提案しているのだと思われます.

 

科学哲学者による初心者用講義

私自身がSISTを直接,読んで,誤り統計学や厳しいテストを(私なりに)理解したのではないはずです.

2020年1月に松王政浩先生による「統計学の哲学を理解するために」という初心者用の講義があり,その講義を私は受講いたしました.

同講義において,誤り統計学や厳しいテストが初心者向けに解説されました.そこでの解説が,私の解釈の土台だと思います(ただし,私が松王先生の解説を誤解せずに理解できている自信はまったくありません).

 

Rのseverityパッケージ

松王先生の講義とSISTの摘み読みにより,厳しいテストの大まかな方針は(私なりに)なんとなく分かりました.

それらの知識に加え,ごく最近(2021年9月2日)に,Rにseverityパッケージというものがあることを知りました.

ある限られた仮想例(正規分布で分散既知の場合における一標本母平均の検定)において,厳しいテストをどのように利用するかは,このseverityパッケージを通じて知りました.なお,見直してみると,上記の松王先生の講義テキストにも計算手順がかなり細かく解説されていました.

severityパッケージは,以下のサイトにおいて公開されています.

cran.r-project.org

TwitterでのMayo先生へのメンション

最初にRのseverityパッケージを動かして見たところ,単に事後的に検出力を求めているだけだと私は勘違いしました.Twitterにて,<このseverityパッケージは,事後的検出力をしているだけだ.事後的検出力を求めることは,統計学では冗長だとされている>とのメンションをTwitterにてMayo先生に投げました.

この誤解は私がSISTを読んでなかったためだけから来た誤解であり,また,Mayo先生の本を読んでいない人がよくする誤解のようです.<SISTの5.5節を読んでくださいね>との返信をMayo先生からいただきました.

実際,SISTの5.5節を読んでみると,標本平均に対して検出力(に相当するもの)をプロットするのではなく,母平均の仮説値に対して検出力(に相当するもの)をプロットしているので,事後的な検出力とは違うことが理解できました.

(なお,この後,このseverityパッケージで行っていることは,p値関数や竹内先生の手法に関連するのではないかと私は返信しました.)

 

ポピュラー統計学における統計的検定について

分散既知の独立同一正規分布での一標本母平均に対する検定という仮想例で,統計的検定にどのように厳しいテストを付随させるかは,SISTのp.347あたりにて

  • "SIN (Severity Interpretation for Negative Results)"および
  • "SIR (Severity Interpretation for Significant Result)"

として解説されています.以下,通常の統計的検定を発展させて,厳しいテストを付随させたものを,便宜的に「SEV検定」と呼ぶことにします.

 

SEV検定を見ていく前に,まず,ポピュラー統計学において統計的検定がどのように使われているかを確認しておきましょう.現在のポピュラー統計学の王道が何かであるかを特定するのは難しいですが,ハウツー本で私がたびたび見かけるパターンは,次のような手順です.

  1. 点仮説の帰無仮説  H_0: \mu = \mu_0を立てる.
  2. 両側p値を計算する.
  3. p値が小さければ帰無仮説を否定し,p値が大きければ結論を保留する.

以下,この手順を「ポピュラー検定」と便宜的に呼ぶことにします.このポピュラー検定の最大の特徴は,「帰無仮説を否定する」か「結論を保留する」かの2通りしか結論がない点です.

 

SEV検定の概略:ポピュラー検定との違い

前節のポピュラー検定に対して,SEV検定では,結論はざっくりと4通りあります(...と思います...).

  1. 検定が有意ではなく,厳しさもない場合
  2. 検定は有意ではないが,厳しさはある場合
  3. 検定は有意だが,厳しさはない場合
  4. 検定が有意であり,厳しさもある場合

ポピュラー検定とSEV検定が異なってくるのは,まず,上記「2. 」の「有意ではないが,厳しさはある場合」です.この場合,ポピュラー検定では結論を保留することしか行いません.一方,SEV検定では,帰無仮説を(ある厳しさの基準のもとで)支持します(...と思います...私が勘違いしていなければ...).

また,上記「3. 」の「検定は有意だが,厳しさはない場合」でもポピュラー検定とSEV検定は異なってきます.この場合,ポピュラー検定では帰無仮説を否定します.一方,SEV検定では,厳しさがないものとして,(ある厳しさの基準のもとで)対立仮説を支持しません(...と思います... 私が勘違いしていなければ...).

 

SEV検定の概略:基本的方針

この節の説明は,かなり私の想像が入っています.いちいち,「...と思います」を文末に付けるのは面倒なので断定調で書きますが,話半分で読んでください.

厳しいテストとは,<ある主張が間違っていたら,その主張が間違っていることを高い確率で検出するようなテスト>でした.SEV検定は,通常の統計的検定に,この厳しいテストを付随させたものです.

 

SEV検定では,まず(両側検定ではなく)片側検定を設定します.そして,

  • p値が大きくて,かつ,ある基準の厳しいテストを合格すれば,(その厳しさの基準のもとで)帰無仮説を支持する
  • p値が小さくて,かつ,ある基準の厳しいテストを合格すれば,(その厳しさの基準のもとで)対立仮説を支持する

という手順を踏みます.

仮想例での計算手順

ここでの「厳しさ」(SEV)に対する説明は,SISTや松王先生講義でのものと特に大きく違います.また,記号も異なります.

 

仮想例として,SISTと同じように,分散既知の独立同一正規分布における一標本母平均を取り上げます.データ生成過程を X_i \sim N(\mu, \sigma^2), i.i.d. \ (i = 1, \dots, n)とし,分析者は,このデータ生成過程のなかで \muだけが未知であり,他は全部,既知であると仮定します.

 

ステップ1:まず,次のような帰無仮説 H_0 と対立仮説 H_1を設定して,p値を計算します.片側検定である点に注意してください.

  •  H_0: \mu \le 0
  •  H_1: \mu \gt 0

ここでは説明のため仮説値(仮説における右辺の値)をゼロとしましたが,ゼロでなくても構いません.

 

ステップ2-1:ステップ1のp値がある閾値より大きい場合(つまり,ステップ1で有意でない場合)には,次のような新たな仮説に対する検定のp値を \mu_1を動かしながら計算します.

  •  H_0: \mu \gt \mu_1
  •  H_1: \mu \le \mu_1

この新たな検定のp値を, p_1(\mu_1)と表します. p_1(\mu_1)が小さければ, H_1: \mu \le \mu_1と主張できることを意味します.この時の厳しさ  SEV(\mu \le \mu_1)は,1からこのp値を引いた

  •  SEV(\mu \le \mu_1) = 1 - p_1(\mu_1)

と定義されます.厳しさ SEV(\mu \le \mu_1)がある値cであれば,「 SEV(\mu \le \mu_1) = cという厳しさのもとで, H_0: \mu \le 0と主張する」ことになります.

 

ステップ2-2:ステップ1のp値がある閾値以下の場合(つまり,ステップ1で有意な場合)には,次のような新たな仮説に対する検定のp値を \mu_1を動かしながら計算します.

  •  H_0: \mu \le \mu_1
  •  H_1: \mu \gt \mu_1

この新たな検定のp値を, p_2(\mu_1)と表します. p_2(\mu_1)が小さければ, H_1: \mu \gt \mu_1と主張できることを意味します.この時の厳しさ  SEV(\mu \gt \mu_1)は,1からこのp値を引いた

  •  SEV(\mu \gt \mu_1) = 1 - p_2(\mu_1)

と定義されます.厳しさ SEV(\mu \gt \mu_1)がある値cであれば,「 SEV(\mu \gt \mu_1) = cという厳しさのもとで, H_0: \mu \gt 0と主張する」ことになります.

既存の方法との関連性①:p値関数

この節の話は,SISTではまったく書かれていません.

前節で見たように,SEV検定は2ステップで構成されていました.SEV検定から1ステップ目をなくして,単に \mu_1に対して1 - SEVをプロットした曲線は,「p値関数」と呼ばれています.SEV検定とp値関数との関連性は,以下の論文で指摘されています.

bmcmedresmethodol.biomedcentral.com

 

なお,この仮想例においては(左右対称なので),片側検定のp値曲線を描いた時の, p(\mu_1) \ge 0.025(つまり, SEV(\mu_1) \le 0.975)となる範囲は,両側95%信頼区間を表します.

既存の方法との関連性②:多重決定方式

この節の話は,SISTではまったく書かれていません.

ここでSEV検定を,次のように単純化した手順を考えてみます.以下では,簡単のため,SEV(厳しさ)に対する閾値を0.975としています.

  • ステップ1は行わない.
  • ステップ2において,SEV(厳しさ)は \mu_1=0の時のものしか,つまり, SEV(\mu \le 0)および SEV(\mu \gt 0)しか計算しない.なお, SEV(\mu \le 0) = 1 - SEV(\mu \gt 0)である.
  • いずれかのSEVが0.975以上の時には,その主張をする.例えば, SEV(\mu \le 0) = 0.975であれば, \mu \le 0と主張する. 
  • いずれかのSEVも0.975未満の時には,結論を保留する.

このように単純化されたSEV検定を,「SEV0検定」と呼ぶことにします.このSEV0検定は,次の検定と同じです.

  • 帰無仮説 H_{A0}: \mu \le 0を検定する.
  • 帰無仮説 H_{B0}: \mu \gt 0を検定する.
  • 帰無仮説 H_{A0}に対する検定が2.5%有意ならば, \mu \gt 0と主張する.
  • 帰無仮説 H_{B0}に対する検定が2.5%有意ならば, \mu \le 0と主張する.
  • どちらの検定も,有意でなければ. -\infty \lt \mu \lt +\inftyと主張する(つまり,結論を保留する).

このSEV0検定は,2つの検定を行なっているのにも関わらず,全体の第1種の誤りを2.5%に制御できています.パラメータ空間全体を分割してそれらが互いに素である場合,それらの分割された空間の複数の帰無仮説を普通に検定しても,全体の第1種の誤りは保たれます.このような検定方法は,多重決定方式や分割方式(partioning)と呼ばれています.多重決定方式の初出は,竹内啓(1973)『数理統計学の方法的基礎』東洋経済新報社(第8章)です.

上記の多重決定方式(SEV0検定)では,結論としては,「 \mu \le 0」,「 \mu \gt 0」,「 -\infty \lt \mu \lt +\infty」の3種類しかありません.この結論を,全体の第1種の誤りを保ちながら,より狭くすることができます.詳しくは,竹内(1973)などに譲りますが,次のような信頼区間も,全体の第1種の誤りを保ちます.

 (\Theta_1 \cap C_1) \cup (\Theta_2 \cap C_2)

ここで,

  •  \Theta_1 = \{\mu \in \mathbb{R} | \mu \le 0\}
  •  \Theta_2 = \{\mu \in \mathbb{R} | \mu \gt 0\}
  •  C_1 = \{\mu \in \mathbb{R} | \mu \ge \bar{X} - z_{1-\alpha} \sigma/\sqrt{n}\}
  •  C_2 = \{\mu \in \mathbb{R} | \mu \le \bar{X} + z_{1-\alpha} \sigma/\sqrt{n}\}

です.

この信頼区間は通常の両側95%信頼区間よりも, \mu \gt 0を検出しやすく,片側検定 H0: \mu \le 0については同じ結論が得られる信頼区間となっています.しかも,「 H0: \mu \le 0」,「 H0: \mu \gt 0」,「 -\infty \lt \mu \lt +\infty」という信頼区間よりは狭くなっています.

実用上は,上記のようないびつな信頼区間は,ほぼ使われていません.

使われていない理由は,おそらく,第1に,計算がやや複雑なのがあると思います.より単純な普通の両側信頼区間の方が分かりやすいです.

第2に,多くの分野において,両側5%とした時には片側は2.5%にする慣習があると思います.計算上は,片側2.5%は,両側5%と2倍になるので,片側2.5%検定を両側5%検定にすると,検出力の点で損をします.しかし,少なくとも臨床試験の統計ガイドラインであるICH E9では,両側5%かつ片側2.5%であることが推奨されています.そのため,両側5%でも,おそらく,2.5%と2.5%の等確率な裾が使われることが多いと思います.(もちろん,両側5%といっても,例えばプラセボ対象試験でプラセボの方が勝っても,プラセボが新薬として認可されるはずは「常識的にだけ考えても」ありえません.よって,1つの臨床試験での実質的な有意水準は,ICE E9に従うならば,5%ではなく,2.5%です).そのため,実用上は,(両側5%ではなく)片側5%の検定および,それに対応したいびつな信頼区間を使う必要はなく(片側5%検定やいびつな信頼区間を使ってちょっとでも得をしようとすることはできず),両側5%を用いたので十分になっているのだと思います.

そう考えると,検定結果に付随して,p値関数をプロットしたり,両側95%信頼区間を求めたりしただけで十分な気も少しします.

 

この仮想例の計算で分からない点

ステップ2において,有意でない場合には H_1: \mu \le \mu_1 SEVを,有意な場合は H_1: \mu \gt \mu_1 SEVを求めますが,SISTのp.347では \mu_1に対する制約があり, \mu_1 \gt 0としています.一方,Rのseverityパッケージでは, \mu_1 \gt 0という制約は課していません.この食い違いが何であるかは,私はよく分かっていません.

 

実際にseverityパッケージを動かしてみよう!

この節では,とりあえず,Rのseverityパッケージを動かしてみることにします.

 

まず,ステップ1での H_0: \mu \le 0, H_1: \mu \gt 0の検定が,片側2.5%で有意とならなかった場合を見てみましょう.

library(severity)
mu0 <- 0; sigma <- 1; n <- 1; alpha <- 0.025; xbar <- c(-1)
(sev <- severity(mu0 = mu0, xbar = xbar, sigma = sigma, n = n, alpha = alpha))
plot(sev$discrepancy, sev$severity_acceptH0, type= 'l')

次のようなSEV曲線が描かれます.

f:id:Tarotan:20210926103347p:plain

グラフの見た目で, H_1:\mu \le 0.0に対する厳しさは,0.82ぐらいのようです.同じくグラフの見た目で, H_1: \mu \le  1.0に対する厳しさは,0.97ぐらいのようです.

上記の厳しさは,pnorm関数を使えば,簡単に計算できます.

pval <- pnorm(xbar/(sigma/sqrt(n)), mean = sev$discrepancy, sd = 1, lower.tail = TRUE)
severity <- 1 - pval
print(severity)

 

次に,ステップ1での H_0: \mu \le 0, H_1: \mu \gt 0の検定が片側2.5%で有意となった場合を見てみましょう(上記のプログラムにおけるxbarの値を-1から2に変更しました).

xbar <- c(2)
(sev <- severity(mu0 = mu0, xbar = xbar, sigma = sigma, n = n, alpha = alpha))
plot(sev$discrepancy, sev$severity_rejectH0, type= 'l')

 

f:id:Tarotan:20210926104649p:plain

この場合の厳しさも,pnorm関数を使えば簡単に計算できます.

pval <- pnorm(xbar/(sigma/sqrt(n)), mean = sev$discrepancy, sd = 1, lower.tail = FALSE)
severity <- 1 - pval
print(severity)

 

厳しいテストはハウツーとして吸収したのでは駄目

<誤り統計学や厳しいテストを理解する>ことは,その背景にある科学哲学的立場を理解することであり,Rパッケージが使えることではないと私個人は思います.

精神なきハウツーとして誤り統計学や厳しいテストの表面的な計算をなぞることは避けるべきだと私個人は思っています.精神なきハウツーは,むしろ知らない方がマシなことも多いでしょう.

一方で,このブログ記事での私は,SEV検定の表面的な計算手順をなぞっただけです.これは私がSISTを読んでいないからです.私自身が嫌悪している<精神なくハウツーとして技術を吸収する状態>になってしまっています.

おそらく,誤り統計学の精神を吸収するのは,科学哲学における膨大な知識と技術が必要であり,中学校程度の哲学の知識がない私が一朝一夕で理解できるものではないでしょう.

...ということで,こんなブログ記事を書く暇があったら,SISTを私はまずは読むべきです(...と思い続けて,はや2年?).読んでいないのに勧めるのはなんなのですが,是非SISTを(私のために)読んでください....

 

このブログ記事の内容は,他のブログ記事と同様,すべて筆者だけに責任があり,所属組織は一切の責任を負いません.