问题标签 [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.
c++ - 编译错误,未创建函数/方法!用于 brms 型号
我再次遇到此错误。但与以前不同的是,现在下面的测试有效:
但是当我尝试任何基于 stan 的模型(例如下面的示例代码和数据)时,我得到与下面相同的错误。
以下是示例数据和代码:
它说“未创建函数/方法!”:
这是我的会话信息:
我将不胜感激任何解决此问题的想法。
r - ubuntu上的RStan工具链错误
我安装了 RStan,遇到了问题,将其卸载,然后尝试使用https://github.com/stan-dev/rstan/wiki/Installing-RStan-on-Mac-or-Linux重新安装它
但是,当我尝试使用 rstan 时,出现此错误:
库中的错误(rstan):没有名为“rstan”的包</p>
我注意到当我运行上面页面中提到的工具链诊断时,
我收到一个错误:
出了什么问题?谢谢!
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。
我试着
我在 2. 的尝试是这段代码:
我的斯坦代码如下:
我的R代码如下:
现在,我刚开始学习 Stan,所以我真的不确定这是否正确。但是,这段代码似乎适用于我的第一个目标(至少,我编写的任何代码似乎都有效......)。但是当我尝试编写我的第二个目标时,我的麻烦就开始了。
当我尝试编译上面的 Stan 代码时,我收到以下错误:
现在,根据这个错误消息,我的问题似乎是因为 p 是 10 个实数值的向量,而不是一个实数值。但是,由于我对 Stan 缺乏经验,我不确定如何解决这个问题。
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 因多核支持而失败,如下所示:
有错误:
但是,如果我将线路更改为单核,我可以让代码至少工作
r - Rstan 不支持多核
我安装了 R 版本 3.5.1(在 Windows 7 x64 桌面 PC 上),然后是 Rtools 3.5 和 rstan(通过 install.packages())
Rstan 在多核支持方面失败,如下所示:
有错误:
但是,如果我将选项行更改为:
该代码有效。除了仅使用 1 个核心之外,任何人都知道解决方案吗?谢谢
stan - 有效地对具有不同 sigma(协方差)矩阵的多正态变量集合进行采样
我是斯坦的新手,所以希望你能指出我正确的方向。我会根据我的情况来确保我们在同一页面上......
如果我有一组单变量法线,文档会告诉我:
提供与未矢量化版本相同的模型:
但是矢量化版本(很多?)更快。好的,很好,很有道理。
所以第一个问题是:是否有可能在单变量正常情况下利用这种向量化加速,其中样本的mu
和都随向量中的位置而变化。sigma
即如果mu_vec
和sigma_vec
都是向量(在前一种情况下sigma
是标量),那么是这样的:
相当于:
如果是这样,是否有可比的加速?
好的。那就是热身。真正的问题是如何最好地接近上述的多变量等价物。
在我的特殊情况下,我N
观察到一些变量的双变量数据y
,我将其存储在N x 2
矩阵中。(对于数量级,N
大约1000
在我的用例中。)
我的信念是,每个观察的每个组成部分的平均值是,每个组成部分的标准0
差是每个观察结果1
(我很高兴将它们硬编码为这样)。然而,我的信念是,相关性( )作为另一个观察变量(存储在元素向量中)rho
的(简单)函数,因观察而异。例如,我们可能会说,我们的目标是从我们的数据中学习。即第 th 观察的协方差矩阵将是:x
N
rho[n] = 2*inverse_logit(beta * x[n]) - 1
n in 1:N
beta
n
我的问题是将它放在一个 STAN 模型中的最佳方法是什么,这样它就不会那么慢了?是否有multi_normal
分布的矢量化版本,以便我可以将其指定为:
或者也许是其他类似的表述?或者我需要写:
在设置vector_of_sigma_matrices
并vector_of_mu_2_tuples
在较早的块之后?
提前感谢您的任何指导!
编辑以添加代码
使用python,我可以按照我的问题的精神生成数据,如下所示:
然后使用以下方法实际生成数据:
这是数据集的样子(左窗格中的y
彩色散点图和右窗格中的 by...所以想法是越高,越接近 ,越低,越接近。所以期望左窗格上的红点为“从左下到右上”,蓝点为“从左上到右下”,实际上它们是:correls
drivers
driver
1
correl
driver
-1
correl
使用蛮力方法,我可以建立一个如下所示的 STAN 模型:
这很适合:
但我希望有人能为“边缘化”方法指出正确的方向,在这种方法中,我们将双变量法线分解为一对可以使用相关性混合的独立法线。我需要这个的原因是在我的实际用例中,两个维度都是肥尾的。我很高兴将其建模为 student-t 分布,但问题是 STAN 只允许nu
指定一个(不是每个维度一个),所以我认为我需要找到一种方法将 a 分解multi_student_t
为一对独立student_t
的,这样我就可以为每个维度分别设置自由度。
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 ) 先验,
subject
subject:visit
subject:event
- 我想分别为sigma2_a、sigma2_b、sigma2_c设置统一的先验。
我设法得到的:
我相信我正在正确设置模型公式,并且正在为固定效应参数设置所需的先验:
/li>
我挣扎的是:
- 如何分别为 (1) 、 (2) 、 (3)的随机效应设置 N(0, sigma2_a ), N(0, sigma2_b ), N(0, sigma2_c ) 先验,
subject
subject:visit
subject:event
- 如何分别为sigma2_a、sigma2_b、sigma2_c设置统一的先验。
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_std
和x2_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
块中,如下所示:
我的整个模型如下:
我正在使用hills
R 包中的数据集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。这是否表明我犯了错误?正如我所说,我已经检查了我所有的代码和数学,所以,据我所知,一切似乎都很好。
r - 如何调整 plot.stanfit() 中的参数标签?
我正在使用 rstan 来估计模型。采样器运行后,我plot()
用来生成估计参数的点估计和不确定区间图。但是,它对参数使用“丑陋”的名称(例如sigma_individual
),我想Individual-level SD
在轴标签上报告“漂亮”的名称(例如 )。
我发现我可以使用scale_y_continuous(breaks=1:2, labels=c("a","b")
,但它似乎改变了事情的顺序,这使得我很难确切地知道我在做什么。
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.