从mcmc对象中提取系数

时间:2018-11-05 15:51:14

标签: r mcmc jags

从对象中提取东西一直是R对我来说最令人困惑的方面之一。我已经使用rjags拟合了贝叶斯线性回归模型,并具有以下mcmc对象:

summary(m_csim)
Iterations = 1:150000
Thinning interval = 1 
Number of chains = 1 
Sample size per chain = 150000 

1. Empirical mean and standard deviation for each variable,
   plus standard error of the mean:

            Mean        SD  Naive SE Time-series SE
BR2     0.995805 0.0007474 1.930e-06      3.527e-06
BR2adj  0.995680 0.0007697 1.987e-06      3.633e-06
b[1]   -5.890842 0.1654755 4.273e-04      1.289e-02
b[2]    1.941420 0.0390239 1.008e-04      1.991e-03
b[3]    1.056599 0.0555885 1.435e-04      5.599e-03
sig2    0.004678 0.0008333 2.152e-06      3.933e-06

2. Quantiles for each variable:

            2.5%       25%       50%       75%    97.5%
BR2     0.994108  0.995365  0.995888  0.996339  0.99702
BR2adj  0.993932  0.995227  0.995765  0.996229  0.99693
b[1]   -6.210425 -6.000299 -5.894810 -5.784082 -5.55138
b[2]    1.867453  1.914485  1.940372  1.967466  2.02041
b[3]    0.942107  1.020846  1.057720  1.094442  1.16385
sig2    0.003321  0.004082  0.004585  0.005168  0.00657

为了提取系数的均值,我做了b = colMeans(mod_csim)[3:5]。我想计算可信区间,因此也需要提取0.025和0.975分位数。我该如何以编程方式做到这一点?

3 个答案:

答案 0 :(得分:0)

我希望我不会超越自己的知识范围,但是我想从“总体”的角度而不是针对Rjags的角度回答。 m_csim是一个对象,可以在其上使用许多方法。您已使用summary方法查看了一些内容。正如人们评论的那样,可能有一种coef方法。但是,正如其他人评论的那样(在我答复时!),使用str()查看对象包含的内容是查看对象中包含哪些信息以及如何解决它的最佳方法。如果使用str()既不显示如何找到系数,又不显示有关置信区间的足够信息以使您找到所需的CI,我会感到非常惊讶。

答案 1 :(得分:0)

您可能可以直接提取分位数。正如其他人指出的那样,您可以调用str(m_csim),并且可以用str限制str(m_csim, max.level=1)调用的输出,并继续在max.level=参数中添加一个,直到您看到看起来像分位数的东西。

我想做的就是将MCMC输出转换为data.frame,以便于使用。我使用jagsUI而不是rjags,但是我经常做类似的事情

mcmc_df <- as.data.frame(as.matrix(MY_MCMC_OBJECT$samples))

注意:rjags可能有所不同,但是我敢肯定,您可以通过一点挖掘来找到它。

好处:然后,我可以为每个mcmc_df$PARAMETER访问单个向量,并使用

创建分位数矩阵
mcmc_quants <- apply(mcmc_df, 2, quantile, p=c(0.025, 0.25, 0.5, 0.75, 0.975))

或您想要的任何分位数。

答案 2 :(得分:0)

您可能正在寻找

model_summary_object <- summary(m_csim)
model_summary_object$quantiles[,c('2.5%','97.5%')]