将数据帧转换为适合auto.arima的时间序列

时间:2016-01-04 13:55:31

标签: r time-series zoo bitcoin quantitative-finance

我有以下数据框:

read.csv(file="CNY % returns.csv",head=TRUE,sep=",")
    DATE LOG...RETURNS
1   03/09/13    -6.9106715
2   04/09/13    -6.9106715
3   05/09/13    -4.5839582
4   06/09/13     1.7554592
5   07/09/13    -0.8808549
6   08/09/13     4.1842420 


DATE: obviosuly date; format dd/mm/yyyy.
LOG RETURNS: compounded returns from a bitcoin CNY exchange. 

我希望使用auto.arima函数作为选择合适模型的起点。

我已经尝试过了:

cnyX <- read.zoo(text="        DATE LOG...RETURNS
1   03/09/13    -6.9106715
2   04/09/13    -6.9106715
3   05/09/13    -4.5839582
4   06/09/13     1.7554592
5   07/09/13    -0.8808549
6   08/09/13     4.1842420")


index(cnyX) <- as.Date(as.character(index(cnyX)),format="%D%m%y") 

这会产生:

<NA>        <NA>        <NA>        <NA>        <NA>        <NA>
0.2144527  -9.2553228  -0.8519708  -4.2074340  14.0817672   1.2212485 ....                

我意识到as.character分隔符不正确但不确定应该如何修复或纠正它。我已经阅读了有关创建XTS和TS对象的内容,但也无法使这些工作成功。我还提到:Convert data frame with date column to timeseries但发现这不合适。

如何将数据框转换为适合auto.arima的格式?我可能有重复的值。

2 个答案:

答案 0 :(得分:1)

问题源于您传递给format的{​​{1}}参数不正确。事实上,如果您尝试将某些内容从as.Date转换为character并获得所有Date的向量,那么您几乎肯定没有正确指定NA

这是一个可比较的数据集:

format

使用正确的Df <- data.frame( Date = format(Sys.Date() - (729:0), "%d/%m/%y"), LogReturns = log(rgamma(730, .25)), stringsAsFactors = FALSE )

format

这适用于ln_ret <- zoo::zoo(Df[,2], as.Date(Df[,1], format = "%d/%m/%y")) ln_ret[1:4] #2014-01-05 2014-01-06 2014-01-07 2014-01-08 # -2.268443 -3.562711 -4.546391 -0.707788

auto.arima

答案 1 :(得分:0)

如果您只想将ARIMA模型与日志返回数据相匹配,则无需担心正确的日期格式。也就是说,您知道ts何时开始和结束,并且如果最终需要这些预测,那么跟踪任何预测的日期是微不足道的。

这也可行。

tt <- read.csv(file="CNY % returns.csv",head=TRUE,sep=",")
# assuming default options for orders p, d, q, etc
forecast::auto.arima(x=tt[,2])