Julia 将lambdas的向量传递给Poisson(),或关于惯用函数组合的指导

Julia 将lambdas的向量传递给Poisson(),或关于惯用函数组合的指导,julia,Julia,我想通过做一些贝叶斯分析来学习一点Julia。在中,他描述了从泊松-伽马模型的后验预测分布中采样的过程,其中他: 从gamma分布中采样值 通过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。在中,他描述了从泊松-伽马模型的后验预测分布中采样的过程,其中他:

  • 从gamma分布中采样值
  • 通过lambda向量从泊松分布中采样值
  • 这是R中的情况:

    a <- 2
    b <- 1
    
    sy1 <- 217; n1 <- 111
    
    theta1.mc <- rgamma(1000, a+sy1, b+n1)
    y1.mc <- rpois(1000, theta1.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实际上不是一个函数,它是一个类型构造函数,并且返回一个对象。因此,θ上的矢量化并没有真正意义,因为它不会构造一个对象,而是许多对象——这将需要另一个步骤来对每个生成的对象调用rand。

    啊,我忘了Julia有类似Python的列表理解。这张地图正是我想要的。您知道有没有一种逻辑可以使这些分布成为构造函数而不是像R中那样的函数?只是为了避免(r、d、q)POI命名?还是我错过了更棒的东西?e、 g.为了实现漂亮的共轭分布特性?让分布成为对象意味着您只需要使用多个分派就可以对分布进行大量计算。共轭先验的东西就是一个例子:我可以要求在给定先验分布和观测数据的情况下得到后验概率,它可以简化为从一个分布到另一个分布的函数。其他的例子包括在分布上做循环,在这里你可以做很多类似的事情,比如计算随机样本,拟合模型和观察收敛性。使用类型使这种编程更通用/抽象。感谢您的解释。同时也感谢你为茱莉亚付出的努力!我看到你的名字出现在我可能使用的大多数软件包上。
    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]