- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是贝叶斯分析的新手,正在尝试使用 rstan 来估计后验密度分布。该练习试图使用 stan 重新创建我的大学给我们的示例,但我对如何正确转换变量有点困惑。我当前的代码运行没有错误,但结果与大学给我们的结果不符(尽管很接近),为清楚起见,下图使用黑色的 stan 估计。我通过查阅手册并将随机位拼凑在一起来使代码工作,但特别是我不太确定为什么需要 target
以及 gamma 转换是否确实正确。任何指导将不胜感激!
模型
标准规范
data {
int<lower=0> I;
int<lower=0> n[I];
int<lower=0> x[I];
real<lower=0> a;
real<lower=0> b;
real m;
real<lower=0> p;
}
parameters {
real<lower=0> lambda;
real mu;
real<lower=0, upper=1> theta[I];
}
transformed parameters {
real gam[I];
for( j in 1:I)
gam[j] = log(theta[j] / (1-theta[j])) ;
}
model {
target += gamma_lpdf( lambda | a, b);
target += normal_lpdf( mu | m , 1/sqrt(p));
target += normal_lpdf( gam | mu, 1/sqrt(lambda));
target += binomial_lpmf( x | n , theta);
}
R代码
library(rstan)
fit <- stan(
file = "hospital.stan" ,
data = dat ,
iter = 20000,
warmup = 2000,
chains = 1
)
数据
structure(
list(
I = 12L,
n = c(47, 211, 810, 148, 196, 360, 119, 207, 97, 256, 148, 215),
x = c(0, 8, 46, 9, 13, 24, 8, 14, 8, 29, 18, 31),
a = 2,
b = 2,
m = 0,
p = 0.01),
.Names = c("I", "n", "x", "a", "b", "m", "p")
)
---更新解决方案---
Ben Goodrich 指出的问题是,我是从 theta 推导 Gamma 的,而 Gamma 应该是相反的,因为 Gamma 是我的随机变量。正确的 stan 代码如下。
data {
int<lower=0> I;
int<lower=0> n[I];
int<lower=0> x[I];
real<lower=0> a;
real<lower=0> b;
real m;
real<lower=0> p;
}
parameters {
real<lower=0> lambda;
real mu;
real gam[I];
}
transformed parameters {
real<lower=0 , upper=1> theta[I];
// theta = inv_logit(gam); // Alternatively can use the in-built inv_logit function which is vectorised
for(j in 1:I){
theta[j] = 1 / ( 1 + exp(-gam[j]));
}
}
model {
target += gamma_lpdf( lambda | a, b);
target += normal_lpdf( mu | m , 1/sqrt(p));
target += normal_lpdf( gam | mu, 1/sqrt(lambda));
target += binomial_lpmf( x | n , theta );
}
最佳答案
作为提示,尝试将 gam
(ma) 放在 parameters
block 中,然后在 transformed 中声明和定义
根据您一开始给出的分布进行分组。theta
parameters
Stan 的初学者通常认为 Stan 有能力从逻辑上计算出你的 Stan 程序的含义,但实际上它被相当字面地转译为 C++ 和来自转换参数
的代码行和 model
block 被一遍又一遍地执行。
gam
(ma) 或 theta
是原始参数会产生差异的原因与变量变化原则有关。如果您真的想要,如果您向 target
添加雅可比行列式项(以对数为单位),您可以获得与原始参数化相同的结果,但是通过移动 可以更容易地避免这种情况gam
(ma) 到 parameters
block ,theta
到 transformed parameters
block 。有关变量更改原则的详细信息,请参阅此 case study .
关于r - 在 rstan 中转换变量(贝叶斯分析),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41839180/
我一直在研究一个三级 RStan 模型,其中重复的宽带测量(年份 ID = yrid)嵌套在地方当局(LA ID = 铺设)内,最终嵌套在区域内(区域 ID = rnid)。 (记录的)因变量是速度,
格式化要在 STAN 中使用的分类预测器的正确方法是什么?我似乎无法输入分类预测变量作为正常因子变量,那么转换正常分类变量以使 Stan 可以接受的最快方法是什么? 例如,假设我有一个继续预测器和一个
我正在寻找一种有效的方法来识别对线性模型的参数有巨大影响的数据点。这对于普通的线性模型来说是直截了当的,但我不确定如何使用贝叶斯线性模型来做到这一点。 这是使用普通线性模型的一种方法,我们可以计算每个
如标题所述,我想跳过R中for循环中rstan触发的错误,并让循环继续运行。我知道也有类似的建议tryCatch()或try()的答案,例如this。但是,当错误源自循环内的stan时,它们将不起作用
我最近遇到了高斯过程模型,并且碰巧认为它们可能是我实验室一直在研究的问题的解决方案。我有一个关于交叉验证的开放和相关问题,但我想将我的建模/数学问题与我的编程问题分开。因此,这是第二个相关帖子。如果更
Stan 是 Gelman et al 的新贝叶斯分析软件. 我猜,RStan 是一种从 R 中调用 Stan 的方法。 Stan/RStan 是否会在运行 Linux 操作系统的 super 计算机
我是贝叶斯分析的新手,正在尝试使用 rstan 来估计后验密度分布。该练习试图使用 stan 重新创建我的大学给我们的示例,但我对如何正确转换变量有点困惑。我当前的代码运行没有错误,但结果与大学给我们
rstan::stan 的帮助文件关于init有以下几点要说争论: init="random" (default): Let Stan generate random initial values f
我正在尝试使用 Stan 和 R 来拟合一个模型,呃,模拟观察到的实现 y_i = 16、9、10、13、19、20、18、17、35、55,它们来自二项式分布随机变量,例如 Y_i,参数为 m_i(
我正在尝试安装 Rstan。我在安装和运行软件包时没有问题。但是,当我尝试运行使用该库的程序时,出现以下错误: Error in compileCode(f, code, language =
我有以下图像: FROM rocker/r-ver:4.1.2 RUN apt-get update \ && apt-get install -y --no-install-recommen
我在 Linux 上构建的软件包失败,rstan 软件包出现以下编译错误: lto-wrapper: fatal error: make returned 2 exit status compilat
我正在尝试使用 RStan 代码模拟指数随机变量。 模拟指数随机变量的 R 代码如下所示: A N; real lambda2; real lambda3; real lambda4;
我正在尝试在 Ubuntu 18.04 中安装 rstan。我从 apt-get install r-cran-rstan 它显示了对软件包的依赖性:r-cran-ggplot2、r-cran-pk
安装rstan时出现以下错误: Error in .shlib_internal(args) : C++14 standard requested but CXX14 is not defined 从
我已经成功安装了 rstan,但是当我尝试使用 library(rstan) 附加它时,我得到一个标题为“RGui (64-bit): Rgui.exe - 未找到入口点”和消息内容 The proc
以下是我的r代码。 ```{r message=FALSE, warning=FALSE, cache=0,eval=TRUE, error=FALSE} stan_m1 <- rethinking:
我计划运行一个定制的 Rstudio 与 tidyverse , rmarkdown和 rstan预装在Digital Ocean的Docker 17.03.0-ce on 16.04 . 在 Doc
我无法在 Windows 上编译 Rcpp 或 rstan 代码。 当我尝试编译 rstan 程序(如下)时,我收到错误 Error in compileCode(f, code, language
我正在尝试根据 https://github.com/stan-dev/rstan/wiki/RStan-Getting-Started 安装 RStan 我使用的是 Windows 7、RStudi
我是一名优秀的程序员,十分优秀!