r - cmdstanR:从 stan 模型拟合中提取绘图
问题描述
我正在尝试从 stan 模型中提取绘图。stan文件如下:
data {
int<lower=0> N;
int<lower=0, upper=1> obs_data[N];
}
parameters {
real<lower=0, upper=1> lambda;
}
model {
target += uniform_lpdf(lambda | 0,1);
for (n in 1:N) {
target += bernoulli_logit_lpmf(obs_data[n] | lambda);
}
}
我正在使用 cmdstanR 从模型中编译和采样。
dl <- list(N = 10, obs_data = c(1,0,1,1,1,0,0,1,1,1))
mod <- cmdstan_model("model.stan") // file pasted above
fit <- mod$sample(data, data = dl, num_chains = 4, num_cores = 4)
生成的拟合对象如下:
> fit$draws()
, , variable = lambda
chain
iteration 1 2 3 4
1 0.419819000 0.85642500 0.319154000 0.73338700
2 0.807612000 0.78189500 0.737518000 0.73338700
3 0.609196000 0.65826000 0.601450000 0.37992200
4 0.390631000 0.84544000 0.601450000 0.17992400
从 fit 对象(一个 R6 对象)中,我只想获取绘制变量值。我怎么做?
根据后续评论,我将添加有关 R6 对象内部结构的其他信息,以便更加清晰:
> str(fit$draws())
'draws_array' num [1:1000, 1:4, 1:2] 0.42 0.808 0.609 0.391 0.391 ...
- attr(*, "dimnames")=List of 3
..$ iteration: chr [1:1000] "1" "2" "3" "4" ...
..$ chain : chr [1:4] "1" "2" "3" "4"
..$ variable : chr [1:2] "lambda" "lp__"
解决方案
感谢@StéphaneLaurent 和@RomanLuštrik 的提示/建议,我能够得到我想要的。我正在寻找从 stan 中提取采样结果的值。
根据@RomanLuštrik 的建议,
str(fit$draws()),给出不同索引的映射;首先是“迭代”,然后是“链”,最后是“变量”。
因为我想为“lambda”参数(“变量”)提取抽奖;我可以通过
fit$draws()[,,1].
要从第 1 条和第 3 条链中抽取样本,以及参数“lambda”的前 25 个样本,我需要使用
fit$draws()[1:25,c(1,3),1]
推荐阅读
- javascript - 使用 async/await 和 firebase firestore 下载图像
- swiftui - SwiftUi - 通过函数更改视图
- flutter - Flutter - 自定义字体系列不适用于应用
- android - 防止关闭屏幕出现Android
- bash - Nethogs 测量的带宽与文件大小不匹配
- sas - 将数据从 sas 导出到 CSV 文件
- javascript - 在 Chrome DevTools 中的元素上触发的查看事件总是导致 zone.js 文件,我如何找到真正的代码?
- webrtc - RTCIceConnectionState.close 什么时候被解雇
- sockets - 当网卡收到数据时,网络中断处理程序会做什么?
- excel - 如何在 excel 中为 Pivot Cache 分配更多内存?