心理学における理論の危機について

この記事は,Open and Reproducible Science Advent Calendar 2019の8日目の記事です。

事前登録はよくても不必要?

2019年の11月初めに,Aba SzollosiらのPreregistration is redundant, at bestというタイトルのプレプリントが出ました*1。事前登録は良くても不必要という感じの少々過激なタイトルということもあって,Brian Nosekがそれを以下のツイートで紹介をしてから,Twitter上で議論がなされていました。

心理学の再現性の問題に対しては,データ収集前に研究仮説やデータ収集・解析プランなどを事前に登録して,研究者がデータ取得後に不適切な研究実践をしないように研究者の自由度を奪うことが重要とされています。しかし,"Preregistration is redundant, at best"論文では,科学が理論を作って磨くものであるなら,事前登録はそれには直接的には寄与しない(するとしてもあまり関係ないから無駄)と主張しています。心理学の場合,理論と統計モデルは密接に関与するので,理論がグズグズだと事前登録してもだめというのはそのように思えますし,事前登録していることだけで論文の価値が高いとするのは微妙ではないかという主張には納得できる部分もあります。

この議論が沸き起こった直後にDaniel Lakensが心理学評論の草稿を彼のブログ The 20% Statisticianにアップして(心理学評論のプレプリントは,こちら),事前登録の有用性はその研究がよってたつ科学哲学に依存する点を指摘しています(なお,議論の中で,MayoのSevere Testを参照しつつ論じており勉強になります)。さらに,Eric-Jan Wagenmakersが彼のブログBayesianSpectaclesで,"Preregistration is redundant, at best"論文の1パラグラフごとにコメントをした上で,タイトルの過激さはともかく,論文の内容にはほぼ同意するとしています。しかし,事前登録不要といえるほど強い理論が心理学にはないのではないので,事前登録を使うことには意味があるのではないかと指摘しています。事前登録について議論する上では,よってたつ科学哲学や理論についても考慮することが重要といえます。

心理学の理論の危機

SzollosiらのPreregistration is redundant, at best論文でも指摘されているように,心理学の再現性の議論の中では理論の強さが度々出てきます。心理学には再現性の危機がある点は多くの心理学者の知るところとなりましたが,理論の問題についてはまだ関心が薄いのではないかと思います。このような心理学における理論の弱さと再現性の問題を理解する上で,Klaus OberauerとStephan Lewandowskyの"Addressing the theory crisis in psychology"論文*2の枠組みは非常に有用です。そこで,本記事では,"Addressing the theory crisis in psychology"論文の概要についてRコードとともに紹介します。

link.springer.com

理論検証研究(Theory-testing research)と発見志向研究(Discovery-oriented research)

まず," Addressing the theory crisis in psychology"論文では,理論,仮説,データとの関係を以下の図(元論文のFig.1をもとに作成しました)のように整理しています*3。理論は仮説の設定をする上で示唆を与えるものになります。そして,仮説を設定した上でデータを収集し,そのデータによって仮説の補強(支持)・修正,さらに理論の補強(支持)・修正をします。データの結果から,直接理論について議論することがありますが,仮説を挟んでいることを意識するのは重要です。OberauerとLewandowskyは,理論と仮説とのやりとりは理論的レベル,仮説とデータのやりとりは実証レベルと呼びます。理論と仮説との関係は論理的に検証されるもので,仮説とデータとの関係は経験的に検証されるものになります。そして,理論の強さというのは,理論から仮説が導かれる際のリンクの強さになります。OberauerとLewandowskyは,その理論から仮説が導かれる際のリンクの強さによって,理論検証研究(Theory-testing research)と発見志向研究(Discovery-oriented research)に分けて検討を行っています。理論検証研究は,理論と仮説のリンクが強く,理論から導かれた仮説は事実に違いない(must be the case)というものです。一方,発見志向研究は,理論と仮説のリンクが弱く,理論から導かれた仮説は事実になり得る(can be the case)というものです。

f:id:cpp-laboratory:20191206084200p:plain

上記の図に" Addressing the theory crisis in psychology"論文にある数式を追加したのが以下の図です(元論文のFig.1とTable2と3をもとに作成しました)。まず,理論検証研究と発見志向研究の違いは理論から仮説を推測する際のリンクの強さでしたが,それは,以下の図のP(H|T)とP(H|¬T)になります。P(H|T)は理論Tが正しい場合の仮説Hの確率,P(H|¬T)は理論Tが正しくない場合の仮説Hの確率です。P(H|T)が高いほど,理論検証研究になります。そして,仮説HからデータDが得られる確率を推測する場合は,P(D|H)やP(D|¬H)を使いますが,P(D|H)は検定力,P(D|¬H)は有意確率になります。そして,これらが準備できたら,仮説を支持するデータDが得られた時の仮説の確率P(H|D)や仮説Hが正しい場合の理論Tの確率P(T|H)はベイズの定理から計算できます。最後に,P(H|D)とP(T|H)をまとめて,仮説を支持するデータが得られた時の理論Tの確率P(T|D)を求めることもできます。ちょっと図に書き込まれた数式に「うっ」となるかもしれないですが,結構単純ですし,統計的検定をまた違った観点から見ることができるので,新鮮かと思います。

f:id:cpp-laboratory:20191207174617p:plain

さて,図の左側のP(H|T),P(H|¬T),P(D|H),P(D|¬H)やP(T)を設定すれば,データDの下での仮説Hや理論Tの確率を計算できます。その計算をするR関数compute_prob_theory を以下のように作成してみました(tidyverseパッケージがRにインストールされていれば,以降のコードをRコンソールにコピペして実行することで,結果が再現できると思います)。

library(tidyverse)

compute_prob_theory <- function(pH_Ttrue, 
                          pH_Tfalse,
                          alpha = 0.05,
                          power = 0.8,
                          pT = 0.5){
  pT_Htrue = (pH_Ttrue*pT)/(pH_Ttrue*pT+pH_Tfalse*(1-pT))  
  pT_Hfalse = ((1-pH_Ttrue)*pT)/((1-pH_Ttrue)*pT+(1-pH_Tfalse)*(1-pT))
  pH = pH_Ttrue*pT + pH_Tfalse*(1-pT)
  pH_Dtrue =  (power*pH)/(power*pH + alpha*(1-pH))
  pT_Dtrue =  pT_Htrue*pH_Dtrue+pT_Hfalse*(1-pH_Dtrue)
  pH_Dfalse = ((1-power)*pH)/((1-power)*pH + (1-alpha)*(1-pH))
  pT_Dfalse = pT_Htrue*pH_Dfalse+pT_Hfalse*(1-pH_Dfalse)
  return( list(pH_Dtrue=pH_Dtrue, 
               pT_Dtrue=pT_Dtrue,
               pH_Dfalse=pH_Dfalse,
               pT_Dfalse=pT_Dfalse) )
}

理論検証研究の例

早速,関数を使ってみましょう。まず," Addressing the theory crisis in psychology"論文にある理論検証研究の例を計算してみます。P(H|T)を1.0(compute_prob_theory関数の引数のpH_Ttrue を 1に),p(H|¬T)を0.2(compute_prob_theory関数の引数のpH_Tfalseを0.2に)に設定して計算します。P(H|T)が1.0,つまり100%なので,理論から非常に高い確率で仮説を導ける場合です。なお,α=0.05, 1-β=0.8, P(T)=0.5(つまり,理論が正しい確率は50%で,正しいとも間違っているともいえない)に設定しています。

compute_prob_theory(pH_Ttrue = 1,pH_Tfalse = 0.2)

計算結果は以下のようになります。理論から非常に高い確率で仮説を導ける場合,仮説通りのデータDが得られた時の仮説Hが正しい確率は(pH_Dtrue)96%で,理論Tが正しい確率は(pT_Dtrue)80%になります。どちらも高い確率ですね。

$pH_Dtrue [1] 0.96

$pT_Dtrue [1] 0.8

$pH_Dfalse [1] 0.24

$pT_Dfalse [1] 0.2

発見志向研究の例

次に,論文にある発見志向研究の例を計算してみます。P(H|T)を0.1(引数のpH_Ttrue を 0.1),p(H|¬T)を0.02(引数のpH_Tfalseを0.02)に設定して計算します。P(H|T)が0.1,つまり10%なので,理論から仮説を導ける確率は低いです。

compute_prob_theory(pH_Ttrue = 0.1,pH_Tfalse = 0.02)

計算結果は以下のようになります。理論から仮説を導ける確率が低い場合,仮説通りのデータDが得られた時でも,仮説Hが正しい確率は(pH_Dtrue)51%で,理論Tが正しい確率は(pT_Dtrue)66%になります。最初に,P(T)=0.5にしているので,データが得られても,理論の確率は大きな変化をしていません。理論から仮説を導ける確率が低い場合,支持するデータが得られてもチャンスレベルの評価になるというのはなかなかびっくりな結果かもしれません。

$pH_Dtrue [1] 0.5052632

$pT_Dtrue [1] 0.6578947

$pH_Dfalse [1] 0.01325967

$pT_Dfalse [1] 0.4834254

この計算結果からも分かるように,同じ仮説Hを支持するようなデータDが得られたとしても,理論Tから仮説Hが導かれる確率が低いと(仮説と理論との推論リンクが弱いと),仮説や理論が正しいとする確率が低くなります。

なお,理論検証研究と発見志向研究と分けていますが,理論から仮説を導く確率は連続的なものなので,明確に分けられるものではありません。以下では,P(H|T)を0.1から1.0まで変化させた時の仮説を支持するデータDが得られた時の理論の確率(P(T|D))と仮説を支持しないデータDが得られた時の理論の確率(P(T|¬D))をプロットしています(論文のFig2の右の図に対応します)。

pH_Ttrue = seq(0.1,1,by = 0.1)
pH_Tfalse = seq(0.02,0.2,by = 0.02)
data <- compute_prob_theory(pH_Ttrue,pH_Tfalse)
plot_data <- data.frame(pH_Ttrue=c(pH_Ttrue,pH_Ttrue),
                        pT_D = c(data$pT_Dtrue,data$pT_Dfalse),
                        Data = rep(c("D_True","D_False"),each=10))

plot_data %>% 
  ggplot(aes(x = pH_Ttrue,y = pT_D, color = Data)) +
  geom_line() + geom_point() + 
  ylim(0,1) + labs(y="P(T|Data)", x = "P(H|T)")

f:id:cpp-laboratory:20191208044550p:plain

図を見ても明らかなように,理論と仮説とのリンクが強いほど,データから理論の正しさ(誤り)を主張することができます。理論と仮説とのリンクが強い研究を行うことが必要といえます。理論と仮説とのリンクが弱い発見志向研究が多いことが心理学の再現性の問題を引き起こしているのでないかとOberauerとLewandowskyは指摘しています。

追試か第2の仮説の検討か?

OberauerとLewandowskyは,再現性の危機に対する改善策(厳しい有意水準の採用,検定力の大きな直接的追試,オープンデータ,探索と確証分析を分ける,事前登録)のそれぞれについて,上記の枠組みから検討を加えています。その中から,以下では,理論検証研究と発見志向研究において,追試もしくは理論から導ける別の仮説(第2の仮説)の検討を行うことで理論の正しさに関する確率がどのように変わるのか検討した内容を紹介します。上で作成したR関数compute_prob_theoryに,論文のTable4の計算を追加したcompute_prob_theory_rep関数を以下のように作成しました。compute_prob_theory_rep関数では,データD1を収集した後で追試した場合の理論が正しい確率とデータD1を収集した後で別の仮説(第2の仮説)のデータD2を収集した場合の理論が正しい確率を計算します。

compute_prob_theory_rep <- function(pH_Ttrue, 
                                pH_Tfalse,
                                alpha = 0.05,
                                power = 0.8,
                                pT = 0.5){
  pT_Htrue = (pH_Ttrue*pT)/(pH_Ttrue*pT+pH_Tfalse*(1-pT))  
  pT_Hfalse = ((1-pH_Ttrue)*pT)/((1-pH_Ttrue)*pT+(1-pH_Tfalse)*(1-pT))
  pH = pH_Ttrue*pT + pH_Tfalse*(1-pT)
  pH_Dtrue =  (power*pH)/(power*pH + alpha*(1-pH))
  pT_Dtrue =  pT_Htrue*pH_Dtrue+pT_Hfalse*(1-pH_Dtrue)
  pH_Dfalse = ((1-power)*pH)/((1-power)*pH + (1-alpha)*(1-pH))
  pT_Dfalse = pT_Htrue*pH_Dfalse+pT_Hfalse*(1-pH_Dfalse)
  # replication
  pH_D_rep =  (power*pH_Dtrue)/(power*pH_Dtrue + alpha*(1-pH_Dtrue))
  pT_D_rep =  pT_Htrue*pH_D_rep+pT_Hfalse*(1-pH_D_rep)
  # 2nd Hypothesis(Y)
  pH2 = pH_Ttrue*pT_Dtrue+pH_Tfalse*(1-pT_Dtrue)
  pH2_D2true = (power*pH2)/(power*pH2 + alpha*(1-pH2))
  pT_D1true_H2true = (pH_Ttrue*pT_Dtrue)/(pH_Ttrue*pT_Dtrue+pH_Tfalse*(1-pT_Dtrue))
  pT_D1true_H2false = ((1-pH_Ttrue)*pT_Dtrue)/((1-pH_Ttrue)*pT_Dtrue+(1-pH_Tfalse)*(1-pT_Dtrue)) 
  pT_D1_2true =  pT_D1true_H2true*pH2_D2true + pT_D1true_H2false*(1-pH2_D2true)
  return( list(pT_Dtrue=pT_Dtrue,
               pT_D_rep=pT_D_rep,
               pT_D1_2true = pT_D1_2true) )
}

発見志向研究で追試,第2の仮説の検討をしたら?

上記と同じように,理論から仮説を導ける確率P(H|T)が0.1と低い場合において,追試と第2の仮説を検証した場合の理論の正しさの確率を計算します。今回は,理論の正しさの確率P(T)を0から0.9まで変化させてプロットしています。プロットをみると,オリジナルの研究だけよりも追試や第2の仮説の検証もした方が,支持するデータが得られた場合の理論の正しさの確率が高くなります。この結果から,発見志向研究では追試や第2の仮説は重要であることがわかります。

pT = seq(0,0.9,by = 0.1)
data_rep1 <- compute_prob_theory_rep(pH_Ttrue=0.1,pH_Tfalse=0.02,pT=pT)

plot_data1 <- data.frame(pT=c(pT,pT,pT),
                        pT_D = c(data_rep1$pT_Dtrue,data_rep1$pT_D_rep,data_rep1$pT_D1_2true),
                        Data = rep(c("Original","Replication","2nd Hypothesis"),each=10))

plot_data1 %>% 
  ggplot(aes(x = pT,y = pT_D, color = Data)) +
  geom_line() + geom_point() + 
  ylim(0,1) + labs(y="P(H|Data)", x = "P(T)")

f:id:cpp-laboratory:20191208044609p:plain

理論検証研究で追試,第2の仮説の検討をしたら?

次に,理論から仮説を導ける確率P(H|T)が1.0と高い場合において,追試と第2の仮説を検証した場合の理論の正しさの確率を計算します。発見志向研究と同様に,理論の正しさの確率P(T)を0から0.9まで変化させてプロットします。結果をみると,追試を追加したとしても,オジリナルな研究だけよりも,支持するデータが得られた場合の理論の正しさの確率はあまり高くなりません。その一方,第2の仮説の検証を追加することは,支持するデータが得られた場合の理論の正しさの確率を高くする結果になりました。この結果から,理論検証研究では追試よりも第2の仮説の検証が重要であることがわかります。

pT = seq(0,0.9,by = 0.1)
data_rep2 <- compute_prob_theory_rep(pH_Ttrue=1,pH_Tfalse=0.2,pT=pT)

plot_data2 <- data.frame(pT=c(pT,pT,pT),
                         pT_D = c(data_rep2$pT_Dtrue,data_rep2$pT_D_rep,data_rep2$pT_D1_2true),
                         Data = rep(c("Original","Replication","2nd Hypothesis"),each=10))

plot_data2 %>% 
  ggplot(aes(x = pT,y = pT_D, color = Data)) +
  geom_line() + geom_point() + 
  ylim(0,1) + labs(y="P(H|Data)", x = "P(T)")

f:id:cpp-laboratory:20191208044632p:plain

まとめ

今回は紹介ができませんでしたが,OberauerとLewandowskyは,有意水準を下げる(必要なサンプルサイズを大きくする)ことは理論検証研究ではあまり有効ではないが,発見志向研究では有効であることも示しています。それらも踏まえると,以下のように整理できます。

  • 理論が弱く,理論から十分に仮説を導けない場合は,発見志向研究を行う。発見志向研究では,理論の正しさについて議論するには,サンプルサイズを大きくすることと直接的追試が必要になる。

  • 理論が強く,理論から十分に仮説が導ける場合は,理論検証研究を行う。理論検証研究では,理論の正しさについて議論するには,直接的追試よりは第2の仮説の検証が重要になる。

" Addressing the theory crisis in psychology"論文は,簡単な仮定から理論・仮説・データの関係,さらには追試や第2の仮説検証の意義まで検討することができて,非常に面白いです。なお,この論文の内容に関する,以下のStephan Lewandowskyのトークを聴きに行きましたが,非常に面白かったです。

ただ,理論と仮説とのリンクが重要なことは分かるのですが,そのような理論の構築の仕方や理論から仮説を導く方法とはどういうものがあるのか実はよくわからないなあと感じています(そういう教育を受けた記憶があまり無いような・・・)。少なくとも自分のこれまでの研究実践を振り返ると,かなり発見志向的で理論検証的には進められてなかったように思います。心理学の再現性の議論は,実証レベルで議論されることが多いとは思いますが,今後は理論レベルでの検討が進み,その方法論の整備も進むと良いのではないかなあと期待しています。

一筋縄ではいかない話題ですが,心理学の研究実践が徐々に良いものになっていけばと思います。

Enjoy!

*1:Szollosi, A., Kellen, D., Navarro, D., Shiffrin, R., van Rooij, I., Van Zandt, T., & Donkin, C. (2019, October 31). Is preregistration worthwhile?. https://doi.org/10.31234/osf.io/x36pz

*2:Oberauer, K., & Lewandowsky, S. (2019). Addressing the theory crisis in psychology. Psychonomic Bulletin & Review. https://doi.org/10.3758/s13423-019-01645-2

*3:元の論文では仮説はX,データは"x"という表記にしてありました。仮説が複数ある場合などは論文の元の表記の方が扱いやすいですが,ちょっと混乱するので,今回は仮説はH,データはDという表記にしています。