STL ts频率= 1

时间:2017-07-26 18:49:50

标签: r stl

我第一次使用stats::stl功能,以识别和删除作物产量系列的技术信号。我不熟悉这种方法,我是编程的新手,事先我为任何错误道歉。

这些是我正在使用的原始数据:

dat <- data.frame(year= seq(1962,2014,1),yields=c(1100,1040,1130,1174,1250,1350,1450,1226,1070,1474,1526,1719,1849,1766,1342,2000,1750,1750,2270,1550,1220,2400,2750,3200,2125,3125,3737,2297,3665,2859,3574,4519,3616,3247,3624,2964,4326,4321,4219,2818,4052,3770,4170,2854,3598,4767,4657,3564,4340,4573,3834,4700,4168))

ts创建频率= 1(年度)作为STL函数的输入:

time.series <- ts(data=dat$yields, frequency = 1, start=c(1962, 1), end=c(2014, 1))

plot(time.series, xlab="Years", ylab="Kg/ha", main="Crop yields")

当我尝试运行该函数时,我收到以下错误消息:

decomposed  <- stl(time.series, s.window='periodic')

> Error in stl(time.series, s.window = "periodic") : series is not periodic or has less than two periods

我知道我的系列是年度的,因此我无法改变ts中的频率,因为当我改变频率时,我得到季节,趋势和余数信号: / p>

   time.series <- ts(data=dat$yields, frequency = 12, start=c(1962, 1), end=c(2014, 1))
   decomposed  <- stl(time.series, s.window='periodic')
   plot(decomposed)

我想知道是否有一种方法可以将STL函数应用于年度数据,每单位时间的观察频率= 1。 另一方面,为了消除技术信号,只需要消除原始系列的趋势和余数信号,或者我错了?

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

由于您使用年度数据,因此没有季节性因素,因此时间序列的季节性分解将不合适。但是,stats::stl函数调用loess函数来估计趋势,这是一个局部多项式回归,您可以根据自己的喜好进行调整。您可以直接致电loess并估算自己的趋势如下。

dat <- data.frame(year= seq(1962,2014,1),yields=c(1100,1040,1130,1174,1250,1350,1450,1226,1070,1474,1526,1719,1849,1766,1342,2000,1750,1750,2270,1550,1220,2400,2750,3200,2125,3125,3737,2297,3665,2859,3574,4519,3616,3247,3624,2964,4326,4321,4219,2818,4052,3770,4170,2854,3598,4767,4657,3564,4340,4573,3834,4700,4168))

dat$trend  <- loess(yields ~ year, data = dat)$fitted

plot(y = dat$yields, x = dat$year, type = "l",  xlab="Years", ylab="Kg/ha", main="Crop yields")
lines(y = dat$trend, x = dat$year, col = "blue", type = "l")

enter image description here