我有两个时间序列TS[,1]
和TS[,2]
。并试图 通过改变b
,TS[,1] - b*TS[,2]
找到ADF测试的最低P值,可以使TS[,1] - b*TS[,2]
静止。
所以我一直在绘制p.value
与b
图,但似乎语法问题阻止了我进行更多工作。当我像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
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)
}