r - 有没有办法在 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)
这一切都很好,但是有没有办法自动化这个,所以我不必再次从向量转换到数据帧再到向量?如果可能,我想将所有内容都保留为数据框。
非常感谢!
解决方案
您可以转换B
为 time.series 对象:
B_ts <- ts(B)
然后,您可以指定时间序列的频率、开始和结束,?ts
有关详细信息,请参阅。
如果您想获得一阶差异,B
您可以简单地使用diff(B)
. 数据不必为此的数据框
推荐阅读
- spring - 使用标准 api 获取最后一条记录
- c# - C#在函数之间传递数据
- c# - Microsoft Graph 令牌缺少“帐户”属性
- python - 在 Python 中转换时区
- objective-c - 从转换 NSDictionary 对象创建 Swift 选项
- discord.py - 给定命令时如何使机器人分配角色
- java - 多个流过滤器或 forEach if-else
- python - 将浮点数放在python中的f.write中
- swift - 在 Swift 中使用 Cuckoo,为什么调用 stub 会抱怨 GeneratedMocks 中的类不符合 Mock 协议?
- docker - 将服务部署到 docker swarm 时,Traefik 未更新