我正在尝试在 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)
}
当我编译并运行代码时,出现以下错误:
Error in checkmvArgs(lower = lower, upper = upper, mean = mean, corr = corr, :
‘diag(corr)’ and ‘lower’ are of different length
有人可以帮我解决错误或建议另一种解决问题的方法。
谢谢。