0

Rを使用して多変量解析を行っています。この作業では、三変量 PDF を統合する必要があります。これを MLE で使用したいので、統合のベクトルが必要です。Integrate1 つの値の代わりにベクトルをもたらす方法はありますか。

簡単な例を次に示します。

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

1 変数の関数をベクトル値で積分するには、関数を実数値を持つ n 個の関数に変換し、それぞれを積分します。これは非常に非効率的です (i 番目の関数を統合するとき、すべての関数を評価し、1 つの値を除いてすべて破棄します)。

# 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

2 次元積分の場合は をチェックできますがpracma::integral2、おそらく同じ操作 (ベクトル値を持つ二変量関数を実数値を持つ n 二変量関数に変換すること) が必要になります。

于 2013-04-17T20:47:34.767 に答える