簡體   English   中英

基於時間序列的每日數據預測,但季節性是季度 - 在R

[英]Time Series based Forecasting for Daily Data but Seasonality is Quarterly - in R

過去4年我每天都要求生產一種產品。 這種需求具有季度季節性模式,如下圖所示

繪制ts對象

我想對這些數據做基於時間序列的預測。 以下是我的代碼

myts = ts(forecastsku1$Value,frequency=90)
fit <- stl(myts, s.window="period")
plot(fit)
fit <- decompose(myts)
plot(fit)

STL的結果

分解結果

這里代替4個季節性因素ts創造了90個季節性因素,這不是我想要的。 我希望在3個月的持續時間內應用相同的季節性,然后進行預測。

數據供參考

dput(head(forecastsku1,100))
structure(list(date = structure(c(14625, 14626, 14627, 14628, 14629, 14630, 14631, 14632, 14633, 14634, 14635, 14636, 14637, 
14638, 14639, 14640, 14641, 14642, 14643, 14644, 14645, 14646, 14647, 14648, 14649, 14650, 14651, 14652, 14653, 14654, 14655, 
14656, 14657, 14658, 14659, 14660, 14661, 14662, 14663, 14664, 14665, 14666, 14667, 14668, 14669, 14670, 14671, 14672, 14673, 
14674, 14675, 14676, 14677, 14678, 14679, 14680, 14681, 14682, 14683, 14684, 14685, 14686, 14687, 14688, 14689, 14690, 14691, 
14692, 14693, 14694, 14695, 14696, 14697, 14698, 14699, 14700, 14701, 14702, 14703, 14704, 14705, 14706, 14707, 14708, 14709, 
14710, 14711, 14712, 14713, 14714, 14715, 14716, 14717, 14718, 14719, 14720, 14721, 14722, 14723, 14724), class = "Date"), 
Value = c(1407, 1413, 1407, 1406, 1401, 1410, 1411, 1416, 1404, 1409, 1414, 1414, 1400, 1421, 1398, 1404, 1397, 1404, 1407, 1409, 1406, 1395, 1397, 
1403, 1412, 1399, 1409, 1393, 1405, 1403, 1406, 1402, 1405, 1386, 1393, 1405, 1397, 1393, 1402, 1402, 1393, 1391, 1410, 1402, 1408, 
1394, 1404, 1398, 1406, 1389, 1401, 1391, 1394, 1384, 1377, 1390, 1395, 1399, 1384, 1397, 1398, 1384, 1377, 1394, 1398, 1394, 1391, 
1403, 1382, 1390, 1385, 1403, 1390, 1388, 1391, 1384, 1392, 1390, 1381, 1387, 1395, 1390, 1388, 1384, 1387, 1395, 1380, 1378, 1383, 
1384, 1232, 1247, 1232, 1248, 1236, 1236, 1231, 1237, 1224, 1236)), 
.Names = c("date", "Value"), row.names = 13150:13249, class = "data.frame")

在這種情況下,有人可以幫助我嗎? 如果需要更多數據,請告訴我。

myts = ts(forecastsku1$Value,frequency=4)
fit <- decompose(myts)
plot(fit)

結果將是: 在此輸入圖像描述

它創建了一個90季節因素,因為你的頻率在ts定義中是90。 您需要做的是指定ts中的開始和結束以及周期= 4,以便可以按照您希望的方式隔離觀察結果。如果您可以成功創建4個季節性因子,則可以明顯地預測每季度(4 * 3 = 12)。 所以不是這些日期,我認為更清楚的是像start = c(2005,1)。希望這很有用

這是一個古老的問題,但是,也許我的回答是有一定價值的。 您可以使用dsa包季節性地調整每日數據(免責聲明:我是作者)。

我試圖復制你的時間序列(或類似的東西),讓你知道如何季節性調整它們(季節性調整的設置試圖幫助建模時間序列的跳躍行為):

# loading packages
library(dsa); library(xts)

# Replication of the data
set.seed(23)
data <- seq(1250, 1000, , length.out=365.25*4) + rnorm(365.25*4, 0, 5)
time <- seq(as.Date("2008-01-01"), by="days", length.out=365.25*4)    
x <- xts(data, time)
ind <- as.numeric(format(zoo::index(x), "%m")) # Indicator of day of year
x[ind==1 | ind==2 | ind==3 | ind==7 | ind==8 | ind==9] <- 
x[ind==1 | ind==2 | ind==3 | ind==7 | ind==8 | ind==9] + 200

# Seasonally adjusting the data
result <- dsa(x, fourier_number=40, reiterate3=4, reg.create=NULL, cval=30) 
sa <- result$output[,1]
xtsplot(result$output[,c(2,1)], names=c("original", "seasonally adjusted"))
output(result) # creates a html in your working directory.

暫無
暫無

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

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