控制台输出为
[1] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[19] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[37] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[55] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[73] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[91] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[109] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[127] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[145] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[163] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[181] NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
In sqrt(B * B - C) : 产生了NaNs
我检验了一遍,和小于0是没有关系的,应该是循环上出了问题,R自带的向量循环的确让我这种初学者防不胜防,但实在不明白哪里除了错。
我仔细看了看程序,没有发现似然函数的构建涉及到迭代问题,只是一个for循环重复计算似然函数而已,但始终调试不出来,不知道是怎么回事,代码如下:
- logy<-read.csv("C:/sh/citicf/R/510050.csv")
- logy
- ly<-array(logy$y)
- ly
- f<-function(theta)
- {
- vt<-0.23
- l<-0.05
- miu<-theta[1]
- alpha<-theta[2]
- beta<-theta[3]
- sigma<-theta[4]
- rho<-theta[5]
- deltaT<-1/365
- for(i in 2:318)
- {
- beta1<-1-beta*deltaT
- D<-2*3.1415926*rho*sqrt(1-rho*rho)*deltaT
- deltayt<-ly[i]-ly[i-1]
- B<--alpha*deltaT-rho*sigma*(deltayt-miu*deltaT)
- C<-alpha*alpha*deltaT*deltaT+2*rho*sigma*alpha*deltaT*(deltayt-miu*deltaT)+sigma*sigma*(deltayt-miu*deltaT)*(deltayt-miu*deltaT)-2*vt*vt*a*sigma*sigma*(1-rho*rho)*deltaT
- vt1<-sqrt(B*B-C)-B
- a<-(beta1*beta1+rho*sigma*beta1*deltaT+sigma*sigma*deltaT*deltaT/4)/(2*sigma*sigma*(1-rho*rho)*deltaT)
- bt<-((vt1-alpha*deltaT)*(vt1-alpha*deltaT)-2*rho*sigma*(vt1-alpha*deltaT)*(deltayt-miu*deltaT)+sigma*sigma*(deltayt-miu*deltaT)*(deltayt-miu*deltaT))/(2*sigma*sigma*(1-rho*rho)*deltaT)
- dt<-exp(((2*beta1+rho*sigma*deltaT)*(vt-alpha*deltaT)-(2*rho*sigma*beta1+sigma*sigma*deltaT)*(deltayt-miu*deltaT))/(2*sigma*sigma*(1-rho*rho)*deltaT))/D
- lt<-dt*(a*bt)^(-0.25)*exp(-2*sqrt(a*bt))
- l<-l*lt
- vt<-vt1
- }
- return (-l)
-
-
- }
- f(c(0.05,0.15,0.08,0.25,0.03))


雷达卡



京公网安备 11010802022788号







