问题标签 [dirichlet]

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

r - `dmn {DirichletMultinomial}` 可以在 R 中的多个 cpu 内核上运行吗?

我使用分析微生物组数据

和其他几个库。拟合 Dirichlet-Multinomial 模型来计算数据dmn {DirichletMultinomial}需要相当长的时间。计算可以在 R 中的多个 cpu 内核上运行吗?我试过:

替换为:

但它返回错误警告消息: 在 mclapply(1:25, dmn, count = count, verbose = TRUE, mc.cores = numCores) 中:所有计划的核心在用户代码中遇到错误

我在用

任何人都可以帮忙吗?

最好的问候, 马辛

0 投票
3 回答
221 浏览

python - numpy中范围为[-1,1]的转换Dirichlet数组

从 Dirichlet 分布中采样的随机向量包含落在域 [0,1] 中的值,并且它们总和为 1。在 numpy 中,它可以这样编程,向量大小为 5:

相反,我想要一个随机向量,其中包含[-1,1] 和总和为 1的值,有人告诉我可以通过将 Dirichlet 生成的x向量转换为y = 2x -1

下面是这种转变的尝试。但是,该脚本无法正常工作,因为y没有根据需要总和为 1。它怎么能被修复,或者它可能y = 2x -1没有按照他们所说的那样做?

输出:

0 投票
1 回答
530 浏览

python - 2D 热方程 - 添加初始条件并检查 Dirichlet 边界条件是否正确

我对使用 numpy 和 sympy 库还是很陌生。抱歉,如果我在那里打印了很多照片,我只是想检查代码是否正常工作。我正在尝试解决这个 2D 热方程问题,并且有点难以理解我如何添加初始条件(30 度的温度)并添加均匀的狄利克雷边界条件:温度到板的每一侧(即顶部,底部和两侧)。例如,我尝试将板顶部的温度添加为 1000 度,但出现错误“IndexError: index 18 is out of bounds for axis 0 with size 18”。我已经设法将函数添加到代码中,它似乎也可以输出,只是在添加条件时有点迷失......我试过在网上寻找类似的问题,但不能

这是原始二维热方程的链接:https ://drive.google.com/file/d/1q3KyfaHD7hZTbdIYc9_e5otusELqYJaD/view?usp=sharing

这是显式有限差分的最终方程的链接:https ://drive.google.com/file/d/1unJHXO3b3xig8RhBen5k0eOg40YUfjyv/view?usp=sharing

i;j 是位置(节点编号)和 k= 时间(时间步长编号)

我也在试图找出温度达到稳定状态的时间

我已经添加了到目前为止我所做的整个代码


更新:我已将此添加到代码中,这些似乎有效。但是,我注意到我T = np.ones(([Nx,Ny]))的尺寸是 18 x 9,但是水平边的盘子更长。这是否意味着我只需要翻转矩阵?

0 投票
0 回答
35 浏览

r - 为什么“混合”和“预测”在 DirichletMultinomial R 包中给出不同的结果

我一直在使用 DirichletMultinomial R 包来构建数据集的一些聚类。现在,使用我建立的模型,我想在另一个数据集上预测这些组。在此之前,我只是在我的原始数据集上使用了预测,结果让我感到惊讶。

如果我在 DirichletMultinomial 包中包含的 Twins 数据集上执行此操作,我会得到以下结果,它们看起来几乎相同。

但是如果我在我的数据集上这样做,我会有一些差异(尤其是最后 2 行),我不明白它来自哪里。也许我误解了该方法的工作方式,但我希望通过混合和预测找到大致相同的结果。我在这里怎么弄错了?

0 投票
1 回答
76 浏览

r - 分层狄利克雷回归(锯齿)中的随机截距

我有以下数据结构:

  • y:3 列,这些列是多年来观察到的死亡比例。
  • x1:GDP - 与每年相关的连续变量
  • x2:与死亡有关的年龄

这里的型号规格:

模型

这里模拟数据:

锯齿模型

我收到了这个错误:

对模型规范有什么建议吗?

0 投票
1 回答
21 浏览

r - 除了最好的 Dirichlet 组件之外,是否可以检索?

我运行微生物群分析library(DirichletMultinomial)并将计数数据拟合到从 1 到 15 的 k 值。我得到了 k = 5 的最佳结果。您可以查看该图: 模型拟合作为收到的 Dirichlet 组件数的函数。 但是,我想将我的数据子集为 k = 7。

是否有可能这样做,以及如何做到这一点?

任何人都可以帮忙吗?

最好的问候, 马辛

0 投票
1 回答
43 浏览

r - 错误“无效的类“DMNGroup”对象”是什么意思,如何解决问题?

我正在尝试从library(DirichletMultinomial). 我有一个包含count因子计数和向量的大矩阵pheno。在为每个组执行 Dirichlet-multinominal 模型的下一步后,我根据(count划分为组)制作了一个子集,如小插图中的示例所示:countpphenocountp <- count[pheno %in% c("group1", "group2"), ]

bestgrp <- dmngroup(countp, pheno, k=1:15, simplify = FALSE, verbose=TRUE, .lapply = parallel::mclapply)

该过程工作了 8-12 小时并崩溃了报告:

invalid class “DMNGroup” object: undefined class for slot "elementMetadata" ("DataTable_OR_NULL")

我确定该过程在崩溃后花费了几个小时,因为我有以下代码

并有时间保存错误消息。由于verbose=TRUE不能在并行多核计算中工作,所以当它崩溃时我没有更具体的点。count处理后的整个数据集dmn变得平滑。我不是生物信息学家,并且是 R 计算的新手,因此当 Google 为错误消息返回 NULL 结果时,我完全迷失了。任何人都可以帮忙吗?最好的问候, 马辛

0 投票
1 回答
462 浏览

numpy - Python中随机正交矩阵的高效生成

我需要为我的工作生成大量随机均值不变正交矩阵。均值不变矩阵具有属性A*1_n=1_n,其中 1_n 是标量 1 的大小为 n 的向量,基本为np.ones(n)。我使用 Python,特别是 Numpy 来创建我的矩阵,但我想确保我的方法既正确又最有效。此外,我想介绍我尝试过的 3 种独立正交化方法的发现,并希望能解释为什么一种方法比其他方法更快。我在帖子的末尾就我的发现提出了四个问题。

一般来说,为了创建一个均值不变的随机正交矩阵 A,您需要创建一个随机方阵 M1,将其第一列替换为一列并正交化矩阵。然后,使用另一个矩阵 M2 再次执行此操作,最终均值不变随机正交矩阵为 A = M1*(M2.T)。这个过程的瓶颈是正交化。正交化的主要方法有 3 种,即使用投影的Gram-Schmidt 过程、使用反射的Householder 变换和Givens 旋转

使用 Numpy: 创建 nxn 随机矩阵非常简单 M1 = np.random.normal(size=(n,n))。然后,我将 M1 的第一列替换为 1_n。

据我所知,Gram–Schmidt 过程在任何非常流行的库中都不存在,所以我发现这段代码运行良好:

显然,上面的代码必须对 M1 和 M2 都执行。

对于 10,000x10,000 随机均值不变正交矩阵,此过程在我的计算机上大约需要1 小时(8 核 @3.7GHz,16GB RAM,512GB SSD)。

我发现代替 Gram-Schmidt 过程,我可以用以下方法对 Numpy 中的矩阵进行正交化: q1, r1 = np.linalg.qr(M1) 其中 q1 是正交化矩阵,r1 是上三角矩阵(我们不需要保留 r1)。我对 M2 做同样的事情并得到 q2。那么,A=q1*(q2.T)。对于相同的 10,000x10,000 矩阵,此过程在同一台计算机上大约需要70 秒。我相信linalg.qr()图书馆使用 Householder 转换,但我希望有人确认它。

最后,我尝试改变初始随机矩阵 M1 和 M2 的生成方式。而不是 M1 = np.random.normal(size=(n,n))我使用 Dirichlet 分布: M1 = np.random.default_rng().dirichlet(np.ones(n),size=(n)). 然后,我linalg.qr()之前使用过类似的东西,我得到了 10000x10000 的矩阵M1 = np.random.normal(size=(n,n))

我的问题是:

  1. Numpy 的np.linalg.qr()方法是否真的使用了 Householder 变换?或者可能是吉文斯轮换?
  2. 为什么 Gram-Schmidt 过程比 慢得多np.linalg.qr()
  3. 我知道狄利克雷过程会产生一个几乎正交的矩阵。是不是因为我们正在创建一万维,所以很可能随机得到一个与其他所有向量正交的向量?np.linalg.qr()不关心矩阵与正交性的接近程度。
  4. 有没有更快的方法来生成随机正交矩阵?我可以对我的代码进行任何优化以使其更快/更高效吗?

编辑:cp.linalg.qr()在我的 2080ti 上,cupy 在同一个 10,000x10,000 随机矩阵上只需要 16 秒,而不是 CPU 上的 70 秒(8 核 @3.7GHz,多线程,16GB RAM 和 512GB SSD)。

0 投票
0 回答
128 浏览

bayesian - PyMC3 中的分层多项式模型

我想比较两组多项式 (k=3) 观测值的 Dirichlet 超参数。

我可以分开装,而且它们看起来很好。

第一组 (N=10) 观察是从 [.30 .60 .10] 的 alpha 向量模拟的,计数在 50 左右变化

后验和轨迹看起来不错,并且使用 hyper_param1 的每个维度的后验均值的狄利克雷分布正好位于它应该在的位置:

在此处输入图像描述

第二组 (N=11) 观察是从 [.30 .10 .60] 的 alpha 向量模拟的,计数再次在 50 左右变化:

同样,后验、轨迹和 Dirichlet 分布看起来很好: 在此处输入图像描述

我尝试使用通常在 PyMC3 中工作的索引格式将这些组合成一个层次模型:

该模型几乎不适合。>100 的分歧,后验/轨迹是一团糟,狄利克雷分布相当缺乏信息:

在此处输入图像描述

我尝试增加对调整的接受要求(最高 0.99),增加调整样本,hyper_params 上的各种先验(gamma,StudentsT,normal),还尝试拟合参数向量的指数以防负值是不知何故出现并造成混乱......没有任何效果。要么我在模型设置上做一些愚蠢的事情,要么这是一些需要解决的偏离中心/中心问题?

PyMC3 版本:3.8 Python 版本:3.8 操作系统:Linux (PopOS v20.10) IDE:Spyder v4.2.1

0 投票
1 回答
88 浏览

r - 分层狄利克雷回归(锯齿)...过拟合

早上好,我需要社区帮助以了解编写此模型时出现的一些问题。我的目标是使用“log_GDP”(对数尺度的国内生产总值)和“log_h”(对数尺度每 1000 人的医院床位)作为预测因子来建模死亡比例的原因

  • y:3 列,这些列是多年来观察到的死亡比例。
  • x1:“log_GDP”(对数刻度的国内生产总值)
  • x2:“log_h”(每 1,000 人的对数病床数)

从上图中的估计结果可以看出,我得到了很高的噪声水平。在我只使用一个协变量即 log_GDP 工作的地方,我得到了平滑的结果

这里的型号规格:

在此处输入图像描述

这里模拟数据:

锯齿模型

收集系数并估计比例

预测和观察。价值数据库

阴谋

在此处输入图像描述