首页 > 解决方案 > 有没有办法在 R 中自动区分时间序列?

问题描述

我想做一些时间序列分析。例如,当我有一个时间序列表示为数据帧的单行时,我在执行增强的 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)

但是时间序列必须是数据框的一部分才能应用差分,否则我会收到错误:

“应用错误(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,我在重新执行 DF 测试时再次获得“tseries::adf.test(C) 中的错误:x 不是向量或单变量时间序列”。如果我不包含“data.frame”,则表示 C 的类是数字的,并且在重新执行 DF 测试时出现以下错误:“嵌入错误(y,k):嵌入维度错误”。

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

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

这一切都很好,但是有没有办法自动化这个,所以我不必再次从向量转换到数据帧再到向量?如果可能,我想将所有内容都保留为数据框。

非常感谢!

标签: rtime-series

解决方案


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

B_ts <- ts(B)

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

如果您想获得一阶差异,B您可以简单地使用diff(B). 数据不必为此的数据框


推荐阅读