"Kronid" <- function(x,plag=10,crit=0.05){ # Identifies the Kronecker indexes for a vector time series # plag is the number of lags used to represent the PAST vector # developed by R. Tsay in May, 2007 T=dim(x)[1] k=dim(x)[2] y=as.matrix(x) if(plag < 1){ plag=floor(log(T))+1 } # Construct the PAST-vector iend=T-plag past=y[1:iend,] if (plag > 1){ for (i in 2:plag){ past=cbind(y[i:(iend+i-1),],past) } } # initialize the Kronecker indexes and control variable. kdx=rep(0,k) found=rep(0,k) # futu: denotes the FUTURE-vector, its dimension is increasing. h=0 ist=plag+1 futu1=as.matrix(y[ist:T,]) print("h") print(h) for (i in 1:k){ print("component") print(i) s1=c(i) if(i > 1){ fnd=found[1:(i-1)] jdx=c(1:(i-1))[fnd==0] s1=c(jdx,i) } futu=as.matrix(futu1[,s1]) m1=cancor(past,futu) df=dim(futu)[2] dp=dim(past)[2] deg=dp-df+1 print("square of the smallest can. corr.") seig=m1$cor[df]^2 print(seig) tst=-(T-1-0.5*(dp+df-1))*log(1-seig) pv=1-pchisq(tst,deg) stat=c(tst,deg,pv) print("test, df, & p-value") print(stat,digits=4) if(i>1){ cstar=cbind(cstar,stat) } else{ cstar=stat } if(pv > crit){ found[i]=1 kdx[i]=h print("A Kronecker index found") } } print("=============") while(sum(found) < k){ idim=dim(past)[1] h=h+1 print("h") print(h) past=past[1:(idim-1),] futu=futu[1:(idim-1),] futu1=y[(ist+h):T,] for (ii in 1:k){ if(found[ii]==0){ print("component") print(ii) futu=cbind(futu,futu1[,ii]) m1=cancor(past,futu) df=dim(futu)[2] dp=dim(past)[2] deg=dp-df+1 print("Square of the smallest can. corr.") seig=m1$cor[df]^2 print(seig) y1=futu%*%(m1$ycoef[,df]) x1=past%*%(m1$xcoef[,df]) m2=acf(y1,lag=h,plot=F) acfy=m2$acf[2:(h+1)] m3=acf(x1,lag=h,plot=F) acfx=m3$acf[2:(h+1)] dsq=1+2*sum(acfx*acfy) seig=seig/dsq tst=-(T-1-0.5*(dp+df-1))*log(1-seig) pv=1-pchisq(tst,deg) stat=c(tst,deg,pv,dsq) print("test, df, p-value & dsq") print(stat,digits=4) stat=stat[1:3] cstar=cbind(cstar,stat) if(pv > crit){ found[ii]=1 kdx[ii]=h futu=futu[,1:(df-1)] print("A Kronecker found") } } } print("============") } print(" ") print("Kronecker indexes identified:") print(kdx) Kronid<-list(index=kdx,tests=cstar) }