發病率的分層貝葉斯模型
Kevin Murphy 的書討論了一個經典的分層貝葉斯問題(最初在 中討論
Johnson and Albert, 1999, p24
):假設我們試圖估計癌症發病率 $ N $ 城市。在每個城市,我們抽樣了一些人 $ N_i $ 並測量患有癌症的人數 $ x_i \sim \text{Bin}(N_i, \theta_i) $ , 在哪裡 $ \theta_i $ 是城市的真實癌症發病率。
我們想估計 $ \theta_i $ 同時允許數據貧乏的城市從數據豐富的城市借用統計實力。
為此,他建模 $ \theta_i \sim \text{Beta}(a,b) $ 使所有城市共享相同的先驗,因此最終模型如下所示:
$ p(\mathcal{D}, \theta, \eta|N)=p(\eta)\prod\limits^N_{i=1}\text{Bin}(x_i|N_i, \theta_i)\text{Beta}(\theta_i|\eta) $
在哪裡 $ \eta = (a,b) $ .
這個模型的關鍵部分當然是(我引用),“我們推斷 $ \eta=(a,b) $ 從數據中,因為如果我們只是將其固定為一個常數,則 $ \theta_i $ 將是有條件獨立的,它們之間不會有信息流動”。
我正在嘗試在PyMC中對此進行建模,但據我所知,我需要先驗 $ a $ 和 $ b $ (我相信這是 $ p(\eta) $ 更多)。
這個模型有什麼好的先驗?
如果它有幫助,我現在擁有的代碼是:
bins = dict() ps = dict() for i in range(N_cities): ps[i] = pm.Beta("p_{}".format(i), alpha=a, beta=b) bins[i] = pm.Binomial('bin_{}'.format(i), p=ps[i],n=N_trials[i], value=N_yes[i], observed=True) mcmc = pm.MCMC([bins, ps])
在 Gelman,貝葉斯數據分析,(第 2 版,第 128 頁;第 3 版,第 110 頁)中討論了類似的問題。格爾曼建議先,這有效地限制了“先驗樣本量”,因此 beta 超先驗本身不太可能提供大量信息。(作為數量增長,β分佈的方差縮小;在這種情況下,較小的先驗方差會限制後驗數據的“權重”。)此外,此先驗不設置是否,或相反,所以適當的分佈對是從所有數據中推斷出來的,正如您在這個問題中所希望的那樣。
Gelman 還建議根據均值的 logit 重新參數化模型和先驗的“樣本量”。所以而不是做推斷直接,問題是關於轉換量的推斷和. 這允許在實平面上轉換的先驗值,而不是必須嚴格為正的未轉換的先驗值。此外,這實現了繪製時更加分散的後驗密度。這使隨附的圖表更加清晰,我覺得這很有幫助。