如何使用C检验从Chow检验和CUSUM检验得出的不同结果以使用R查找结构性断裂

时间:2019-05-04 14:11:09

标签: r time-series

我正在尝试确定时间序列回归中的结构性断裂点。我正在使用CHOW测试和CUSUM测试,但得到了两个不同的答案,但我不知道为什么。

我知道我设置的范围会影响结果,因此CUSUM测试的答案实际上不是周期73,而是90 + 73 =163。但是,这仍然与下面的CUSUM测试结果不匹配是409。我试图更改边界,但区别仍然存在。

#To load the data

install.packages("quantmod")
library(quantmod)

construc <- new.env();
getSymbols('DAUTONSA',src='FRED', env = construc);
data <- construc$DAUTONSA;


#Setting up Chow Test


fitted.values <- fitted(opt.model)
ARBreak <- matrix(fitted.values)

CTest <- ARBreak[1:626] 
for (i in 90:535){

  #Left
  yp1<-ARBreak[2:(i-1)];
  yp1lag<-ARBreak[1:(i-2)];
  Left<-lm(yp1~yp1lag);
  LeftRSS<-sum(Left$residuals^{2});
  #Right
  yp2<-ARBreak[(i+2):626];
  yp2lag<-ARBreak[(i+1):625];
  Right<-lm(yp2~yp2lag);
  RightRSS<-sum(Right$residuals^{2});
  #Total
  yptot<-ARBreak[2:626];
  yptotlag<-ARBreak[1:625];
  tot<-lm(yptot~yptotlag);
  totRSS<-sum(tot$residuals^{2});

  #Chow Test 
  Numer<-(totRSS-(RightRSS+LeftRSS))/14;
  Denomer<-(RightRSS+LeftRSS)/(626-14);
  CTest[i]<-Numer/Denomer;
} 

which.max(CTest); #73 so 90 + 73 = 163


#CUSUM test

RegMat <- data.frame(cbind(yp1,yp1lag))
Model <- lm(yp1~yp1lag, data = RegMat)
F_values <- Fstats(Model, from = 0.15, data = RegMat )
plot(F_values$Fstats)
breakpoint <- breakpoints(F_values) # Only one breakpoint found
lines(breakpoints(F_values))
print(breakpoint) #breakpoint is at 409 --> 90 + 409 = 499?

每种测试的实际结果都不同(Chow测试得出的答案为73 + 90 = 163,而CUSUM测试得出的答案为409 + 90 = 499),但是我认为我应该为两者找到相同的答案。

0 个答案:

没有答案