如何定义和计算联合高斯分布的边际致密函数?

问题描述 投票:0回答:1

我尝试根据给定联合密度的特定值的联合高斯概率密度函数来数值计算边缘致密函数。我使用

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
功能不起作用。

r integrate
1个回答
0
投票

函数的编写方式,它一次只能处理单个

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
© www.soinside.com 2019 - 2024. All rights reserved.