简体   繁体   English

如何在多个参数下向量化似然计算?

[英]How to vectorize likelihood calculation under multiple parameters?

I am trying to implement a bernoulli mixture and was wondering how to vectorize the calculations correctly without looping. 我正在尝试实现bernoulli混合,并且想知道如何正确向量化计算而不会循环。

I have tried various versions of apply but can't get the desired output (dim = c(5,4,2). Should my component parameters be in a list instead of a matrix? 我尝试过各种版本的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)

We loop through the rows of parameters with apply and apply the dbinom 我们使用apply dbinom 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

Or using pmap 或使用pmap

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

identical(out1, out2)
#[1] TRUE

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM