在R中,原始时间序列是否会影响子集时间序列的预测结果?

问题描述 投票:1回答:1

我使用下面的代码在R中对一组时间序列数据进行了预测。场景1和场景2之间的唯一区别是我错误地将原始时间序列和子集时间序列设置为场景2中的start=c(2015,12)。两种场景的预测结果是不同的。两种方案都具有与预测中使用的子集数据相同的开始日期。我不明白为什么原始时间序列开始日期会影响预测结果。

# Scenario 1    

ts.vision = ts(data=vision$ADJ_ILR, frequency = 12,start=c(2015,1), end=c(2017,12))                             
ts.vision.sub <- window(ts.vision, start=c(2015, 12))                               
ts.vision.fit <- stl(ts.vision.sub, t.window=15, s.window="periodic", robust=TRUE)                              
forecast(ts.vision.fit, h=12)


# Scenario 2    

ts.vision = ts(data=vision$ADJ_ILR, frequency = 12,start=c(2015,12), end=c(2017,12))                                
ts.vision.sub <- window(ts.vision, start=c(2015, 12))                               
ts.vision.fit <- stl(ts.vision.sub, t.window=15, s.window="periodic", robust=TRUE)                              
forecast(ts.vision.fit, h=12)   

这是类似的情况,我使用基础R上可用的nottem数据集重写了两个场景:#Scenario 1 ts.nottem = ts(nottem,frequency = 12,start = c(1920,1),end = c (1939,12))ts.nottem.sub < - window(ts.nottem,start = c(1937,12))ts.nottem.fit < - stl(ts.nottem.sub,t.window = 15,s .window =“periodic”,robust = TRUE)预测(ts.nottem.fit,h = 12)

#Scenario 2
ts.nottem = ts(nottem, frequency = 12,start=c(1937,12), end=c(1939,12))
ts.nottem.sub <- window(ts.nottem, start=c(1937, 12))   
ts.nottem.fit <- stl(ts.nottem.sub, t.window=15, s.window="periodic", robust=TRUE)      
forecast(ts.nottem.fit, h=12)

我不明白为什么预测结果不同,即使方案1和2之间的子集时间序列数据相同。

r forecasting
1个回答
0
投票

以下是一些内置数据的示例

library(forecast)
ts.1 <- ts(data=nottem[1:36], frequency = 12, start=c(2015,1), end=c(2017,12))                             
ts.1.sub <- window(ts.1, start=c(2015, 12))                               
ts.1.fit <- stl(ts.1.sub, t.window=15, s.window="periodic", robust=TRUE)                              
ts.1.fc <- forecast(ts.1.fit, h=12)

ts.2 <- ts(data=nottem[1:36], frequency = 12, start=c(2015,12), end=c(2017,12))                             
ts.2.sub <- window(ts.2, start=c(2015, 12))                               
ts.2.fit <- stl(ts.2.sub, t.window=15, s.window="periodic", robust=TRUE)                              
ts.2.fc <- forecast(ts.2.fit, h=12)

#all.equal(ts.1.fc, ts.2.fc) # NO!

我省略了长长的愤怒信息!发生了什么?看看两个子集对象:

head(ts.1.sub)
#>       Jan  Feb  Mar  Apr  May Jun Jul Aug Sep Oct Nov  Dec
#> 2015                                                  39.8
#> 2016 44.2 39.8 45.1 47.0 54.1

head(ts.2.sub)

#>       Jan  Feb  Mar  Apr  May Jun Jul Aug Sep Oct Nov  Dec
#> 2015                                                  40.6
#> 2016 40.8 44.4 46.7 54.1 58.5

它们不相同,因为在场景1中,您通过原始数据中的第36个值获得第12个值,而在场景2中,您获得第1个到第25个值。

© www.soinside.com 2019 - 2024. All rights reserved.