R語言stan進行貝葉斯推理分析


原文連接:http://tecdat.cn/?p=6252

 

R的Stan


可以從許多統計軟件包中運行Stan。到目前為止,我一直在從R運行Stan,首先按照快速入門指南中的說明安裝並運行所有內容。

 

簡單線性回歸


第一步是為Stan模型編寫文件。這包含一個文件linreg.stan:


 
data { int N;  [N] x; vector[N] y; } parameters { real alpha; real beta; real sigma; } model { y ~ normal(  + beta * x, sigma); }

該文件的第一部分稱為數據,它聲明了將作為輸入傳遞給Stan的標量,向量和矩陣。

接下來,我們可以通過運行以下R代碼來模擬數據集,並使用Stan和我們的文件linreg.stan來擬合模型:


 
set.seed(123) n <- 100 x <- rnorm(n) y <- x+ (n) mydata <- list(N = n, y = y, x= ) fit <- stan(file = 'linreg. ', data = mydata, iter = 1000,   = 4)

第一次安裝Stan模型時,模型編譯成C ++時會有幾秒鍾的延遲。然而,正如Stan的開發人員描述的那樣,一旦編譯了模型,就可以將其應用於新的數據集而無需重復編譯過程(在執行模擬研究的背景下具有很大的優勢。

在上面的代碼中,我們要求Stan運行4個獨立的鏈,每個鏈有1000次迭代。運行后,我們可以通過以下方式匯總輸出:


 
fit Inference for Stan model: linreg. 4 chains, each with iter=1000; warmup=500; thin=1; post-warmup draws per chain=500, total post-warmup draws=2000. mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat alpha -0.10 0.00 0.10 -0.29 -0.16 -0.10 -0.04 0.09 1346 1 beta 0.95 0.00 0.11 0.75 0.88 0.95 1.02 1.17 1467 1 sigma 0.98 0.00 0.07 0.85 0.93 0.98 1.03 1.12 1265 1 lp__ -47.54 0.06 1.24 -50.77 -48.02 -47.24 -46.68 -46.17 503 1 Samples were drawn using NUTS(diag_e) at Mon Jun 08 18:35:58 2015. For each parameter, n_eff is a crude measure of effective sample size, and Rhat is the potential scale reduction factor on split chains (at convergence, Rhat=1).

對於回歸斜率β,我們的后驗均值為0.95(接近用於模擬數據的真實值1)。為了形成95%的后可信區間,我們簡單地采用取樣后部的2.5%和97.5%的百分位數,這里是0.75到1.17。

您可以從擬合的模型中獲取各種其他數量。一種是繪制其中一個模型參數的后驗分布。要獲得回歸斜率,我們可以執行以下操作:


 
result <- extract(fit) hist(result$beta)

β的后驗分布直方圖

現在讓我們使用標准普通最小二乘擬合線性模型:


 
summary(lm(y~x)) Call: lm(formula = y ~ x) Residuals: Min 1Q Median 3Q Max -1.9073 -0.6835 -0.0875 0.5806 3.2904 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -0.10280 0.09755 -1.054 0.295 x 0.94753 0.10688 8.865 3.5e-14 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.9707 on 98 degrees of freedom Multiple R-squared: 0.4451, Adjusted R-squared: 0.4394 F-statistic: 78.6 on 1 and 98 DF, p-value: 3.497e-14

這給出了我們對斜率0.95的估計,與Stan的后驗平均值相差2位小數,標准誤差為0.11,這與Stan的后驗SD相同。

stan和貝葉斯推理


有興趣探索Stan並使用它來執行貝葉斯推理,這是出於測量誤差和數據缺失的問題。正如多年前WinBUGS和其他人的作者所描述和展示的那樣,貝葉斯方法在解決不同的不確定性來源問題時非常自然,這些不確定性來源超出參數不確定性,例如缺失數據或用誤差測量的協變量。實際上,對於缺失數據的流行的多重插補方法是在貝葉斯范式內發展的,並且實際上可以被視為對完整貝葉斯分析的近似。

如果您有任何疑問,請在下面發表評論。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM