全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
3072 1
2014-10-13
            蔡瑞胸的《金融时间序列分析》中第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)
}
估计结果中的矩阵应该是对角矩阵,可是我的输出结果不是对角矩阵,研究了很久,还是没做出来,只能求助给位大神了,谢谢!如果有程序,希望能分享一下,急用啊,谢谢~~~

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-11-2 16:35:23
你这个程序的设置参数的初始值、上下界的个数与估计的参数个数不匹配!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群