我了解如何从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
有什么方法可以索引和提取上面显示的“输出”表中的元素?
答案 0 :(得分:1)
如果您只希望使用平均值,则get_posterior_mean
函数将起作用。否则,可以将print(fit1)
或summary(print1)
的结果分配给一个对象,可以从该对象中提取内容,但是最好执行as.matrix(fit1)
或as.data.frame(fit1)
并计算结果栏上您想要的任何内容。