此帖目的是:一来请大家指正;二来也看看大家有无改进的办法(因为我发现用此程序,WINBUGS好像老是数值计算溢出,所以如果初始估计值设不好,或PRIOR设的范围太大,就不能顺利运算此程序)。
注:我这里用到SV模型(似乎是Heston)形式如下:dS/S=mu*dt+v[t]*dW1, 其中V又是随机变量,其随机过程是: V[t+dt]-V[t]=(theta-alpha*V[t])*dt+Sqr(V[t])*sigma*dW2, dW1与dW2独立,简化起见mu=0 (因为dt很小时,mu*dt此项可忽略,即mu=0)。下面是WINBUGS程序的例子(根据50个测试用收益率数据(dS/S,在X数组内),来估计Alpha,theta,sigma这些参数(下面的txt附件内容已贴在下面,不必看附件):
MODEL {
for( j in 1 : N-1 ) {
v[j+1] ~ dnorm(mu[j], tau[j])
mu[j]<- (theta-alpha*v[j])*dt+v[j]
tau[j]<- 1.0/v[j]/sigma/sigma/dt
}
for( j in 1 : N ) {
x[j] ~ dnorm(0.0, taux[j]) #Note: x is just dS/S
taux[j]<- 1.0/v[j]/dt
}
v[1] ~ dunif(0.03,0.06)
sigma ~ dunif(0.6,1.2)
theta ~ dunif(0.7,0.9)
alpha ~ dunif(1.7,2.3)
}
DATA
list(N=50, dt=0.01, x=c(0.0026500745, 0.0480901772, 0.0107189619, 0.0170098433,
-0.0095772109, -0.0015959556, 0.0160971931, 0.0074017512, -0.0104007234, -0.0072990382, -0.0095561268,
-0.0200387847, 0.0111049423, -0.0034396885, -0.0861650005, 0.0150379343, 0.0052606306, -0.0322772593,
-0.0263788879, 0.0016784448, 0.0157479027, 0.0455850248, 0.0089219091, -0.0046011399, -0.0079556519, 0.0010855852, -0.0697741348, -0.0120694957, 0.0583712209, 0.0385789937, 0.0136737196,
-0.0170208015, -0.0739999498, -0.0092948589, -0.1007966451, 0.0089883474, -0.0396835519, 0.0045423091,
-0.0897183852, 0.0568423347, 0.0853861699, -0.0229354002, -0.1113926165, 0.0762002942, -0.0815690052,
-0.0611300245, -0.0699412850, 0.0166096849, -0.0001466746, 0.0810738261))
FIRST INIT
list(sigma=0.9, alpha=2.0, theta=0.8, v=c(0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10))
SECOND INIT
list(sigma=0.8, alpha=2.2, theta=0.9, v=c(0.05, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10))
Third INIT
list(sigma=1.0, alpha=1.8, theta=0.7, v=c(0.045, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10))