2016-05-27 10 views
0

オンラインでは、ADFテスト用のMATLABコードとSADFおよびDFテスト用のテストが見つかりました。さて、このmatlabコードをRに変換するために、45行目はまだ私にエラーを与える傾向があります。MatlabからRへのADFテスト変換

# if mflag=1 use ADF with constant and without trend 
    # if mlag=2 use ADF with constant and trend 
    # if mlag=3 use ADF without constant and trend 

    #ADF 

    #Set data sample equal to y to start 
    y=Data$OIL.P 

    #Start ADF test 
    ADF_FL<- function(y,adflag,mflag) 
    { 
     t1=dim(y,1)-1 
     const=matrix(1,t1,1) 
     trend=t(seq(1,1,by=t1)) #or trend=t(c(seq(1,1,by=t)1))) 

     y1=y(dim(y,1)-t1:dim(y,1)-1) 
     dy=y(2:dim(y, 1))-y(1:dim(y,1)-1) 
     dy0=dy(dim(dy,1)-t1+1:dim(dy,1)) 
     x=y1 

     if(mflag==1){ 
     x=c(x,const) 
     } else{ 
     x=c(x, const, trend) 
     } 

     x1=x 

     t2=t1-adflag 
     x2=x1(dim(x1,1)-t2+1:dim(x1,1),) #from k+1 to the end (including y1 and x) 
     dy01=dy(dim(dy0,1)-t2+1:dim(dy0,1)) #from k+1 to the end (including dy0) 

     if(adflag>0){ 
     j=1 
     while(j<=adflag){ 
      x2=[x2 dy(dim(dy,1)-t2+1-j:dim(dy,1)-j)] #problem in this line 
      j=j+1 
     } 
     } 

     beta=((t(x2))*x2)^(-1)*(t(x2)*dy01) 
     eps=dy01-x2*beta 

     if(mflag==1){ 
     sign=sqrt(diag(t(eps)*eps/(t2-adflag-2)*(t(x2)*x2)^(-1))) 
     } else{ 
     sign=sqrt(diag(t(eps)*eps/(t2-adflag-3)*(t(x2)*x2)^(-1))) 
     } 

     tvalue=beta/sign 
     show(tvalue) 
    } 

オリジナルのMATLABコード:

function [estm]=ADF_FL(y,adflag,mflag) 

     t1=size(y,1)-1; 
     const=ones(t1,1); 
     trend=1:1:t1;trend=trend'; 

     y1 = y(size(y,1)-t1:size(y,1)-1); 
     dy = y(2:size(y,1)) - y(1:size(y,1)-1); 
     dy0 = dy(size(dy,1)-t1+1:size(dy,1)); 
     x=y1; 

     if mflag==1; x=[x const]; end; 
     if mflag==2; x=[x const trend]; end; 
     % if mflag==3; x=x; end; 

     x1=x; 

     t2=t1-adflag; 
     x2=x1(size(x1,1)-t2+1:size(x1,1),:);   % from k+1 to the end (including y1 and x)[email protected] 
     dy01=dy0(size(dy0,1)-t2+1:size(dy0,1));  % from k+1 to the end (including dy0)[email protected] 

     if adflag>0; 
     j=1; 
     while j<=adflag; 
     x2=[x2 dy(size(dy,1)-t2+1-j:size(dy,1)-j)];  %including k lag variables of dy in [email protected] 
     j=j+1; 
     end; 
    end; 

     beta =(x2'*x2)^(-1)*(x2'*dy01);      % model [email protected] 
     eps = dy01 - x2*beta; 

     if mflag==1; sig = sqrt(diag(eps'*eps/(t2-adflag-2)*(x2'*x2)^(-1))); end; 
     if mflag==2; sig = sqrt(diag(eps'*eps/(t2-adflag-3)*(x2'*x2)^(-1))); end; 
     if mflag==3; sig = sqrt(diag(eps'*eps/(t2-adflag-1)*(x2'*x2)^(-1))); end; 

     tvalue=beta./sig; 

     estm=tvalue(1); 

は、誰かが、この中で私を助けてもらえますか?

おかげで、

デビッド

答えて

1

私はRで符号化された完全なコードは、ここではそれがあることを持っています。 この種のコーディングでは、yがベクトルであると仮定しているため、最初のステップでは行列に変換しています。それは完全にADFの統計量を見つけるために働いて、私はそれをfUnitRoot adfTestと比較し、同じ結果を出します。

ADF_FL = function(y,adflag,mflag){ 
    y = as.matrix(y, nrow=1) 
    t1 = nrow(y)-1 
    constant = matrix(1,nrow=t1,ncol=1) 
    trend = as.matrix(seq(1,t1,by=1),ncol=1) 

    y1 = as.matrix(y[(nrow(y)-t1):(nrow(y)-1),],ncol=1) 
    dy =as.matrix(y[-1,]- y[1:(nrow(y)-1),],ncol=1) 
    dy0 = as.matrix(dy[(nrow(dy)-t1+1):nrow(dy)],ncol=1) 
    x = y1 

    if(mflag == 1){ 
    x = cbind(constant,x) 
    } 
    if(mflag == 2){ 
    x = cbin(constant,trend,x) 
    } else{x = x} 

    x1 = x 

    t2 = t1 - adflag 
    x2 = x1[(nrow(x1)-t2+1):nrow(x1),]  
    dy01 = as.matrix(dy0[(nrow(dy0)-t2+1):nrow(dy0),],ncol=1) 

    if(adflag>0){ 
    j = 1 
    while(j<=adflag){ 
     x2 = cbind(x2,dy[(nrow(dy)-t2+1-j):nrow(dy)-j]) 
     j = j+1 
    } 
    } 

    beta = solve(t(x2)%*%x2)%*%(t(x2)%*%dy01) ## beta de la regresion de la prueba ADF 
    eps = dy01-x2%*%beta ## errores de la regresion 
    if(mflag == 1){sig = sqrt(diag(as.numeric(t(eps)%*%(eps/(t2-adflag-2)))*solve(t(x2)%*%x2)))} 
    if(mflag == 2){sig = sqrt(diag(as.numeric(t(eps)%*%(eps/(t2-adflag-3)))*solve(t(x2)%*%x2)))} 
    if(mflag == 3){sig = sqrt(diag(as.numeric(t(eps)%*%(eps/(t2-adflag-1)))*solve(t(x2)%*%x2)))} 

    tvalue = beta/sig 
    return(tvalue[2]) 
} 
関連する問題