向量的积分返回一个值

时间:2013-04-17 19:57:41

标签: r

我正在使用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

1 个答案:

答案 0 :(得分: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个双变量函数。