gpt4 book ai didi

julia - 将 lambda 向量传递给 Poisson(),或惯用函数组合指南

转载 作者:行者123 更新时间:2023-12-02 01:49:29 24 4
gpt4 key购买 nike

我正在尝试通过做一些贝叶斯分析来学习一点 Julia。在 Peter Hoff's textbook ,他描述了从泊松 Gamma 模型的后验预测分布中抽样的过程,其中他:

  1. Gamma 分布的样本值
  2. 从泊松分布中抽样值,传递 lambda 向量

这是在 R 中的样子:

a <- 2
b <- 1

sy1 <- 217; n1 <- 111

theta1.mc <- rgamma(1000, a+sy1, b+n1)
y1.mc <- rpois(1000, theta1.mc)

在 Julia 中,我看到分布不能采用参数向量。所以,我最终做了这样的事情:

using Distributions

a = 2
b = 1

sy1 = 217; n1 = 111

theta_mc = rand(Gamma(a+217, 1/(b+n1)), 5000)
y1_mc = map(x -> rand(Poisson(x)), theta_mc)

虽然我最初对分布函数不采用向量并像 R™ 一样工作感到厌恶,但我喜欢我不需要多次设置样本数。也就是说,我不确定我是否按照惯用方式来做这件事,无论是在人们如何使用分发包方面,还是在更一般的情况下如何组合函数方面。

谁能提出比我的示例代码更好、更惯用的方法?

最佳答案

我通常会做类似下面的事情,它使用列表理解:

a, b = 2, 1
sy1, n1 = 217, 111

theta_mc = rand(Gamma(a + sy1, 1 / (b + n1)), 1000)
y1_mc = [rand(Poisson(theta)) for theta in theta_mc]

混淆的一个来源可能是 Poisson 并不是一个真正的函数,它是一个类型构造函数,它返回一个对象。因此,对 theta 的矢量化实际上没有意义,因为这不会构造一个对象,而是构造多个对象——然后需要另一个步骤来对每个生成的对象调用 rand。

关于julia - 将 lambda 向量传递给 Poisson(),或惯用函数组合指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23690978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com