r-如何在多个参数下矢量化似然计算



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

我尝试了各种版本的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)

我们循环通过parametersapply的行,并应用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

相关内容

  • 没有找到相关文章

最新更新