貝葉斯假設檢驗無淚
客觀貝葉斯假設檢定不會遇到標準方法固有的問題,因此在實務上效果很好:
安裝目前尚未註冊,要安裝,請輸入以下內容(在 julia 提示字元下):
julia> ]
(v1.0) pkg> add https://github.com/tszanalytics/BayesTesting.jl.git
目前可用的功能(軟體包正在開發中)
新增的函數(詳細資訊請參閱 BayesTesting.jl_docs_2018.pdf) :Bayesian_ttest、correlation_ttest、compare_means、compare_proportions、equiv_test
假設檢定:
以下函數中的可選參數:h0= 船體假設中的值(預設為 h0 = 0)
pdr_val(theta_draws) = 返回後驗密度比(PDR,又稱後驗賠率)、tail_prob、2xtail_prob(「貝葉斯 p 值」)
todds(theta_hat,theta_hat_se,v) = 傳回 theta 的 Student-t 後驗賠率
mcodds(theta_draws) = 傳回給定 MC 樣本的 theta(任何分佈)的後驗賠率。
bayespval(theta_draws) = 傳回貝葉斯 p 值(尾部區域),給出 theta 的 MC 樣本
後驗推論:
update_mean(m1,m0,s1,s0,n1,n0) = 對於高斯後驗樣本 1(或先前),平均值 = m0,sd = s0,obs 數量。 =n0,樣本 2 的高斯似然或後驗,平均值 = m1,SD = s1,觀測數。 = n1,傳回組合樣本後驗平均值的元組 = m2,SD = s2,obs 數量。 = n2
margin_posterior_mu(m,s, n, M) = return M 從 Student-t 邊緣後驗密度中提取,平均值 = m,SD = s,obs 數量。 = n. M 是可選參數(預設值為 M = 10000)。
blinreg(y,X) = 估計線性模型 y=Xβ+u(定義 X 以包含截距的 1 向量)
gsreg(y,X) = 用於線性迴歸的吉布斯取樣器,預設無資訊先驗,X 必須包含包含截距的 1 向量。可選參數: tau = 精度起始值(預設 = 1.0) M = MCMC 樣本大小(預設 = 10,000)
gsreg(y,X, M=m, tau=t, b0=priorb, iB0 = invpriorcovb , d0=b, a0=a) = 具有 NIG 先驗的吉布斯取樣器。注意:iB0 = 先驗精確度矩陣 = inv(先驗變異數矩陣) b0 必須是列向量,a0 和 b0 是 tau ~ Gamma(a,b) 的先驗參數
範例 1:測試樣本平均值是否為零
using BayesTesting
srand(1235) # generate psuedo-data, n obs.
n = 50
x = randn(n)
v = n-1 # degrees of freedom
mu_hat = mean(x) # sample mean
se_mu = std(x)/sqrt(v) # sample standard error of mean
todds(mu_hat,se_mu,v) # posterior odds vs. zero
# Result: todds(mu_hat, se_mu, v, h0=0) = 1.016 => 1:1 odds against the null.
# with a nonzero mean - change the data generating process for x above to:
x = 0.5 + randn(n)
# Resulting posterior odds: todds(mu_hat, se_mu, v, h0=0) = 110.50 => 110:1 odds against the null
更詳細的幫助和範例位於: BayesTesting.jl_docs_2018.pdf
新增:compare_means和compare_proportions函數
很快就會加入為 PlotRecipe 來封裝函數。
function plot_mc_diff(draws_m1,draws_m2; lbl=["mu 1" "mu 2"],lgd = :topright)
diff_mean = draws_m1 - draws_m2
l = @layout([a b])
plt1 = plot(draws_m1,st=:density,fill=(0,0.4,:blue),alpha=0.4,label=lbl[1],legend=lgd,title="Posteriors from each mean")
plot!(draws_m2,st=:density,fill=(0,0.4,:red),alpha=0.4,label=lbl[2])
plt2 = plot(diff_mean,st=:density,fill=(0,0.4,:green),alpha=0.4,label="",title="Posterior difference")
vline!([0.0],color=:black,label="")
plt3 = plot(plt1, plt2, layout=l)
return plt3
end
plot_mc_diff函數的使用範例
m1 = 1.0; s1 = 0.8; n1 = 10; m2 = 0.0; s2 = 1.0; n2 = 20
diff_mean, draws_m1, draws_m2, qs, tst = compare_means(m1, m2, s1, s2, n1, n2)
plt = plot_mc_diff(draws_m1,draws_m2)