Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的数值二重积分_R_Numerical Integration - Fatal编程技术网

R中的数值二重积分

R中的数值二重积分,r,numerical-integration,R,Numerical Integration,我试图用数值计算R中二重积分的值。我的代码和我试图编写的方程如下: Expectedrsquare<-function(theta=.05,sigma=.0135,alpha=0.05,r0=0,Maturity=20){ library(mvtnorm) DoubleIntegration<-integrate(function(s) { sapply(s, function(s) { integrate(function(u){ Mus<- exp(-

我试图用数值计算R中二重积分的值。我的代码和我试图编写的方程如下:

Expectedrsquare<-function(theta=.05,sigma=.0135,alpha=0.05,r0=0,Maturity=20){

library(mvtnorm)

DoubleIntegration<-integrate(function(s) {

sapply(s, function(s) {

  integrate(function(u){

    Mus<- exp(-alpha*s)*r0+(1-exp(-alpha*s))*theta

    Sigmas<-((sigma^2/(2*alpha))*(1-exp(-2*alpha*s)))^0.5

    Muu<- exp(-alpha*u)*r0+(1-exp(-alpha*u))*theta

    Sigmau<-((sigma^2/(2*alpha))*(1-exp(-2*alpha*u)))^0.5

    Cov<-(sigma^2/(2*alpha))*exp(-alpha*(s-u))*(1-exp(-2*alpha*u))

    Chi<-Cov/(Sigmas*Sigmau)

    Zetas<-Mus/Sigmas

    Zetau<-Muu/Sigmau
         Phi2<-pmvnorm(lower=-Inf*c(1,1),upper=c(-Zetas,-Zetau),mean=c(0,0),corr=rbind(c(1,Chi),c(Chi,1)))

    IntegralFunction<-(Mus*Muu+Cov)*(1-pnorm(-Zetas)-pnorm(-Zetau)-Phi2[1])+
      Sigmas*Muu*dnorm(Zetas)*pnorm((Zetau-Chi*Zetas)/((1-Chi^2)^0.5))+
      Sigmau*Mus*dnorm(Zetau)*pnorm((Zetas-Chi*Zetau)/((1-Chi^2)^0.5))+
      Sigmas*Sigmau*(((1-Chi^2)/(2*pi))^0.5)*dnorm(((Zetau^2-2*Chi*Zetas*Zetau+Zetas^2)/((1-Chi^2)))^0.5)

    return(IntegralFunction)

    }, 0, s)$value

  })

}, 0, Maturity)

return(2*DoubleIntegration)
}
有人能帮我解决这个错误吗?或者提出另一种解决问题的方法


谢谢。

错误很明显:

相关性参数和下限参数的长度应相同

lower  =-Inf*c(1,1)
correl = rbind(c(1,Chi),c(Chi,1)
我认为这个问题来自Chi的计算


Sigmau
Sigmas
的预期维度是什么??我想问题出在Sigmas上。

终于解决了。只需在一个循环中分别计算二元CDF并将其矢量化

Zetas<-Mus/Sigmas
Zetau<-Muu/Sigmau
L<-length(u)
Phi2<-vector(length=L)
for(i in 1:L){
     t<-pmvnorm(lower=-Inf*c(1,1),upper=c(-Zetas,-Zetau[i]),mean=c(0,0),
                corr=rbind(c(1,Chi[i]),c(Chi[i],1)))
      Phi2[i]<-t[1]
    }
IntegralFunction <- (Mus*Muu+Cov)*(1-pnorm(-Zetas)-pnorm(-Zetau)-Phi2)+
      Sigmas*Muu*dnorm(Zetas)*pnorm((Zetau-Chi*Zetas)/((1-Chi^2)^0.5))+
      Sigmau*Mus*dnorm(Zetau)*pnorm((Zetas-Chi*Zetau)/((1-Chi^2)^0.5))+
      Sigmas*Sigmau*(((1-Chi^2)/(2*pi))^0.5)*
                    dnorm(((Zetau^2-2*Chi*Zetas*Zetau+Zetas^2)/((1-Chi^2)))^0.5)

Zetastank感谢您的建议。我是R的新手,不太熟悉它的调试。将尝试在调试模式下使用该程序,并查看哪些不起作用。@user2566834可能可以帮助您进行调试。因此,我在调试模式下运行了代码,问题是Sigmau(以及所有与u相关的变量,包括u本身),因为它是一个数字。所以s和所有相关变量都是简单数,u和所有相关变量都是向量。这就是PMV功能失效的地方。
Zetas<-Mus/Sigmas
Zetau<-Muu/Sigmau
L<-length(u)
Phi2<-vector(length=L)
for(i in 1:L){
     t<-pmvnorm(lower=-Inf*c(1,1),upper=c(-Zetas,-Zetau[i]),mean=c(0,0),
                corr=rbind(c(1,Chi[i]),c(Chi[i],1)))
      Phi2[i]<-t[1]
    }
IntegralFunction <- (Mus*Muu+Cov)*(1-pnorm(-Zetas)-pnorm(-Zetau)-Phi2)+
      Sigmas*Muu*dnorm(Zetas)*pnorm((Zetau-Chi*Zetas)/((1-Chi^2)^0.5))+
      Sigmau*Mus*dnorm(Zetau)*pnorm((Zetas-Chi*Zetau)/((1-Chi^2)^0.5))+
      Sigmas*Sigmau*(((1-Chi^2)/(2*pi))^0.5)*
                    dnorm(((Zetau^2-2*Chi*Zetas*Zetau+Zetas^2)/((1-Chi^2)))^0.5)