R 如何使用MCMCpack获得差异的后验值?
我正试图使用两个转换率之间的差异的R 如何使用MCMCpack获得差异的后验值?,r,bayesian,mcmc,R,Bayesian,Mcmc,我正试图使用两个转换率之间的差异的MCMCpack得到后验分布,类似于 我可以很好地得到两个采样率的后验值,但我正在努力实现采样增量。。有什么想法吗 编辑真正的增量(如果我们没有捏造数据,它将是未知的,并且是我们想要使用MCMC估算的)是两个比率true\u p\u a和true\u p\u b之间的差异,即0.01 # define true success rates true_p_a = 0.05 true_p_b = 0.04 # set sample sizes n_samples
MCMCpack
得到后验分布,类似于
我可以很好地得到两个采样率的后验值,但我正在努力实现采样增量。。有什么想法吗
编辑真正的增量(如果我们没有捏造数据,它将是未知的,并且是我们想要使用MCMC估算的)是两个比率true\u p\u a
和true\u p\u b
之间的差异,即0.01
# define true success rates
true_p_a = 0.05
true_p_b = 0.04
# set sample sizes
n_samples_a = 1000
n_samples_b = 1000
# fabricate some data
set.seed(10);
obs_a = rbinom(n=n_samples_a, size=1, prob=true_p_a)
set.seed(1);
obs_b = rbinom(n=n_samples_b, size=1, prob=true_p_b)
# what are the observed conversion rates?
mean(obs_a) #0.056
mean(obs_b) #0.042
# convert to number of successes
successes_a = sum(obs_a) #56
successes_b = sum(obs_b) #42
# calculate the posterior
require(MCMCpack)
simulations = 20000
posterior_a = MCbinomialbeta(successes_a ,n_samples_a, alpha=1, beta=1,mc=simulations)
posterior_b = MCbinomialbeta(successes_b ,n_samples_b, alpha=1, beta=1,mc=simulations)
posterior_delta = ????
posterior_density_a = density(posterior_a)
posterior_density_b = density(posterior_b)
# plot the posteriors
require(ggplot2)
ggplot() +
geom_area(aes(posterior_density_a$x, posterior_density_a$y), fill="#7ad2f6", alpha=.5) +
geom_vline(aes(xintercept=.05), color="#7ad2f6", linetype="dotted", size=2) +
geom_area(aes(posterior_density_b$x, posterior_density_b$y), fill="#014d64", alpha=.5) +
geom_vline(aes(xintercept=.04), color="#014d64", linetype="dotted", size=2) +
scale_x_continuous(labels=percent_format(), breaks=seq(0,0.1, 0.01))
你之所以挣扎,只是因为你没有完全采用贝叶斯思维。完全没关系,我刚开始的时候也有很多相同的概念问题。(这个问题太老了,所以你可能已经解决了) 贝叶斯后验密度包含关于模型参数分布的所有可用信息。因此,要计算模型任何参数的函数,只需根据后验分布计算每个绘图的函数。您不需要担心标准误差和渐近推断,因为您已经拥有了所需的所有信息 在这种情况下,因为参数之间的差异是一个常数,并且您有大量的数据,所以关于delta的不确定性很小。估计平均值为0.014,标准差(非SE)为.009 已完成分析的代码:
# define true success rates
true_p_a = 0.05
true_p_b = 0.04
# set sample sizes
n_samples_a = 1000
n_samples_b = 1000
# fabricate some data
set.seed(10);
obs_a = rbinom(n=n_samples_a, size=1, prob=true_p_a)
set.seed(1);
obs_b = rbinom(n=n_samples_b, size=1, prob=true_p_b)
# what are the observed conversion rates?
mean(obs_a) #0.056
mean(obs_b) #0.042
# convert to number of successes
successes_a = sum(obs_a) #56
successes_b = sum(obs_b) #42
# calculate the posterior
require(MCMCpack)
simulations = 20000
posterior_a = MCbinomialbeta(successes_a ,n_samples_a, alpha=1, beta=1,mc=simulations)
posterior_b = MCbinomialbeta(successes_b ,n_samples_b, alpha=1, beta=1,mc=simulations)
# Subtract the posterior deltas, look at empirical summaries and plot the empirical density function
posterior_delta = posterior_a - posterior_b
summary(posterior_delta)
require(ggplot2)
ggplot(data.frame(delta=as.numeric(posterior_delta)),aes(x=delta)) + geom_density() + theme_minimal()