我必须根据Gamma(10,1)分布生成100个R大小为10的样本,然后为每个样本计算95%的后验间隔并将其绘制出来。我努力的最后一部分。 到目前为止,我使用了:
data = rgamma(n,10,1)
simdata = rgamma(n=100, 10, 1)
matrixdata = matrix(simdata, nrow=10, ncol=10)
quantile(matrixdata, HPD=TRUE, MM=TRUE, prob=0.95, plot=FALSE, PDF=FALSE)
但这似乎不起作用。 预先谢谢你,我真的很无聊。
答案 0 :(得分:1)
一个冗长的解决方案,但是在我工作时没有时间考虑使其效率更高:)对我来说,这是有道理的,除非我误解了您的问题...对于情节,可能还有一种使用ggplot2使其更干净的方法,但我是在循环中完成的...最后说明,Gamma分布具有几个可以使用的不同参数。我假设您指定Shape = 10,Rate =1。如果有任何问题让我知道!豌豆
no_simulations <- 100
n <- 10
shape <- 10
rate <- 1
set.seed(10)
empirical_quantile_intervals <- matrix(ncol = 2, nrow = no_simulations)
names(empirical_quantile_intervals) <- c("Q025", "Q975")
simulation_matrix <- matrix(nrow = no_simulations, ncol = n)
for (i in 1:no_simulations) {
simulation_matrix[i, ] <- rgamma(n = n, shape = shape, rate = rate)
empirical_quantile_intervals[i, 1] <- quantile(simulation_matrix[i, ], probs = 0.025)
empirical_quantile_intervals[i, 2] <- quantile(simulation_matrix[i, ], probs = 0.975)
}
plot(empirical_quantile_intervals[1, ], c(1,1), xlim = c(0, max(empirical_quantile_intervals)),
ylim = c(0, no_simulations), type="b",
xlab = "Quantile intervals",
ylab = "Simulation")
for(i in 2:no_simulations) {
lines(empirical_quantile_intervals[i, ], c(i,i), type="b")
}