在你问之前,我需要展示这么多数据。 stl()需要两个数据周期。在这种情况下,一个句点是24个值,因此stl()至少需要48个值。
另外,来自stl()帮助:
“......这应该是班级”ts“的对象,频率大于1 ......”
我正在升级一些旧的计算,以便我的数据采用动物园格式。到目前为止,我已经升级了每月和每日数据而没有任何明显的问题,尽管存在stl()速度问题。我现在是小时数据。
当您运行代码时,“第一次尝试”和“第二次尝试”在“第三次尝试”工作时失败。为什么?我错过了什么真正明显的事情?从“注意接下来会发生什么”一节来看,是stl()从动物园系列到导致这个问题的ts系列的内部转换吗?
library(zoo)
texinp <- "
Date,Demand
2009-01-01 01:00:00,28099.1458685981
2009-01-01 02:00:00,27818.8853634983
2009-01-01 03:00:00,27542.1297303602
2009-01-01 04:00:00,27481.2230897352
2009-01-01 05:00:00,27863.5201611328
2009-01-01 06:00:00,28716.5855560981
2009-01-01 07:00:00,29542.9219102648
2009-01-01 08:00:00,29894.8927398003
2009-01-01 09:00:00,29984.6039306641
2009-01-01 10:00:00,30065.9059781901
2009-01-01 11:00:00,29885.6435823568
2009-01-01 12:00:00,29348.3372466363
2009-01-01 13:00:00,28547.9348426649
2009-01-01 14:00:00,27601.1429031033
2009-01-01 15:00:00,26784.0209678819
2009-01-01 16:00:00,26269.0193386502
2009-01-01 17:00:00,26196.6366764323
2009-01-01 18:00:00,27527.2755148655
2009-01-01 19:00:00,29723.9232834201
2009-01-01 20:00:00,29594.3683930122
2009-01-01 21:00:00,29089.5591764323
2009-01-01 22:00:00,28287.9040272352
2009-01-01 23:00:00,26863.3280593533
2009-01-02 00:00:00,25166.2158816189
2009-01-02 01:00:00,23708.111414388
2009-01-02 02:00:00,22905.427265625
2009-01-02 03:00:00,22517.7926079644
2009-01-02 04:00:00,22519.1570795356
2009-01-02 05:00:00,23065.7224479167
2009-01-02 06:00:00,24452.6789577908
2009-01-02 07:00:00,26450.5363346354
2009-01-02 08:00:00,27815.8465516493
2009-01-02 09:00:00,28402.8746001519
2009-01-02 10:00:00,29007.9232600911
2009-01-02 11:00:00,29333.0119395616
2009-01-02 12:00:00,29378.4373334418
2009-01-02 13:00:00,29145.4215820312
2009-01-02 14:00:00,29069.2706928168
2009-01-02 15:00:00,28900.4390755208
2009-01-02 16:00:00,28724.9172607422
2009-01-02 17:00:00,28523.1717095269
2009-01-02 18:00:00,29480.8798573134
2009-01-02 19:00:00,31168.033992513
2009-01-02 20:00:00,30736.5264789497
2009-01-02 21:00:00,29963.2411859809
2009-01-02 22:00:00,28915.5116943359
2009-01-02 23:00:00,27547.5425157335
2009-01-03 00:00:00,25756.0379166667
2009-01-03 01:00:00,24079.5182259115
2009-01-03 02:00:00,22927.8879052734"
tem <- read.zoo(textConnection(texinp), header = TRUE, sep = ",", tz = "", regular = TRUE)
#First try
frequency(tem)
tem.stl <- stl(tem, s.window = "periodic") #error, not the frequency it was expecting?
#Second try
frequency(tem) <- 24
tem.stl <- stl(tem, s.window = "periodic") #don't worry, it's not hung....
#r calculates for about a minute and comes back with an error
#Third try
temcor <- ts(coredata(tem), freq = 24)
temcor.stl <- stl(temcor, s.window = "periodic") #works fine
plot(temcor.stl)
#Also, notice what happens next
junk <- as.ts(tem) #again, it's not hung, it just takes a while
str(junk)
frequency(junk)
junk #hello
答案 0 :(得分:3)
使用完整周期为1的时间表示,因此对于频率为24的每小时数据,单位时间应对应于一天。 chron
以这种方式工作:
library(zoo)
library(chron)
z <- read.zoo(text = texinp, header = TRUE, sep = ",", FUN = as.chron)
stl(z, "per")