涙のないベイズ仮説検定
客観的なベイジアン仮説検定は、標準的なアプローチに固有の問題が発生しないため、実際にうまく機能します。
インストール現在登録されていないため、インストールするには、(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) = シータの Student-t 事後オッズを返します
mcodds(theta_draws) = シータ (任意の分布) の MC サンプルが与えられた事後オッズを返します。
Bayespval(theta_draws) = シータの MC サンプルを与えるベイジアン p 値 (テール領域) を返します
事後推論:
update_mean(m1,m0,s1,s0,n1,n0) = ガウス事後サンプル 1 (またはそれ以前) の場合、平均 = m0、sd = s0、観測点の数。 =n0、サンプル 2 のガウス尤度または事後分布 (平均 = m1、SD = s1、観測数)。 = n1、結合サンプル事後平均のタプルを返します = m2、SD = s2、観測値の数。 = n2
marginal_posterior_mu(m,s, n, M) = return M は、平均 = m、SD = s、obs の数の Student-t 周辺事後密度から描画されます。 = n. M はオプションの引数です (デフォルトは M = 10000)。
blinreg(y,X) = 線形モデル y=Xβ+u を推定します (切片の 1 のベクトルを含むように X を定義します)
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
Lot_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)