r - 多参数下如何向量化似然计算?
问题描述
我正在尝试实现伯努利混合,并且想知道如何在不循环的情况下正确地对计算进行矢量化。
我尝试了各种版本的应用,但无法获得所需的输出(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)
解决方案
我们遍历parameters
with的行apply
并应用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
推荐阅读
- windows-store-apps - 从适用于企业的 Windows 应用商店下载应用程序时出现错误 0x8007000D
- android - 在自定义回收器适配器中滚动文本视图
- javascript - 如何在 NodeJS 中调用导出的函数?哪个可以嵌套?
- javascript - 在节点 JS 中打包 .tar.gz 文件时忽略某些文件
- sql - 如何重新排列 UNION 查询的结果集?
- javascript - 放置 Javascript 承诺的问题
- php - 将类添加到转发器内特定行中的特定字段 - 高级自定义字段
- arrays - 在 O(log n) 中的未排序数组中搜索值
- jquery - 如何在jqgrid的列标题中为特定图标添加图标?
- javascript - Vue - 将数组从子组件绑定到父组件