有没有一种方法可以自动在R中对时间序列进行区分?

时间:2020-02-07 11:41:21

标签: r time-series

我想做一些时间序列分析。例如,当我有一个表示为数据帧单行的时间序列时,执行增强的Dickey-Fuller测试时会收到以下错误: “ tseries :: adf.test(B)中的错误:x不是向量或单变量时间序列。” 所以我把它变成一个向量:

library(urca)
B <- c(34,34,34,34,34,34,35,100,34,34,35,100,34)
B
plot(B)
tseries::adf.test(B)

但是,为了应用差分,时间序列必须成为数据帧的一部分,否则我将得到错误:

“ apply(B,1,f1)中的错误:dim(X)的长度必须为正”,

因此,我手动重新定义了B,如下所示:

A <- c(34)
C <- c(34)
D <- c(34)
E <- c(34)
F <- c(34)
G <- c(34)
H <- c(35)
I <- c(100)
J <- c(34)
K <- c(34)
L <- c(35)
M <- c(100)
N <- c(34)
B <- data.frame(A,C,D,E,F,G,H,I,J,K,L,M,N)
B
f1 = function(x){return(diff(x))}
C <- (t(apply(B,1, f1)))
C <- data.frame(t(apply(B,1, f1)))
class(C)
然后

R告诉我C的类是一个数据帧。如果我将C保持这种格式,则在重新执行D-F测试时,将再次获得“ tseries :: adf.test(C)中的错误:x不是向量或单变量时间序列”。如果我不包括“ data.frame”,则表示C的类是数字类,并且在重新执行DF测试时会收到以下错误:“ embed(y,k)中的错误:错误的嵌入尺寸”。 / p>

所以我再次将结果手动重写为矢量:

C <- c(0,0,0,0,0,1,65,-66,0,1,65,-66)
class(C)
C
plot(C)
tseries::adf.test(C) 

哪个都可以正常工作,但是有一种方法可以自动执行此操作,这样我就不必继续保持从向量到数据帧再到向量的转换了?我想尽可能将所有内容保留为数据框。

非常感谢!

1 个答案:

答案 0 :(得分:1)

您可以将B转换为time.series对象:

B_ts <- ts(B)

然后您可以指定频率,时间序列的开始和结束,有关更多详细信息,请参见?ts

如果要求B的一阶差,则可以简单地使用diff(B)。数据不必为此是数据框