蔡瑞胸的《金融时间序列分析》中第10章有个DVEC模型,因为找不到程序包,我自己编了一个估计DVEC(1,1)的程序,但是估计结果不是很理想,程序如下,请各位大神指教:
dvec<-function (rt)
{
if (!is.matrix(rt))
rt = as.matrix(rt)
nT = dim(rt)[1]
k = dim(rt)[2]
mu = apply(rt, 2, mean)
S = 1e-06
S1 = -0.5
A0 = matrix(c(0.3, 0.2, 0.2, 0.3), k, k)
A1 = matrix(c(0.1, 0.02, 0.02, 0.1), k, k)
B1 = matrix(c(0.8, 0.1, 0.1, 0.8), k, k)
par = c(mu1 = mu[1], mu2 = mu[2],
A011 = A0[1, 1], A021 = A0[2, 1], A012 = A0[2, 1], A022 = A0[2,2],
A11 = A1[1, 1], A21 = A1[2, 1], A12 = A1[2, 1], A22 = A1[2,2],
B11 = B1[1, 1], B21 = B1[2, 1], B12 = B1[2, 1], B22 = B1[2, 2])
c1 = c(mu1 = -10 * abs(mu[1]), mu2 = -10 * abs(mu[2]),
A011 = A0[1, 1] * 0.2, A021 = A0[2, 1]* 0.2,
A012 = A0[2, 1]* 0.2, A022 = A0[2, 2] * 0.2,
A11 = S, A21 = S1, A12 = S1, A22 = S,
B11 = S, B21 = S1, B12 = S1, B22 = S)
c2 = c(mu1 = 10 * abs(mu[1]), mu2 = 10 * abs(mu[2]),
A011 = A0[1, 1] * 1.1, A021 =A0[2, 1] * 1.1,
A012 = A0[2, 1]* 1.1, A022 = A0[2, 2]* 1.1,
A11 = 1 - S, A21 = -S1, A12 = -S1, A22 = 1 - S,
B11 = 1 - S, B21 = -S1, B12 = -S1, B22 = 1 - S)
mlikeG <- function(par, rt= rt) {
nT = dim(rt)[1]
k = dim(rt)[2]
Cov1 = cov(rt)
mu1 = par[1]
mu2 = par[2]
A011 = par[3]
A021 = par[4]
A012 = par[4]
A022 = par[5]
A11 = par[6]
A21 = par[7]
A12 = par[7]
A22 = par[8]
B11 = par[9]
B21 = par[10]
B12 = par[10]
B22 = par[11]
A0 = matrix(c(A011, A021, A012, A022), k, k)
A1 = matrix(c(A11, A21, A12, A22), k, k)
B1 = matrix(c(B11, B21, B12, B22), k, k)
res = cbind(rt[, 1] - mu1, rt[, 2] - mu2)
Sig = matrix(c(Cov1), 1, 4) #初始协方差矩阵
library(mvtnorm)
llike = 0
for (t in 2:nT) {
at=as.matrix(res[t-1,],nrow=2,ncol=1)
Sigt = A0 + A1*(at%*%t(at))+ B1 * matrix(Sig[t - 1, ], k, k)
Sig = rbind(Sig, c(Sigt))
d1 = dmvnorm(res[t, ], mean = rep(0, k), Sigt, log = TRUE)
llike = llike - d1
}
llike
} #似然函数
fit = nlminb(start = par, objective = mlikeG, rt = rt,lower = c1, upper = c2)
est=fit$par
dvec<-list(estimation=est,Sigma=Sig)
}
估计结果中的矩阵应该是对角矩阵,可是我的输出结果不是对角矩阵,研究了很久,还是没做出来,只能求助给位大神了,谢谢!如果有程序,希望能分享一下,急用啊,谢谢~~~


雷达卡




京公网安备 11010802022788号







