2017-07-26 33 views
0

爲了識別和刪除作物產量系列的技術信號,我首次使用了stats::stl函數。我對這種方法並不熟悉,而且我是編程方面的新手,事前我對任何錯誤的道歉。STL ts頻率= 1

這些是我與工作的原始數據:

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頻率,因爲當我改變頻率我得到的季節性趨勢,其餘的信號:

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. 另一方面,要消除技術信號,只需要消除趨勢並且來自原始系列的剩餘信號還是我誤解了?

非常感謝您的幫助。

回答

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