背景:私は社会心理学の博士号を取得しており、理論的な統計と数学は私の定量的な授業ではほとんどカバーされていません。学部と大学院を通して、私は(おそらく社会科学の多くの人と同じように)「古典的な」頻出主義の枠組みを通じて教えられました。今、私はまた、Rを愛し、メソッドの作業が行うことを確認するためにシミュレーション手法を使用しての道を数学的な証明よりも私には感覚的です(ここでも、理論的な統計ではなく、量的社会科学の背景)。頻度論的手法とシミュレーション手法を組み合わせることは、私にとって非常に意味のあることです。常連客は確率を長期的なオッズと見なしているためです(たとえば、これを任意の回数実行すると、50%の確率で発生し、50%の確率になります)。モンテカルロ法でこの長期をシミュレーションできます!
合併症:学部生以来、ベイズ法に非常に気づいていて、人生の中でベイズ側に電話をかけてくる人が常にいて、結果の解釈が簡単で、データの代わりに仮説の確率が得られると言ってきました仮説などを与えられました。私は本当にこれに夢中になって、ベイジアンクラスを取り、いくつかのベイジアンの本や論文を読み、現在はスタンとそれに関連するRパッケージにかなり精通しています。
Mayoに入る:「Bayesianはおそらく未来の道だ」としばらく考えた後、私はDeborah Mayoの統計的推論をSevere Testingとして読みました。彼女は本の最初でどちらか一方を選ぶことはないと言いますが、そうします:彼女は常習者であり、本の多くは頻出主義の方法論を擁護しています。私は、彼女が証拠を見る方法が有効であると私たちが考えるかどうかの議論に必ずしも入りたくありませんが、これは私に考えさせました:ベイズが宣伝されているすべては本当にですか?つまり、ベイズの群衆はそれ自体が分裂しているため、ベイジアンフレームワークでデータを分析するための「正しい」方法をよく知りません。通常、私は単に使用しますrstanarm
現在のポイントの推定値と信頼できる区間...これは、頻繁に頻度論者の推定値と信頼区間と一致します。私はモデル比較を行うかもしれませんが、ベイズ因子を事後確率比較などとして説明することは常に恐れています。
もっと考える:メイヨーの本を通して私がずっと考えていたのは次のとおりです。コンピュータを使用して頻出主義の方法を確実に機能させる方法があります。なぜなら、確率は長期的に見られるものであり、それをシミュレートできるからです。ベイジアンは、どの確率が実際にあるのかについてさえ合意することができないようです。それは、ベイジアンスクール(デフォルト、主観など)によって異なります。それが私の質問につながります:
質問:長期的に確率が確率として定義されていない場合、モンテカルロシミュレーション法を使用して、ベイズの方法が不確実性を適切に定義している(つまり、有効な信頼できる区間と事後分布を計算する)ことをどのように確認しますか?
例:データジェネレータを作成します。これは、0.5の確率でベルヌーイ分布からシミュレーションを行うだけです。
set.seed(1839)
p <- .50
n <- 100
gen_dat <- function(n, p) {
rbinom(n, 1, p)
}
ここで、ロジスティック回帰の信頼区間が実際に有効であることを確認したいとします。回帰を何度もシミュレートして、実際の母集団の値が95%の時間の95%信頼区間内にあることを確認できます。これは切片のみのモデルなので、p
正しく推定していることを確認したいだけです。
set.seed(1839)
iter <- 10000
results <- sapply(seq_len(iter), function(zzz) {
mod <- glm(gen_dat(n, p) ~ 1, binomial)
conf <- suppressMessages(confint(mod))
log(p / (1 - p)) < max(conf) & log(p / (1 - p)) > min(conf)
})
mean(results)
実行には数分かかりますが、最終的にはmean(results)
電話がかかってき0.9416
ます。これは約95%であり、glm
コマンドは不確実性を有効な方法で説明していると私は確信しています。私が上向きにiter
なり、ラップトップでここでもっと長く待ちたければ、それは95%で鼻の右側に近づいたと確信しています。
一方、同じことをベイジアンモデルで近似してみましょう。
library(rstanarm)
set.seed(1839)
dat <- data.frame(y = gen_dat(n, p))
stan_mod <- stan_glm(y ~ 1, binomial, dat)
summary(stan_mod)
一部、これは私に与えます:
Estimates:
mean sd 2.5% 25% 50% 75% 97.5%
(Intercept) -0.1 0.2 -0.5 -0.2 -0.1 0.0 0.3
mean_PPD 0.5 0.1 0.3 0.4 0.5 0.5 0.6
log-posterior -73.0 0.7 -75.1 -73.1 -72.7 -72.5 -72.5
ベイジアンは確率を長期的に見たものとして定義していないため、シミュレーション方法を使用stan_glm
して、不確実性を正確にキャプチャするよりも検証する方法を教えてください。つまり、シミュレーション方法を使用して、これらの信頼できる間隔が有効であることをどのように信頼できますか?現時点では、私は事前確率を定義することすらしていません。事前確率を含めることは、不確実性の測定に影響を与えるので、ここではどのように機能しますか?
スタンでハードルモデルコンポーネントを使用してベータ回帰を最初から作成しようとしたとき、誰かに「データをシミュレートします。何度も実行してください。真の推定値は、信頼できる95程度の間隔である必要があります。時間の割合。」しかし、私にとっては、ベイズ人が信じていることそのものに反対しています!それは確率論の常習的な理解に依存しています!では、ベイジアンはsummary()
、モデルの呼び出しから取得している信頼できる区間がシミュレーション手法を使用して不確実性を正確に記述しているとどのように私に納得させるでしょうか?
質問の目的:これは簡単な例ですが、多くの場合、クライアントから難しい問題が出てきます。また、慣れていないことを試すので、シミュレーション調査を頻繁に行って、自分のやっていることが有効であることを確認しています。スタンでカスタムモデルを作成する場合、自分のしていることが正当であることをどのようにして知ることができますか?シミュレーションメソッドを使用して、スタンで行っていることが実際に知りたいことを教えてくれることを確認するにはどうすればよいですか?