使用ADF测试绘制定义的函数

时间:2017-09-10 06:44:07

标签: r

我有两个时间序列TS[,1]TS[,2]。并试图 通过更改TS[,1] - b*TS[,2]可以使b无效,找到TS[,1] - b*TS[,2]中ADF测试的最低P值。

所以我正在制作关于图p.valueb的情节,但看似语法问题阻止我继续前进。当我计算像pvalfun(1)这样的点时,它给出了如下答案。但是当我尝试绘制pvalfun(定义如下)时,它会给我回复错误消息,如下所示。不知道为什么密谋pvalfun不起作用。

以下是我的代码和错误消息。

 library(tseries)

 sprd <- TS[,1] - beta*TS[,2]
 ht <- adf.test(sprd, alternative='stationary', k=0)
 pval <- as.numeric(ht$p.value)

 pvalfun<-function(b){

 sprd <- TS[,1] - b*TS[,2]
 ht <- adf.test(sprd, alternative='stationary', k=0)
 return(as.numeric(ht$p.value))
 }

 x<-seq(-1,1,by = 0.01)
 plot(pvalfun(x))
Warning message:
In b * TS[, 2] :
 longer object length is not a multiple of shorter object length
pvalfun(1)
[1] 0.5090961

1 个答案:

答案 0 :(得分:1)

pvalfun<-function(b){
  sprd = TS%*%rbind(rep(1,length(b)), -b) 
  U = apply(sprd, 2, function(c)  { ht <- adf.test(c, alternative='stationary', k=0)
                                    returnc(as.numeric(ht$p.value)) }
  return(U)
}