2017-07-26 5 views
0

私はstats::stl関数を使用して、作物の技術的シグナルを識別して削除することで、セリエが得られます。私はこの方法に精通しておらず、プログラミングの初心者ですが、事前に間違いをお詫びします。STL ts frequency = 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)) 

これはSTL関数の入力として作成された周波数でts = 1(年間)です:私はしようとすると

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