R語言RStan MCMC:NUTS采樣算法用LASSO 構(gòu)建貝葉斯線性回歸模型分析職業(yè)聲望數(shù)據(jù)|附代
原文鏈接:http://tecdat.cn/?p=24456
原文出處:拓端數(shù)據(jù)部落公眾號
最近我們被客戶要求撰寫關(guān)于RStan 的研究報(bào)告,包括一些圖形和統(tǒng)計(jì)輸出。
如果你正在進(jìn)行統(tǒng)計(jì)分析:想要加一些先驗(yàn)信息,最終你想要的是預(yù)測。所以你決定使用貝葉斯。
但是,你沒有共軛先驗(yàn)。你可能會花費(fèi)很長時(shí)間編寫 Metropolis-Hastings 代碼,優(yōu)化接受率和提議分布,或者你可以使用 RStan。?
Hamiltonian Monte Carlo(HMC)
HMC 是一種為 MH 算法生成提議分布的方法,該提議分布被接受的概率很高。具體算法過程請查看參考文獻(xiàn)。
打個(gè)比方:
給粒子一些動量。
它在滑冰場周圍滑行,大部分時(shí)間都在密度高的地方。
拍攝這條軌跡的快照為后驗(yàn)分布提供了一個(gè)建議樣本。
然后我們使用 Metropolis-Hastings 進(jìn)行校正。
NUTS采樣器(No-U-turn Sampler)
HMC,像RWMH一樣,需要對步驟的數(shù)量和大小進(jìn)行一些調(diào)整。
No-U-Turn Sampler "或NUTs(Hoffman和Gelman(2014)),對這些進(jìn)行了自適應(yīng)的優(yōu)化。
NUTS建立了一組可能的候選點(diǎn),并在軌跡開始自相矛盾時(shí)立即停止。
Stan 的優(yōu)點(diǎn)
可以產(chǎn)生高維度的提議,這些提議被接受的概率很高,而不需要花時(shí)間進(jìn)行調(diào)整。
有內(nèi)置的診斷程序來分析MCMC的輸出。
在C++中構(gòu)建,所以運(yùn)行迅速,輸出到R。
示例
如何使用 LASSO 構(gòu)建貝葉斯線性回歸模型。
構(gòu)建 Stan 模型
數(shù)據(jù):n、p、Y、X 先驗(yàn)參數(shù),超參數(shù)
參數(shù):

模型:高斯似然、拉普拉斯和伽瑪先驗(yàn)。
輸出:后驗(yàn)樣本,后驗(yàn)預(yù)測樣本。
數(shù)據(jù)
int<lwer=0> n;vectr[n] y;rel<loer=0> a;
參數(shù)
vetor[p+1] beta;real<lowr=0> siga;
轉(zhuǎn)換后的參數(shù)(可選)
vectr[n] liped;lnpred = X*bea;
模型
bta ~ dolexneial(0,w);siga ~ gama(a,b);
或沒有矢量化,
for(i in 1:n){y[i]~noral(X[i,]*beta,siga);}
生成的數(shù)量(可選)
vecor[n] yprict;for(i in 1:n){prdit[i] = nrmlrng(lnprd[i],siga);
對后驗(yàn)樣本的每一個(gè)元素都要評估一次這個(gè)代碼。
職業(yè)聲望數(shù)據(jù)集
這里我們使用職業(yè)聲望數(shù)據(jù)集,它有以下變量
教育:職業(yè)在職者的平均教育程度,年。
收入:在職者的平均收入,元。
女性:在職者中女性的百分比。
威望:Pineo-Porter的職業(yè)聲望得分,來自一項(xiàng)社會調(diào)查。
普查:人口普查的職業(yè)代碼。
類型:職業(yè)的類型
bc: 藍(lán)領(lǐng)
prof: 專業(yè)、管理和技術(shù)
wc: 白領(lǐng)
?在R中運(yùn)行
library(rstan)stan(file="byLASO",iter=50000)
?在3.5秒內(nèi)運(yùn)行25000次預(yù)熱和25000次采樣。
第一次編譯c++代碼,所以可能需要更長的時(shí)間。
繪制后驗(yàn)分布圖
par(mrow=c(1,2))plot(denty(prs$bea)

預(yù)測分布
plot(density)

鏈診斷
splas[[1][1:5,]

鏈診斷
trac("beta" )

鏈診斷
pa(pars="beta")

更多鏈診斷
Stan 還可以從鏈中提取各種其他診斷,如置信區(qū)間、有效樣本量和馬爾可夫鏈平方誤差。
鏈的值與各種鏈屬性、對數(shù)似然、接受率和步長之間的比較圖。
Stan 出錯(cuò)
stan使用的步驟太大。
可以通過手動增加期望的平均接受度來解決。
adapt_delta,高于其默認(rèn)的0.8
stan(cntl = list(datta = 0.99, mxrh = 15))
這會減慢你的鏈的速度,但可能會產(chǎn)生更好的樣本。
自制函數(shù)
Stan 也兼容自制函數(shù)。
如果你的先驗(yàn)或似然函數(shù)不標(biāo)準(zhǔn),則很有用。
model {beta ~ doubexp(0,w);for(i in 1:n){logprb(‐0.5*fs(1‐(exp(normalog(siga))/yde));}}
結(jié)論
不要浪費(fèi)時(shí)間編碼和調(diào)整 RWMH.
Stan 運(yùn)行得更快,會自動調(diào)整,并且應(yīng)該會產(chǎn)生較好的樣本。
參考文獻(xiàn)
Alder, Berni J, and T E Wainwright. 1959. “Studies in Molecular Dynamics. I. General Method.” The Journal of Chemical Physics 31 (2). AIP: 459–66.
Hoffman, Matthew D, and Andrew Gelman. 2014. “The No-U-Turn Sampler: Adaptively Setting Path Lengths in Hamiltonian Monte Carlo.” Journal of Machine Learning Research 15 (1): 1593–1623.

最受歡迎的見解
1.matlab使用貝葉斯優(yōu)化的深度學(xué)習(xí)
2.matlab貝葉斯隱馬爾可夫hmm模型實(shí)現(xiàn)
3.R語言Gibbs抽樣的貝葉斯簡單線性回歸仿真
4.R語言中的block Gibbs吉布斯采樣貝葉斯多元線性回歸
5.R語言中的Stan概率編程MCMC采樣的貝葉斯模型
6.Python用PyMC3實(shí)現(xiàn)貝葉斯線性回歸模型
7.R語言使用貝葉斯 層次模型進(jìn)行空間數(shù)據(jù)分析
8.R語言隨機(jī)搜索變量選擇SSVS估計(jì)貝葉斯向量自回歸(BVAR)模型
9.matlab貝葉斯隱馬爾可夫hmm模型實(shí)現(xiàn)