gpt4 book ai didi

r - stan/R 中的均匀分布导致抽样误差

转载 作者:行者123 更新时间:2023-12-01 23:52:53 28 4
gpt4 key购买 nike

我在学习rstan目前我正在解决 Gelman 的“贝叶斯数据分析”中的练习。作为引用,这是关于第 3 章中的示例 5。

它总是失败:

Initialization failed after 100 attempts.  
Try specifying initial values, reducing ranges of constrained values, or reparameterizing the model.
error occurred during calling the sampler; sampling not done

这是我的 R 代码:

library(rstan)
scode <- "
transformed data {
real o_data[5];
o_data[1] <- 10;
o_data[2] <- 10;
o_data[3] <- 12;
o_data[4] <- 11;
o_data[5] <- 9;
}

parameters {
real mu;
real<lower=0> sigma;
real tru_val[5];
}

model {
mu ~ uniform(0.0,20.0);
sigma ~ gamma(2,1);
for (i in 1:5) {
tru_val[i] ~ normal(mu,sigma);
tru_val[i] ~ uniform(o_data[i]-0.5, o_data[i]+0.5);
}
}
"

afit <- stan(model_code = scode, verbose=TRUE)

有趣的是 - 如果我将第二个 tru_val 采样更改为 tru_val[i] ~ normal(o_data[i],0.5);该模型将评估得很好。

到目前为止,我在 stan 代码中尝试过:

  • 重新排列抽样报表
  • 引入辅助变量
  • 明确写increment_log_p声明
  • 更改变量名以防我不小心使用了关键字
  • 在 stan 代码中添加打印语句
  • 将 mu 设置为 10
  • 放宽/扩大均匀分布的约束
  • 以及以上的组合

我注意到一些令人惊讶的事情,因为我打印了 tru_val 的值——无论语句的顺序如何——我让它打印了 0 左右的值,通常在 -2 和 +2 之间——即使我设置了 mu <- 10; sigma <- 1; (在数据部分)和抽样声明 tru_val[i] ~ uniform(9.5,10.5) .我真的不明白它是如何获得这些数字的。

我真的希望有人能对此有所启发。

最佳答案

变量的约束需要与您正在使用的发行版的支持相匹配。对于 tru_val[i] ~ uniform(9.5, 10.5) , tru_val必须定义为 real<lower=9.5,upper=10.5> tru_val[5] .

在此声明中,tru_val[i] ~ normal(mu, sigma) , Stan 没有从正态分布中抽取样本并将其设置为 tru_val[i] .它正在计算联合分布函数(在对数空间中);在这种情况下,它正在评估 tru_val[i] 的正态概率分布函数给出musigma (在日志空间中)。

(最好的提问地点是 Stan 用户邮件列表。)

关于r - stan/R 中的均匀分布导致抽样误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25645213/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com