2016-11-27 109 views
1

我有一個這樣的示例數據幀(日期列格式是mm-dd-YYYY):時間序列分析的適用性?

date   count  grp 
01-09-2009  54  1 
01-09-2009  100  2 
01-09-2009  546  3 
01-10-2009  67  4 
01-11-2009  80  5 
01-11-2009  45  6 

欲使用ts()該數據幀到時間序列進行轉換,但問題是:當前數據幀有多個值同一天。我們可以在這種情況下應用時間序列嗎?

  • 我可以將數據幀轉換爲時間序列,並建立一個模型(ARIMA),它可以每天預測計數值嗎?

  • 或者我應該根據grp預測計數值,但是在這種情況下,我只能選擇grp和count數據幀的列。那麼在那種情況下,我必須跳過日期欄,並且不可能每日預測計數值?

  • 假設我想每天累計計數值。我嘗試使用聚合函數,但是我們必須指定日期值,但是我有一個非常大的數據集? r中有其他選項嗎?

有人可以建議是否有更好的方法可以遵循嗎?我的假設是時間序列預測僅適用於二元數據?這個假設是正確的嗎?

+0

你最終想達到什麼目的?也許每天彙總數據?你有沒有讀過[this](http://stats.stackexchange.com/questions/37519/building-a-time-series-that-includes-multiple-observations-for-each-date)? – lukeA

+0

@lukeA聚合是唯一可能的解決方案?是的,我想每天預測計數值。 – andy

+0

我不知道如果這是唯一可能的解決方案。如果你從統計的角度來問(而不是編程的觀點),那麼http://stats.stackexchange.com可能是一個更好的問題。聚合(例如每天總結計數)對我來說聽起來像是一個簡單的解決方案,至少...... – lukeA

回答

1

好像有你的問題的兩個方面:

我想利用這個ts()數據幀到時間序列進行轉換,但 問題是 - 具有相同 多個值當前數據幀日期。我們可以在這種情況下應用時間序列嗎?

如果你很高興利用了xts包的,你可以嘗試:

dta2$date <- as.Date(dta2$date, "%d-%m-%Y") 
dtaXTS <- xts::as.xts(dta2[,2:3], dta2$date) 

這將導致:

>> head(dtaXTS) 
      count grp 
2009-09-01 54 1 
2009-09-01 100 2 
2009-09-01 546 3 
2009-10-01 67 4 
2009-11-01 80 5 
2009-11-01 45 6 
以下類的

>> class(dtaXTS) 
[1] "xts" "zoo" 

然後,你可以使用你的時間eries對象作爲單變量的時間序列,並且是指所選擇的變量或者作爲多元時間序列,使用PerformanceAnalytics軟件包例如:

PerformanceAnalytics::chart.TimeSeries(dtaXTS) 

multivariate time series

邊點

關於第二個問題:

有人可以告訴我什麼是更好的方法,我的 假設是時間序列forcast僅適用於二元數據?是 這個假設也對嗎?

恕我直言,這是相當廣泛的。我建議您使用已創建的xts對象並詳細說明要使用的模型,以及爲什麼,如果它是關於時間序列分析本質的概念性問題,那麼您可能更願意在CrossValidated上發佈後續問題。使用所提供的示例dta2 <- read.delim(pipe("pbpaste"), sep = ""):經由


數據來源。

1

由於需要每日預測,我們需要彙總爲每日。使用最後Note中的DF,使用read.zoo和參數aggregate=sum將前兩列數據讀入動物園系列z。我們可以選擇將其轉換爲"ts"系列(tser <- as.ts(z)),但對於許多預測功能來說這不是必需的。特別是,檢查auto.arima的源代碼,我們看到它在進一步處理之前在其輸入上運行x <- as.ts(x)。最後運行auto.arima,forecast或其他預測功能。

library(forecast) 
library(zoo) 

z <- read.zoo(DF[1:2], format = "%m-%d-%Y", aggregate = sum) 

auto.arima(z) 

forecast(z) 

注:DF給出重複性這裏:

Lines <- "date   count  grp 
01-09-2009  54  1 
01-09-2009  100  2 
01-09-2009  546  3 
01-10-2009  67  4 
01-11-2009  80  5 
01-11-2009  45  6" 
DF <- read.table(text = Lines, header = TRUE) 

更新:重讀問題後的修訂。