For-loop和增强Dickey-Fuller单元根测试(ADF测试)

时间:2019-09-06 07:36:28

标签: r for-loop

我正在使用fpp2包中的数据集uschange进行建模,并且我想使用vars包执行增强的Dickey-Fuller单元根测试(ADF测试)。在此示例中,我有五个系列,名称分别为“消费”,“收入”,“生产”,“储蓄”和“失业”。因此,我的目的是进行ADF测试,并将结果放入类列表的一个对象中。您可以在下面看到代码:

#CODE
library(fpp2)
library(vars)

#Data
MY_DATA<-data.frame(uschange)
COL_NAMES<- names(MY_DATA)

#LOOP ADF
MY_LIST<-for(i in 1:ncol(MY_DATA)){

  summary(ur.df(MY_DATA[i], type = "drift",selectlags = c("BIC")))
  summary(ur.df(MY_DATA[i], type = "trend",selectlags = c("BIC")))
  summary(ur.df(MY_DATA[i], type = "none",selectlags = c("BIC")))
}

但是显然我犯了一些错误,我的带有循环的代码无法正常工作。那么,有人可以帮助修复该代码,以便从一个对象中的所有五个系列获得ADF测试的结果吗?

1 个答案:

答案 0 :(得分:1)

摘要的结果只是一些文本,在任何情况下,您都不会在任何地方分配这些结果

MY_LIST=vector("list",ncol(MY_DATA))
for(i in 1:ncol(MY_DATA)){
  MY_LIST[[i]]=list(
    summary(ur.df(MY_DATA[i], type = "drift",selectlags = c("BIC"))),
    summary(ur.df(MY_DATA[i], type = "trend",selectlags = c("BIC"))),
    summary(ur.df(MY_DATA[i], type = "none",selectlags = c("BIC")))
  )
}

或更好

MY_LIST=apply(MY_DATA,2,function(x){
  return(
    list(
      summary(ur.df(x, type = "drift",selectlags = c("BIC"))),
      summary(ur.df(x, type = "trend",selectlags = c("BIC"))),
      summary(ur.df(x, type = "none",selectlags = c("BIC")))
    )
  )
})