问题标签 [hierarchical-bayesian]

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 回答
98 浏览

r - R中的贝叶斯建模

我正在尝试使用 bas 包在 R 中实现贝叶斯模型,并为我的模型设置这些值:

我试图借助该特定状态存在的特定区域来预测给定状态的区域;但对于不同的邮政编码。我的模型基本上找到给定状态的数据中存在的各种邮政编码(为此使用状态索引),然后给出输出。

现在,每当我尝试预测状态区域时,我都会给出以下输入:

现在,我得到了这个状态的输出。假设我有一个带有给定邮政编码的州列表,并且我想在该列表上运行我的模型(数据库)并获得预测,我无法使用上述方法来做到这一点,因为这需要时间。还有其他方法可以做到这一点吗?我在一位绅士的帮助下做了同样的事情,这是我的代码:

basdata:我的模型优先:我正在预测区域的新数据集。现在,我面临的问题是代码需要很长时间才能预测值。它遍历每一行并计算面积。我的数据集中有 150000 行,我会请求是否有人可以帮助我优化此代码的性能。

0 投票
1 回答
45 浏览

r - 迭代大型数据集 R-Studio 的每一行

假设我有一个包含给定邮政编码的 1500000 个州的列表,并且我想在该列表上运行我的预测模型(数据库)并获得区域的预测,我在一位绅士的帮助下做了同样的事情,这是我的代码:

  1. 基础数据:我的模型
  2. 第一:我正在预测该区域的新数据集。

现在,我面临的问题是代码需要很长时间才能预测值。它遍历每一行并计算面积。我的数据集中有 150000 行,我会请求是否有人可以帮助我优化此代码的性能。

0 投票
0 回答
178 浏览

r - 如何为 hurdle-lognormal() brms 模型编写先验代码?

我理解贝叶斯中的先验概念,这很酷,但是将它们变成代码太难了。据我所知,没有先验的发布不是一个好习惯。我有相当大的数据集,n = 5000,因此非常温和的信息先验会更好。任何人都可以帮忙吗?

我有一个 hurdle_lognormal 模型如下:

received_treatment_hours 是一个零膨胀 (50%) 的结果变量,还包含极值(异常值)。范围从0-100,大多数患者接受约5小时。

这是之前的总结

在此处输入图像描述

如何为模型的对数正态和二项式部分编写一般 b 先验?让我们假设在不同的预测因子水平之间接受治疗时间不可能超过 30 小时。零的比例在不同的预测水平之间变化很大(10-90%)——如何编码?

这些 sd、intercept 和 sigma 先验可以定义什么?

我为模型的对数正态部分编写的代码:

0 投票
0 回答
94 浏览

r - 在 R rethinking 包中,嵌套索引的语法是什么?

我正在使用Richard McElreath 在R 中的“重新思考”包运行以下模型。每个物种(由species_dummy 表示)都有几棵与之相关的树(由索引[tree] 表示)。我想使用嵌套索引或以某种方式使用物种虚拟变量来允许 r_sigma_species 的两个不同值,每个物种一个。我不知道如何使索引工作。我不相信 McElreath 的 Statistical Rethinking 书中包含任何这样的例子。

我尝试了以下方法:

  • r_tree[tree_index] ~ dnorm(0, r_sigma_species[species_dummy]) ... 但这不起作用,因为重新考虑不会接受 ~ 右侧的索引

  • 分别定义 r_sigma_oak 和 r_sigma_juniper(即两个物种),然后使用虚拟变量: r_sigma_tree[tree_index] ~ r_sigma_juniper * (1-species_dummy) + r_sigma_oak * species_dummy .... 但重新思考不会解释这一点,因为它没有根据[tree_index]自动过滤species_dummy的数据,所以数据行数不匹配。

  • 试图组合索引,如 r_sigma_tree[tree_index][species_dummy] ~ r_sigma_species[species_dummy] ...重新思考似乎并不喜欢组合索引。

由于我已经有了使用“rethinking”包的模型版本,我现在不想切换到 rstan 或任何其他语法。

0 投票
0 回答
164 浏览

bayesian - brms hurdle_lognormal 模型:这是将后验值转换为 y 变量单位并将障碍值转换为概率的正确方法吗?

我有一个零膨胀的 y 变量。

您能否确认我的解决方案将 brms 障碍对数正态后验值转换为有意义的估计值作为 y 变量单位(对数正态部分)或零概率(障碍部分)。

模型

后变量

计算每个县的平均值的解决方案

我必须添加“b_Intercept”和“r_county[,Intercept]”,然后取 exp() 吗?在代码中:

计算每个县的零概率(y = 0)的解决方案

我必须添加“b_hu__Intercept”和“r_county__hu[,Intercept]”,并将其放入 inv_logit_scaled() 函数中?在代码中:

0 投票
1 回答
74 浏览

python - 张量流概率:从联合分布中检索特定的随机变量

我是张量流概率的新手。我正在构建一个分层模型,为此我使用JointDistributionSequential API:

然后我打算使用Mixture API 创建这些模型的混合:

这行不通。我打算混合的是批处理形状(N,T,S)的分层模型“末端”的随机变量x_t_s 。我想我需要将它们提供给混合物的components参数。问题是我无法轻松地从模型对象中检索这些变量。

有没有人看到解决这个问题的方法?

请注意,我尝试使用jds.model[-1]而不是jds,但这指向 lambda 函数,这不是我在这里需要的。

0 投票
0 回答
114 浏览

python - 张量流概率 - MCMC - 转换内核中双射器的问题?

我正在构建张量流概率模型的混合体。一个给定模型的联合分布是:

然后我需要“混合”模型,但这种混合是相当自定义的,我在自定义log_prob_fn对数概率函数中手动完成:

(我知道这个功能效率不高,但我不能从我以前的模型中轻松采样 - 批量形状 - 所以我现在不得不遍历模型)

请注意,分配dist是为每个网络动态创建的。

然后目标是使用这个模型并将其拟合到数据中。我使用 生成了一个初始状态,one_network_prior然后我手动混合了数据以获得(N, T, S, D)观察到的数据,该数据将被馈送到 MCMC,如下所示:

但是当我运行该run_chain函数时,经过几次迭代后,我得到了一个错误:

我的理解是负片kappa被喂给了dist,但是通过Softplus双射器这不应该是可能的吗?当反转我所有的双射器时,该函数仍在运行,这很奇怪,因为尺寸应该被破坏SoftmaxCentered

所以我觉得我的双射器只是被忽略了。我错过了什么 ?

在此先感谢您的帮助 :)

0 投票
1 回答
149 浏览

python - 多级模型 + pymc3.glm

我需要使用 PyMC3 拟合多级线性模型,我非常喜欢glm api,因为它提供了简洁性。我想问一下是否以及如何做到这一点。我发现的这篇文提到:

glm() 还不能很好地处理分层模型

所以我有点怀疑这实际上是否可以做到,但它是几年前写的,所以这可能已经改变了。举个例子,下面是我想用 glm api 重写的模型

我认为它看起来像这样:

但是,在尝试堆叠系数时会在此处产生错误

0 投票
1 回答
29 浏览

python - Theano张量长度未知,但可以在pymc3层次模型中添加

我正在尝试使用 Spyder 在 Win10 环境中运行带有 pymc3 的分层模型。我有一些全局模型参数(theta、omega、sigma)和一个特定参数(Ci)。

它需要一个 pd Dataframe 作为包含相关数据的输入。第一列称为“队列”,第二列称为“时期”,第三列包含观察结果。

观察的数量在队列之间有所不同。

代码如下所示:

产生的错误信息是:

我不知道为什么。请注意,如果不是在导致错误的行中除以 Theta,而是进行加法,那么它可以工作(但显然这不是我想要的)。

我该如何解决这个问题并让这个部门工作?

0 投票
0 回答
201 浏览

pymc3 - 当每个人都有多个数据点时,如何拟合 pymc3 模型?

我正在尝试在我的研究中遇到的各种数据上练习使用 pymc3,但是当每个人给我多个数据点并且每个人都来自不同的组时,我无法思考如何拟合模型(所以尝试分层模型)。

这是我正在使用的练习场景:假设我们有 2 组人,每组 N = 30。所有 60 人都经过 10 个问题的调查,每个人可以回答(“1”)或不回答(“0”)每个问题。因此,对于每个人,我都有一个长度为 10 的数组,其中包含 1 和 0。

为了对这些数据建模,我假设每个人都有一些潜在的特征“theta”,每个项目都有一个“歧视”a和一个“难度”b(这只是一个基本的项目响应模型),以及响应的概率(“ 1") 由 (1 + exp(-a(theta - b)))^(-1) 给出。(逻辑应用于 a(theta - b) 。)

以下是我尝试使用 pymc3 安装它的方法:

函数“getProbs”应该为我提供伯努利随机变量的一系列概率,因为每个人的试验/调查问题中响应 1 的概率会发生变化。但是这个方法给了我一个错误,因为它说“指定 p 或 logit_p 之一”,但我以为我用函数做了?

以下是“getProbs”的代码,以防万一:

我添加了 Nprt 参数,因为如果我尝试获取 THETA 的长度,它会给我一个错误,因为它是一个 FreeRV 对象。我知道我可以尝试对“item”函数进行矢量化,这只是我在上面放置的逻辑函数,而不是这样做,但是当我尝试运行它时也会出错。

我想我可以用 pm.Data 做一些事情来解决这个问题,但是文档对我来说并不完全清楚。

基本上,我习惯于在 JAGS 中构建模型,在其中循环遍历每个数据点,但 pymc3 似乎并没有那样工作。我对如何在模型中构建/索引我的随机变量感到困惑,以确保概率改变我希望它们从试验到试验的方式,并确保我估计的参数对应于正确的组中的正确的人。

提前感谢您的帮助。我对 pymc3 很陌生,并试图掌握它,并想尝试与 JAGS 不同的东西。

编辑:我能够通过首先通过循环试验构建我需要的数组来解决这个问题,然后使用以下方法转换数组:

然后我把这个新变量放在伯努利实例的“p”参数中,它起作用了!这是更新后的完整模型:(下面,我将 theano.tensor 导入为 T)