使用非統計學家的信念生成貝葉斯先驗估計的最佳方法是什麼?
我與許多定性研究人員和設計師一起工作。他們中的許多人與用戶互動,並就數據的外觀形成了強烈的、通常是準確的直覺。我經常嘗試量化他們的直覺,以便我們可以將他們的信念與新數據整合起來。
提出正確的問題很困難,而且我提出問題的方式會改變先驗的樣子。我有幾種不同的方法(主要用於比例):
- 押注不同假設的概率,然後將其轉化為貝葉斯因子
- X中有多少人會做Y?
- 我反過來問人們遇到虛假的新數據後他們的後驗信念是什麼(您可以據此估計他們的先驗)
顯然,這不是一項學術活動,而是一項旨在創造對新數據的參與的活動。
你會問那些不太了解統計數據的人甚麼問題才能準確地將他們的信念量化為貝葉斯先驗,以及你如何從他們的答案轉到先驗(R 代碼會很好)?
這是一個很好的問題。我將使用一個簡單的例子來說明我的方法。
假設我正在與需要為我提供高斯似然均值和方差的先驗信息的人一起工作。就像是
$$ y \sim \mathcal{N}(\mu, \sigma^2) $$
問題是:“這個人的先驗是什麼? $ \mu $ 和 $ \sigma^2 $ ?”
平均而言,我可能會問“給我一個你認為預期值可能的範圍”。他們可能會說“在 20 到 30 之間”。然後我可以自由地解釋它(也許是之前的 IQR $ \mu $ )。
現在,我將使用 R(或更可能是 Stan)來模擬可能的場景,以進一步縮小現實先驗的範圍。例如,我的同事說 $ \mu $ 介於 20 到 30 之間。現在我必須決定先驗 $ \sigma $ . 所以,我可以向他們展示以下內容並說“這四個中哪一個看起來更真實,為什麼?”
他們可能會說“第一個多變,後兩個精確。第二個看起來更逼真,但在25處太集中了!”
此時,我將返回並調整均值的先驗,同時縮小方差的先驗。
這被稱為“先驗預測檢查”——本質上是從先驗抽樣,以確保先驗實際上反映了知識的狀態。這個過程可能很慢,但是如果您的合作者沒有數據或統計專業知識,那麼他們對您有什麼期望呢?不是每個參數都可以給定一個平坦的先驗。
用於生成樣本的 Stan 代碼:
data{ real mu_mean; real mu_sigma; real sigma_alpha; real sigma_beta; } generated quantities{ real mu = normal_rng(mu_mean, mu_sigma); real sigma = gamma_rng(sigma_alpha, sigma_beta); real y = normal_rng(mu, sigma); }
用於生成圖形的 R 代碼
library(rstan) library(tidyverse) library(patchwork) make_plot = function(x){ fit1 = sampling(scode, data = x, algorithm = 'Fixed_param', iter = 10000, chains =1 ) t1 = tibble(y = extract(fit1)$y) p1 = t1 %>% ggplot(aes(y))+ geom_histogram()+ xlim(0,50) return(p1) } d1 = list(mu_mean = 25, mu_sigma = 1, sigma_alpha = 5, sigma_beta = 1) d2 = list(mu_mean = 25, mu_sigma = 1, sigma_alpha = 3, sigma_beta = 1) d3 = list(mu_mean = 25, mu_sigma = 1, sigma_alpha = 1, sigma_beta = 1) d4 = list(mu_mean = 25, mu_sigma = 1, sigma_alpha = .1, sigma_beta = 2) d = list(d1, d2, d3, d4) y = map(d, make_plot) reduce(y,`+`)