0

我正在使用 R 进行一些多变量分析。对于这项工作,我需要集成三元 PDF。因为我想在 MLE 中使用它,所以需要一个集成向量。有没有办法让Integrate一个向量而不是一个值。

这是一个简单的例子:

f1=function(x, y, z) {dmvnorm(x=as.matrix(cbind(x,y,z)), mean=c(0,0,0), sigma=sigma)}
f1(x=c(1,1,1), y=c(1,1,1), z=c(1,1,1))
integrate(Vectorize(function(x) {f1(x=c(1,1,1), y=c(1,1,1), z=c(1,1,1))}), lower = -   Inf, upper = -1)$value

Error in integrate(Vectorize(function(x) { : evaluation of function gave a result of wrong length
4

1 回答 1

1

要将一个变量的函数与向量值进行积分,可以将函数转换为 n 个具有实值的函数,并对它们中的每一个进行积分。这是非常低效的(当整合第 i 个函数时,我评估所有函数,并丢弃除一个值之外的所有值)。

# Function to integrate
d <- rnorm(10)
f <- function(x) dnorm(d, mean=x)

# Integrate those n functions separately.
n <- length(f(1))
r <- sapply( 1:n, 
  function(i) integrate( 
    Vectorize(function(x) f(x)[i]), 
    lower=-Inf, upper=0 
  )$value 
)
r

对于二维积分,您可以检查pracma::integral2,但可能需要相同的操作(将具有向量值的二元函数转换为具有实值的 n 个二元函数)。

于 2013-04-17T20:47:34.767 回答