2015-03-02 108 views
1

問題:檢測使用週期圖和FFT在日常數據的週期性圖案R.檢測季節性R中

的問題是如何在R代碼裏面的週期圖檢測月度,季度,半年度,annual..etc數據中的循環模式。換句話說,我需要檢測爲低頻率(即:11個月=> 2 * PI/365,6個月=> 4 * PI/365等)的週期性圖案的存在

重複的例子:

library(weatherData) 
w2009=getWeatherForYear("sfo",2009) 
w2010=getWeatherForYear("sfo",2010) 
w2011=getWeatherForYear("sfo",2011) 
w2012=getWeatherForYear("sfo",2012) 
w2013=getWeatherForYear("sfo",2013) 
w2014=getWeatherForYear("sfo",2014) 
w=rbind(w2009,w2010); w=rbind(w,w2011); w=rbind(w,w2012) 
w=rbind(w,w2013); w=rbind(w,w2014) 

# Next we analyze the periodograms 
# This is IMAGE 1 
TSA::periodogram(w$Max_TemperatureF) 
# Next: I dont really know to use this information 
GeneCycle::periodogram(w$Max_TemperatureF) 
# Next THIS IS IMAGE 2 
stats::spectrum(w$Max_TemperatureF) 
# I also tried . This is IMAGE 3 
f.data <- GeneCycle::periodogram(tmax) 
harmonics <- 1:365 
plot(f.data$freq[harmonics]*length(tmax),] 
     f.data$spec[harmonics]/sum(f.data$spec), 
     xlab="Harmonics (Hz)", ylab="Amplitute Density", type="h") 

TSA Periodogram

Spectrum Periodogram

GeneCyle

閱讀的答案後,我所做的:

per <- TSA::periodogram(w$Max_TemperatureF,lwd = 1) 
x <- which(per$freq < 0.01) 
plot(x = per$freq[x], y = per$spec[x], type="s") 

Low Freq

我的問題是到底有什麼意思呢?我們有季節性循環嗎?

回答

0

如果你正在尋找一個長期(365天),你會發現它非常低頻

> 1/365 
[1] 0.002739726 

下,實際上,你可以在這個值上看到你的第一個圖像左側的峯值。過濾器,以較低的頻率,如果你想放大:

per <- TSA::periodogram(w$Max_TemperatureF,lwd = 1) 
x <- which(per$freq < 0.01) 
plot(x = per$freq[x], y = per$spec[x], type="s") 

另一種方式來尋找週期爲自相關估計(acf):

acf(w$Max_TemperatureF, lag.max = 365*3) 

參見季節性分解:

ts1 <- ts(data = w$Max_TemperatureF, frequency = 365) 
plot(stl(ts1, s.window = "periodic")) 
+0

謝謝,我在低頻上添加了週期圖。但我認爲要找到一個年度,頻率是2 * pi/365,爲什麼1/365足夠了?所以頻率是每個$ freq有一個尖峯的權利?那麼你如何計算振幅?謝謝 !!! – Oniropolo 2015-03-03 02:59:29

+0

對。如果你有頻率「可疑」,你可以去季節性分解:價值分解爲週期部分(有幅度),趨勢和剩餘(見'stl')。 – bergant 2015-03-03 03:06:05

+0

你的數據是每日時間序列 - 這就是爲什麼年度頻率是1/365。 – bergant 2015-03-03 03:11:53