我正在使用以下代码在R中进行单一集成:
MU <- c(1,3)
Sigma <- matrix(c(1,0.5,0.5,1.5),2,2)
y0 <- 3
integrate(function(xx,MU,Sigma,y0) {
dnorm(xx,mean=MU[1],sd=Sigma[1,1])*pmvnorm(lower=c
(-Inf,-Inf),upper=c(xx,y0),mean=MU,sigma=Sigma)},
y0=y0, MU=MU,Sigma=Sigma, lower=-Inf, upper=Inf,subdivisions=1000)
但是我收到了错误消息:
checkmvArgs出错(lower = lower,upper = upper,mean = mean,corr = corr,: 'diag(sigma)'和'lower'的长度不同。
我已经搜索了线索,并且提到了一些关于对integrant进行矢量化以创建包装函数的方法。但我不确定如何继续以及为什么有必要。
答案 0 :(得分:1)
是的,您必须对被积向量进行矢量化处理。
MU <- c(1, 3)
Sigma <- matrix(c(1, 0.5, 0.5, 1.5), 2, 2)
y0 <- 3
integrate(
Vectorize(function(xx, MU, Sigma, y0) {
dnorm(xx, mean = MU[1], sd = Sigma[1, 1]) * pmvnorm(
lower = c(-Inf, -Inf),
upper = c(xx, y0),
mean = MU,
sigma = Sigma
)
}, vectorize.args = "xx"),
y0 = y0,
MU = MU,
Sigma = Sigma,
lower = -Inf,
upper = Inf,
subdivisions = 1000
)
结果:
0.2966074 with absolute error < 7e-06