You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于rstan::sbc的两项技术问询:样本提取与秩统计绘图

嘿,咱们一步步来解决你关于rstan::sbc的两个技术问题,附上示例代码,还有你提到的output$Y无有效数据的场景说明:

1. 是否可提取transformed data块中y = binomial_rng(N, pi_)生成的样本y?

当然可以!默认情况下,transformed data块生成的y样本会存在rstan::sbc返回对象的$Y字段里,你直接用output$Y就能提取,比如用head(output$Y)查看前几条数据。不过确实存在output$Y无有效数据的情况,后面我会详细说这个场景。

2. 是否可仅绘制用户指定参数的秩统计量?

rstan::sbc自带的绘图方法目前没有直接支持pars参数来筛选目标参数,但我们可以手动提取秩统计量数据,用ggplot2这类工具自定义绘制指定参数的图。比如你想只画pi和ppi的秩统计量,方法如下:

SBC示例代码(Stan模型+R运行脚本)

先写一个可用的二项分布SBC Stan模型(保存为binomial_sbc.stan):

data {
  int<lower=1> N;
  real<lower=0, upper=1> pi_;
}
transformed data {
  int y = binomial_rng(N, pi_); // 生成观测样本y
}
parameters {
  real<lower=0, upper=1> pi;
  real<lower=0, upper=1> ppi;
  real<lower=0, upper=1> pppi;
}
model {
  y ~ binomial(N, pi);
  ppi ~ beta(1, 1);
  pppi ~ beta(1, 1);
}

然后在R中运行SBC:

library(rstan)

# 设置SBC参数
模拟次数 <- 100 # SBC的模拟迭代次数
试验次数 <- 50 # 每次二项试验的次数

# 生成SBC所需的真实参数
真实参数 <- data.frame(
  pi_ = rbeta(模拟次数, 1, 1),
  N = rep(试验次数, 模拟次数)
)

# 运行SBC
output <- sbc(
  model_code = readLines("binomial_sbc.stan"),
  data = 真实参数,
  iter = 2000,
  warmup = 1000,
  chains = 1
)

场景:output$Y无有效数据的情况

当你的Stan模型违反了SBC的核心逻辑——也就是transformed data块里生成y的过程没有基于已知的真实参数时,就会出现output$Y无有效数据的情况。比如下面这个有问题的Stan模型:

data {
  int<lower=1> N;
}
transformed data {
  real pi_; // 错误:这里没有给pi_赋值!
  int y = binomial_rng(N, pi_);
}
parameters {
  real<lower=0, upper=1> pi;
}
model {
  y ~ binomial(N, pi);
}

这个模型里,transformed data块的pi_没有被赋值,Stan无法生成有效的y样本。虽然SBC可能不会直接报错,但output$Y里就没有可用的数据。

自定义绘制指定参数的秩统计量

如果只想绘制pi和ppi的秩统计量,可以用以下代码:

library(ggplot2)
library(reshape2)

# 提取目标参数的秩数据
目标秩数据 <- output$ranks[, c("pi", "ppi")]

# 转换为长格式方便分面绘图
长格式数据 <- melt(目标秩数据)

# 绘制直方图
ggplot(长格式数据, aes(x = value)) +
  geom_histogram(binwidth = 5, fill = "steelblue", alpha = 0.7) +
  facet_wrap(~variable, scales = "free_x") +
  labs(x = "秩统计量", y = "频数", title = "指定参数的SBC秩统计量分布") +
  theme_minimal()

内容的提问来源于stack exchange,提问作者Camford Oxbridge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:16:03