2016-01-04 32 views
0

時間序列我有以下的數據幀:轉換數據幀適合auto.arima

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的格式?我可能有重複的值。

回答

0

你不需要擔心正確的日期格式,如果您只想將ARIMA模型適用於日誌返回數據。也就是說,你知道什麼時候開始和結束,並且如果最終需要這些預測,那麼記錄任何預測的日期是微不足道的。

這也行得通。

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]) 
1

問題源於您傳遞給as.Date的錯誤format參數。事實上,如果您嘗試將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工作:

forecast::auto.arima(ln_ret) 
#Series: ln_ret 
#ARIMA(0,0,0) with non-zero mean 
# 
#Coefficients: 
# intercept 
#  -4.0742 
#s.e. 0.1454 
# 
#sigma^2 estimated as 15.43: log likelihood=-2034.46 
#AIC=4072.93 AICc=4072.94 BIC=4082.11 
+0

謝謝。原諒我缺乏編程經驗,但我該如何修改:'Df < - data.frame(Date = format(Sys.Date() - (729:0),「%d /%m /%y」),LogReturns = log(rgamma(730,.25)),stringsAsFactors = FALSE')'以確保開始日期是03/09/15(英國格式),我認爲'(Sys.Date() - (729:0)是否是關鍵? - –

+0

我提供的'Df'對象只是任意樣本數據;但是我用來將字符列轉換爲'zoo'對象的方法應該對數據同樣適用,如果在實際數據集中,您需要將開始時間截斷至2015年9月3日,您可以執行諸如'ln_ret [index(ln_ret)> = as.Date(「2015-09-03」)]''的操作。 – nrussell