r - 求解与多元正态密度相关的二重积分

标签 r numerical-integration

我正在尝试求解与已知均值向量和协方差矩阵的多元正态密度相关的二重积分:

library(cubature)

mu1 <- matrix(c(3,3), nrow=2)
sigma1 <- rbind(c(4,-1), c(-1,6))

quadratic <- function(a,b) {
  X <- matrix(c(a,b),nrow=2)
  Q <- (-1/2)*t(X-mu1)%*%solve(sigma1)%*%(X-mu1)
}

NormalPDF <- function(x1,x2) {
  f <- (1/(2*pi))*(1/sqrt(det(sigma1)))*exp(quadratic(x1,x2))
}

# Solving for P(1 < X1 < 3, 1 < X2 < 3)
P <- adaptIntegrate(NormalPDF(x1,x2), c(1,3), c(1,3))

但是,它一直给我错误:

Error in matrix(c(a, b), nrow = 2) : object 'x1' not found

我的代码有任何明显的错误吗?

最佳答案

HubertL 指出第一个参数应该是一个函数,而不是带有参数的函数调用。假设该函数将接受“x”参数,即单个长度为 2 的向量,因此需要修改 NormalPDF 函数的参数以及对辅助函数的调用。另一个错误是如何设置限制。

考虑一下:

library(cubature)

mu1 <- matrix(c(3,3), nrow=2)
sigma1 <- rbind(c(4,-1), c(-1,6))

quadratic <- function(a,b) {
  X <- matrix(c(a,b),nrow=2)
  Q <- (-1/2)*t(X-mu1)%*%solve(sigma1)%*%(X-mu1)
}

NormalPDF <- function(x) {
  f <- (1/(2*pi))*(1/sqrt(det(sigma1)))*exp(quadratic(x[1],x[2]))
}
# Solving for P(1 < X1 < 3, 1 < X2 < 3)
P <- adaptIntegrate( NormalPDF, lowerLimit= c(1,1),  upperLimit=c(3,3))
P
#==============
$integral
[1] 0.09737084

$error
[1] 1.131395e-08

$functionEvaluations
[1] 17

$returnCode
[1] 0

这将正方形上的密度与 (1,1) 处的“左下角”和 (3,3) 处的“右上角”进行积分。问题中的调用始终返回 0,因为域是单个点。如果您要使用它执行任何“数字”操作,则需要使用 P$integral 从列表中提取。结果小于 0.25 似乎是合理的,因为我们仅在四分之一平面中从 (3,3) 处的最大值进行评估。

关于r - 求解与多元正态密度相关的二重积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40476792/

相关文章:

python - f2py,返回数组的 Python 函数(向量值函数)

matlab - 找不到显式积分

r - 包 ‘randomForest ’ 不可用(对于 R 版本 4.0.2)

r - 库中出现错误(插入符号): there is no package called ‘caret’

r - 为不在包中的 R6 类创建 Rd 文档文件

python - 在Python中更快地计算二重积分(就像MatLab的integral2)

matlab - 如何克服数值积分中的奇点(在 Matlab 或 Mathematica 中)

python - 使用 SciPy 集成返回矩阵或数组的函数

r - 将 PDF 从 iframe 抓取到 R

r - 十六进制代码 (\x) 和 unicode (\u) 字符有什么区别?