【问题标题】:How to vectorize likelihood calculation under multiple parameters?多参数下如何向量化似然计算?
【发布时间】:2019-04-09 05:16:52
【问题描述】:

我正在尝试实现伯努利混合,并且想知道如何在不循环的情况下正确地对计算进行矢量化。

我尝试了各种版本的 apply 但无法获得所需的输出 (dim = c(5,4,2)。我的组件参数应该在列表中而不是矩阵中吗?

set.seed(123)

#Data
X <- matrix(sample(c(0,1), 20, replace = TRUE, prob = c(.6, .4)),
               nrow = 5, ncol = 4)

#Params
parameters <-  matrix(runif(8), nrow = 2, ncol = 4)

#Would like to vectorize this
dbinom(X, 1, parameters[1,], log = TRUE)
dbinom(X, 1, parameters[2,], log = TRUE)

【问题讨论】:

  • 你试过apply(parameters, 1, function(x) dbinom(X, 1, x, log = TRUE))

标签: r mixture-model expectation-maximization


【解决方案1】:

我们用apply遍历parameters的行并应用dbinom

out1 <- do.call(`c`, apply(parameters, 1, function(x) 
               list(dbinom(X, 1, x, log = TRUE))))

identical(out1[[1]], dbinom(X, 1, parameters[1,], log = TRUE))
#[1] TRUE

identical(out1[[2]], dbinom(X, 1, parameters[2,], log = TRUE))
#[1] TRUE

或使用pmap

library(purrr)
out2 <- pmap(list(x = list(X), size = 1, prob = split(parameters, 
              row(parameters)), log = TRUE), dbinom)

identical(out1, out2)
#[1] TRUE

【讨论】:

  • 感谢您的帮助和不同的选择。很高兴看到一个 purrr 解决方案。
猜你喜欢
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
相关资源
最近更新 更多