整合涉及二元正常

时间:2016-12-19 23:39:08

标签: r integration

我正在使用以下代码在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进行矢量化以创建包装函数的方法。但我不确定如何继续以及为什么有必要。

1 个答案:

答案 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