我尝试根据给定联合密度的特定值的联合高斯概率密度函数来数值计算边缘致密函数。我使用
dmvnorm
包中的 mvtnorm
:
library(mvtnorm)
myfun = function(x, y, mu, ht) {
dmvnorm(c(x, y), mean = mu, sigma = ht)
}
但是当我运行代码时,
integrate
显示x and mean have non-conforming size
:
integrate(myfun,
lower = -10,
upper = 2,
y = -2,
mu = c(0.06, 0.03),
ht = diag(2))
当我测试
myfun(-1,-2, mu = c(0.06, 0.03), ht = diag(2))
时,该功能有效。但我不知道为什么integrate
功能不起作用。
函数的编写方式,它一次只能处理单个
x
值。如果您一次传递多个 x
值(如 integrate
那样),单个 y
值将在您调用 dmvnorm
时粘贴在其末尾,而不是被解释为固定 y
价值。
您可以使用
cbind
而不是 c
来解决此问题,因为这将在第一列中创建 x 值矩阵,第二列填充固定的 y 值:
library(mvtnorm)
myfun = function(x, y, mu, ht) {
dmvnorm(cbind(x, y), mean = mu, sigma = ht)
}
integrate(myfun,
lower = -10,
upper = 2,
y = -2,
mu = c(0.06, 0.03),
ht = diag(2))
#> 0.04949283 with absolute error < 7.5e-09