簡體   English   中英

使用ts()對象對每周數據進行R時間序列建模

[英]R time series modeling on weekly data using ts() object

我正在嘗試使用基於每周數據的R進行時間序列建模和預測,如下所示:

biz week     Amount        Count
2006-12-27   973710.7     816570
2007-01-03  4503493.2    3223259
2007-01-10  2593355.9    1659136
2007-01-17  2897670.9    2127792
2007-01-24  3590427.5    2919482
2007-01-31  3761025.7    2981363
2007-02-07  3550213.1    2773988
2007-02-14  3978005.1    3219907
2007-02-21  4020536.0    3027837
2007-02-28  4038007.9    3191570
2007-03-07  3504142.2    2816720
2007-03-14  3427323.1    2703761
...
2014-02-26  99999999.9   1234567

關於我的數據:如上所示,每周都標有一周的第一天(我的周從周三開始,到周二結束)。 當我構建我的ts對象時,我嘗試了

ts <- ts(df, frequency=52, start=c(2007,1))

我遇到的問題是:

1)某些年份可能有53周,因此frequency=52將不適用於那些年;

2)我的開始周/日期是2006-12-27,我該如何設置啟動參數? start=c(2006,52)start=c(2007,1)自2006-12-27周以來真的越過年界? 另外,對於建模,最好是擁有完整的年份數據(比如2007年我的開始年份,如果我只有部分年份的數據),最好不要使用2007,而是從2008年開始? 那么2014年:既然還不是完整的一年,我應該使用我的建模嗎? 無論哪種方式,我仍然有一個問題,是否在2006-12-27這樣的年份邊界中包括那些周。 我應該把它作為2007年或2006年最后一周的第wk 1包括在內嗎?

3)當我使用ts <- ts(df, frequency=52, start=c(2007,1))然后將其打印出來時,我得到的結果如下所示,而不是2007.01,2007.02,2007.52 ......,我得到了2007.000,2007.019,......,得自1/52 1/52=0.019 這在數學上是正確的,但不容易解釋。 有沒有辦法將它標記為日期本身就像數據框架或至少2007 wk1, 2007 wk2...

=========

Time Series:
Start = c(2007, 1) 
End = c(2014, 11) 
Frequency = 52 
          Amount        Count
2007.000   645575.4     493717
2007.019  2185193.2    1659577
2007.038  1016711.8     860777
2007.058  1894056.4    1450101
2007.077  2317517.6    1757219
2007.096  2522955.8    1794512
2007.115  2266107.3    1723002 

4)我的目標是對每周數據建模,然后嘗試將其分解以查看季節性組件。 好像我必須使用ts()函數轉換為ts對象sp,我可以使用decompose()函數。 我試過xts() ,我得到一個錯誤,說明" time series has no or less than 2 periods" 我想這是因為xts()不會讓我指定頻率,對吧?

xts <- xts(df,order.by=businessWeekDate)

5)我在這個論壇和其他地方尋找答案; 大多數例子都是每月一次,雖然每周都有一些時間序列問題,但沒有一個答案是直截了當的。 希望有人可以幫助我回答我的問題。

使用非整數頻率可以很好地工作,並且與大多數模型(auto.arima,ets,...)兼容。 對於開始日期,我只使用lubridate中的便利函數。 這里的重要性是在處理可能不同的開始和結束日期的多個時間序列時保持一致。

library(lubridate)
ts(df$Amount, 
   freq=365.25/7, 
   start=decimal_date(ymd("2006-12-27")))

首先確保您的數據每年只有52個數據。 要做到這一點,用53個數據確定年份並刪除對你的季節性模式不太重要的數據(例如,如果你想查看聖誕節銷售季節性,請不要刪除12月的一周(!)

Xts是一種很好的格式,因為它更靈活,但是所有的分解和預測工具通常都適用於ts,因為它們每個周期需要固定數量的數據。

關於你在非完整年份的問題。 這應該不是問題。 R不知道什么時候是1月或12月,因此一年可以隨時開始和結束。

關於你的第四個問題,我認為錯誤是因為你只有一個期間數據(52周),你可能需要另外52周的數據來完成2個期間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM