![](/img/trans.png)
[英]How to convert data frame rows iteratively into time series object and apply auto.arima to each row
[英]Convert data frame to time series suitable for 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對象的信息,但也無法使它們起作用。 我還提到過: 將帶有日期列的數據框轉換為時間序列,但是發現這不合適。
我應該如何將數據幀轉換為適用於auto.arima
格式? 我可能存在重復的值。
問題源於傳遞給as.Date
format
參數不正確。 實際上,如果您嘗試將character
從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
一起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
如果您只想將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])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.