问题标签 [rstan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1506 浏览

c++ - 编译错误,未创建函数/方法!用于 brms 型号

我再次遇到此错误。但与以前不同的是,现在下面的测试有效:

但是当我尝试任何基于 stan 的模型(例如下面的示例代码和数据)时,我得到与下面相同的错误。

以下是示例数据和代码:

它说“未创建函数/方法!”:

这是我的会话信息:

我将不胜感激任何解决此问题的想法。

0 投票
0 回答
102 浏览

r - ubuntu上的RStan工具链错误

我安装了 RStan,遇到了问题,将其卸载,然后尝试使用https://github.com/stan-dev/rstan/wiki/Installing-RStan-on-Mac-or-Linux重新安装它

但是,当我尝试使用 rstan 时,出现此错误:

库中的错误(rstan):没有名为“rstan”的包</p>

我注意到当我运行上面页面中提到的工具链诊断时,

我收到一个错误:

出了什么问题?谢谢!

0 投票
1 回答
1432 浏览

r - 从二项式随机变量建模值时,Stan/RStan 中的 if() 条件问题

我正在尝试使用 Stan 和 R 来拟合一个模型,该模型对观察到的实现 y_i = 16、9、10、13、19、20、18、17、35、55 进行建模,这些实现来自二项式分布随机变量,比如 Y_i,带有参数 m_i(试验次数)和 p_i(每次试验的成功概率)。

出于本实验的目的,我将假设所有 m_i 都是固定的,并且由 m_i = 74、99、58、70、122、77、104、129、308、119 给出。

我将使用 Jeffrey 的先验:\alpha=0.5 和 \beta=0.5。

我试着

  1. 求 p_i 的贝叶斯估计。
  2. 求p_i的范围(即参数k如下:在此处输入图像描述

我在 2. 的尝试是这段代码:

我的斯坦代码如下:

我的R代码如下:

现在,我刚开始学习 Stan,所以我真的不确定这是否正确。但是,这段代码似乎适用于我的第一个目标(至少,我编写的任何代码似乎都有效......)。但是当我尝试编写我的第二个目标时,我的麻烦就开始了。

当我尝试编译上面的 Stan 代码时,我收到以下错误:

在此处输入图像描述

现在,根据这个错误消息,我的问题似乎是因为 p 是 10 个实数值的向量,而不是一个实数值。但是,由于我对 Stan 缺乏经验,我不确定如何解决这个问题。

0 投票
1 回答
1538 浏览

r - RStan 卡在“哈希不匹配所以重新编译”确保 Stan 代码以空行结尾

我按照https://github.com/stan-dev/rstan/wiki/RStan-Getting-Started的说明构建了 rtools 3.4 和 rstan 2.17.3 。

我在下面保存了文件“8schools.stan”:

但是当我调用代码时:

我收到此错误:

请协助!

=================== 更新=============================== ================

所以我在 Rtools 3.5 和 rstan 之后重新安装了 R 版本 3.5.1(通过 install.packages())

现在 rstan 因多核支持而失败,如下所示:

有错误:

但是,如果我将线路更改为单核,我可以让代码至少工作

0 投票
1 回答
308 浏览

r - Rstan 不支持多核

我安装了 R 版本 3.5.1(在 Windows 7 x64 桌面 PC 上),然后是 Rtools 3.5 和 rstan(通过 install.packages())

Rstan 在多核支持方面失败,如下所示:

有错误:

但是,如果我将选项行更改为:

该代码有效。除了仅使用 1 个核心之外,任何人都知道解决方案吗?谢谢

0 投票
2 回答
1963 浏览

stan - 有效地对具有不同 sigma(协方差)矩阵的多正态变量集合进行采样

我是斯坦的新手,所以希望你能指出我正确的方向。我会根据我的情况来确保我们在同一页面上......

如果我有一组单变量法线,文档会告诉我:

提供与未矢量化版本相同的模型:

但是矢量化版本(很多?)更快。好的,很好,很有道理。

所以第一个问题是:是否有可能在单变量正常情况下利用这种向量化加速,其中样本的mu和都随向量中的位置而变化。sigma即如果mu_vecsigma_vec都是向量(在前一种情况下sigma是标量),那么是这样的:

相当于:

如果是这样,是否有可比的加速?

好的。那就是热身。真正的问题是如何最好地接近上述的多变量等价物。

在我的特殊情况下,我N观​​察到一些变量的双变量数据y,我将其存储在N x 2矩阵中。(对于数量级,N大约1000在我的用例中。)

我的信念是,每个观察的每个组成部分的平均值是,每个组成部分的标准0差是每个观察结果1(我很高兴将它们硬编码为这样)。然而,我的信念是,相关性( )作为另一个观察变量(存储在元素向量中)rho的(简单)函数,因观察而异。例如,我们可能会说,我们的目标是从我们的数据中学习。即第 th 观察的协方差矩阵将是:xNrho[n] = 2*inverse_logit(beta * x[n]) - 1n in 1:Nbetan

我的问题是将它放在一个 STAN 模型中的最佳方法是什么,这样它就不会那么慢了?是否有multi_normal分布的矢量化版本,以便我可以将其指定为:

或者也许是其他类似的表述?或者我需要写:

在设置vector_of_sigma_matricesvector_of_mu_2_tuples在较早的块之后?

提前感谢您的任何指导!


编辑以添加代码

使用python,我可以按照我的问题的精神生成数据,如下所示:

然后使用以下方法实际生成数据:

这是数据集的样子(左窗格中的y彩色散点图和右窗格中的 by...所以想法是越高,越接近 ,越低,越接近。所以期望左窗格上的红点为“从左下到右上”,蓝点为“从左上到右下”,实际上它们是:correlsdriversdriver1correldriver-1correl

散点图

使用蛮力方法,我可以建立一个如下所示的 STAN 模型:

这很适合:

跟踪测试版

但我希望有人能为“边缘化”方法指出正确的方向,在这种方法中,我们将双变量法线分解为一对可以使用相关性混合的独立法线。我需要这个的原因是在我的实际用例中,两个维度都是肥尾的。我很高兴将其建模为 student-t 分布,但问题是 STAN 只允许nu指定一个(不是每个维度一个),所以我认为我需要找到一种方法将 a 分解multi_student_t为一对独立student_t的,这样我就可以为每个维度分别设置自由度。

0 投票
1 回答
676 浏览

r - 在混合效应模型 (R brms) 中定义随机效应和随机效应方差的先验

我想拟合 GLMM Poisson 模型计数。我有 121 个受试者 ( subject),我观察到每个受试者 8 个泊松计数 ( count):它们对应于 2 种类型的事件 ( event) x 4 个句点 ( period)。

我想要的是:

  • 我想用贝叶斯方法拟合 GLMM,假设 (1) subject, (2) subject:visit, (3)的随机效应subject:event
  • 我想为所有固定效果先设置 N(0, 10^6),
  • 我想分别为 (1) 、 (2) 、 (3)的随机效应设置 N(0, sigma2_a ), N(0, sigma2_b ), N(0, sigma2_c ) 先验,subjectsubject:visitsubject:event
  • 我想分别为sigma2_asigma2_bsigma2_c设置统一的先验。

我设法得到的:

  • 我相信我正在正确设置模型公式,并且正在为固定效应参数设置所需的先验:

    /li>

我挣扎的是:

  • 如何分别为 (1) 、 (2) 、 (3)的随机效应设置 N(0, sigma2_a ), N(0, sigma2_b ), N(0, sigma2_c ) 先验,subjectsubject:visitsubject:event
  • 如何分别为sigma2_asigma2_bsigma2_c设置统一的先验。
0 投票
1 回答
354 浏览

r - Stan多项式回归参数估计模型回顾

我有以下多项式回归模型:

图片版本

在此处输入图像描述

乳胶版

$Y_i | \mu_i, \sigma^2 \sim \text{正常}(\mu_i, \sigma^2), i = 1, \dots, n \ \text{独立}$

$\mu_i = \alpha + \beta_1 x_{i1} + \beta_2 x_{i2} + \beta_3 x_{i1}^2 + \beta_4 x_{i2}^2 + \beta_5 x_{i1} x_{i2}$

$\alpha \sim \text{一些合适的先验}$

$\beta_1, \dots, \beta_5 \sim \text{一些合适的先验}$

$\sigma^2 \sim \text{一些合适的先验}$

我想将样本大小和 $y_i$、$x_{i1}$ 和 $x_{i2}$ 上的观察向量作为输入。代码如下:

我想对两个输入变量进行标准化(中心化和缩放)以获得标准化的回归变量x1_stdx2_std. 代码在transformed data块中,如下所示:

然后,我想使用标准化回归变量拟合上述多项式回归模型,并在原始和标准化尺度上返回回归参数 $\alpha$、$\beta_1$ 和 $\dots、\beta_5$ 的估计值。

在此处输入图像描述

在此处输入图像描述

基于此,如果我没记错的话,标准化参数到原始尺度的转换公式如下:

图片版本

在此处输入图像描述

乳胶版

$\alpha = \tilde{\alpha} - \dfrac{\gamma_1}{s_1}\bar{x}_1 - \dfrac{\gamma_2}{s_2}\bar{x}_2 + \dfrac{\gamma_3}{ s_1^2}\bar{x}_1^2 + \dfrac{\gamma_4}{s_2^2}\bar{x}_2^2 + \dfrac{\gamma_5}{s_1 s_2}\bar{x}_1\酒吧{x}_2$

$\beta_1 = \left( \dfrac{\gamma_1}{s_1} - 2\dfrac{\gamma_3}{s_1^2}\bar{x}_1 - \dfrac{\gamma_5}{s_1 s_2}\bar{x }_2 \右)$

$\beta_2 = \left( \dfrac{\gamma_2}{s_2} - 2\dfrac{\gamma_4}{s_2^2}\bar{x}_2 - \dfrac{\gamma_5}{s_1 s_2}\bar{x }_1 \右)$

$\beta_3 = \dfrac{\gamma_3}{s_1^2}$

$\beta_4 = \dfrac{\gamma_4}{s_2^2}$

$\beta_5 = \dfrac{\gamma_5}{s_1 s_2}$

实现这一点的代码包含在generated quantities块中,如下所示:

我的整个模型如下:

我正在使用hillsR 包中的数据集MASS

现在我输出标准化的 ( alpha_std, beta1_std, beta2_std, beta3_std, beta4_std, beta5_std) 和原始尺度 ( alpha, beta1, beta2, beta3, beta4, beta5) 回归参数:

print(model.fit, pars = c("alpha_std", "alpha", "beta1_std", "beta2_std", "beta3_std", "beta4_std", "beta5_std", "beta1", "beta2", "beta3", "beta4", "beta5", "sigma"), probs = c(0.05, 0.5, 0.95), digits = 5)

在此处输入图像描述

我做对了吗?我还对数学进行了两次和三次检查,所以我认为它应该是正确的。尽管如此,我很紧张的一件事beta4是 0.00000。这是否表明我犯了错误?正如我所说,我已经检查了我所有的代码和数学,所以,据我所知,一切似乎都很好。

0 投票
1 回答
173 浏览

r - 如何调整 plot.stanfit() 中的参数标签?

我正在使用 rstan 来估计模型。采样器运行后,我plot()用来生成估计参数的点估计和不确定区间图。但是,它对参数使用“丑陋”的名称(例如sigma_individual),我想Individual-level SD在轴标签上报告“漂亮”的名称(例如 )。

我发现我可以使用scale_y_continuous(breaks=1:2, labels=c("a","b"),但它似乎改变了事情的顺序,这使得我很难确切地知道我在做什么。

0 投票
1 回答
827 浏览

r - How to detect warnings in R and have a while loop run on a function as along as warnings are outputted?

I am currently running functions such as stan_glm and stan_glmer from the rstan package in R. I am calling each function 1000 times, and it turns out that about 75% of these runs result in an warning such as:

I would like to create a while loop that re-runs the function until I come across a run without an warning. Is there a way to flag or detect such warning messages as the one above? Thanks.