繁体   English   中英

从Stan输出表中提取平均参数估计值

[英]Extracting Mean Parameter Estimates from Stan Output Table

我知道如何从Stan模型中提取链,但是我想知道是否有任何快速方法可以提取默认Stan输出表上显示的值。

这是一些玩具数据

# simulate linear model
a <- 3 # intercept
b <- 2 # slope

# we can have both the predictor and the noise vary
x <- rnorm(28, 0, 1)
eps <- rnorm(28, 0, 2)
y <- a + b*x + eps

我们分析哪个

mod <- lm(y ~ x, df)

我们可以从中提取系数

mod$coefficients

# (Intercept)           x 
#    3.355967    2.151597 

我想知道是否有任何办法可以对Stan输出表进行等效处理

# Step 1: Make List
data_reg <- list(N = 28, x = x, y = y)

# Step 2: Create Model String
write("
      data {
      int<lower=0> N;
      vector[N] x;
      vector[N] y;
      }
      parameters {
      real alpha;
      real beta;
      real<lower=0> sigma;
      }
      model {
      vector[N] mu;
      sigma ~ cauchy(0, 2);
      beta ~ normal(0,10);
      alpha ~ normal(0,100);
      for ( i in 1:N ) {
      mu[i] = alpha + beta * x[i];
      }
      y ~ normal(mu, sigma);
      }
      ", file = "temp.stan")


# Step 3: Generate MCMC Chains
fit1 <- stan(file = "temp.stan",    
             data = data_reg,        
             chains = 2,             
             warmup = 1000,          
             iter = 2000,            
             cores = 2,               
             refresh = 1000) 

现在,当我们调用模型时

fit1

# Output
#         mean se_mean   sd   2.5%    25%    50%    75%  97.5% n_eff Rhat
# alpha   3.33    0.01 0.40   2.57   3.06   3.33   3.59   4.13  1229    1
# beta    2.14    0.01 0.40   1.37   1.89   2.14   2.40   2.98  1470    1
# sigma   1.92    0.01 0.27   1.45   1.71   1.90   2.09   2.51  1211    1
# lp__  -31.92    0.05 1.30 -35.27 -32.50 -31.63 -30.96 -30.43   769    1

有什么方法可以从上面显示的“输出”表中索引和提取元素?

如果您只想要均值,那么get_posterior_mean函数将起作用。 否则,可以将print(fit1)summary(print1)的结果分配给一个对象,可以从该对象中提取内容,但是最好只做as.matrix(fit1)as.data.frame(fit1)然后在结果列上计算您想要的任何内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM