눈물 없이 베이지안 가설 테스트
표준 접근법에 내재된 문제를 겪지 않으므로 실제로 잘 작동하는 객관적인 베이지안 가설 검정:
설치 현재 등록되지 않은 상태에서 설치하려면 다음을 입력하십시오(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) = 베이지안 p-값(꼬리 영역)을 반환하여 세타에 대한 MC 샘플 제공
사후 추론:
update_mean(m1,m0,s1,s0,n1,n0) = 평균 = m0, sd = s0, 관측치 수를 갖는 가우스 사후 표본 1(또는 이전)의 경우. =n0, 평균 = m1, SD = s1, obs 수를 갖는 샘플 2에 대한 가우스 우도 또는 사후. = n1, 결합된 샘플 사후 평균의 튜플을 반환합니다. = m2, SD = s2, obs 수. = n2
marginal_posterior_mu(m,s, n, M) = return M은 평균 = m, SD = s, obs 수를 사용하여 Student-t 주변 후방 밀도에서 그립니다. = 엔. M은 선택적 인수입니다(기본값은 M = 10000).
blinreg(y,X) = 선형 모델 추정 y=Xβ+u(절편에 대한 1의 벡터를 포함하도록 X를 정의)
gsreg(y,X) = 기본적으로 정보가 없는 사전을 사용하는 선형 회귀를 위한 Gibbs 샘플러, 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 사전을 사용한 Gibbs 샘플러. 참고: iB0 = 사전 정밀도 행렬 = inv(사전 분산 행렬) b0은 열 벡터여야 하며, a0 및 b0은 tau ~ Gamma(a,b)에 대한 사전 매개변수입니다.
예 1: 표본 평균이 0인지 테스트
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)