R中季節性時間序列分析及非季節性時間序列分析
阿新 • • 發佈:2019-01-10
序列分解
1、非季節性時間序列分解
移動平均MA(Moving Average)
①SAM(Simple Moving Average)
簡單移動平均,將時間序列上前n個數值做簡單的算術平均。
SMAn=(x1+x2+…xn)/n
②WMA(Weighted Moving Average)
加權移動平均。基本思想,提升近期的資料、減弱遠期資料對當前預測值的影響,使平滑值更貼近最近的變化趨勢。
用Wi來表示每一期的權重,加權移動平均的計算:
WMAn=w1x1+w2x2+…+wnxn
R中用於移動平均的API
install.packages(“TTR”)
SAM(ts,n=10)
- ts 時間序列資料
- n 平移的時間間隔,預設值為10
WMA(ts,n=10,wts=1:n)
- wts 權重的陣列,預設為1:n
#install.packages('TTR')
library(TTR)
data <- read.csv("data1.csv", fileEncoding="UTF8")
plot(data$公司A, type='l')
data$SMA <- SMA(data$公司A, n=3)
lines(data$SMA)
plot(data$公司A, type='l')
data$WMA <- WMA(data $公司A, n=3, wts=1:3)
lines(data$WMA)
2、季節性時間序列分解
在一個時間序列中,若經過n個時間間隔後呈現出相似性,就說該序列具有以n為週期的週期性特徵。
分解為三個部分:
①趨勢部分
②季節性部分
③不規則部分
R中用於季節性時間序列分解的API
序列資料週期確定
- freg<-spec.pgram(ts,taper=0, log=’no’, plot=FALSE)
- start<-which(freq
spec==max(freq spec))週期開始位置 - frequency<-1/freq
freq[which(freq spec==max(freq$spec))]週期長度
序列資料分解
decompose(ts)
data <- read.csv("data2.csv", fileEncoding = "UTF8")
freq <- spec.pgram(data$總銷量, taper=0, log='no', plot=FALSE);
start <- which(freq$spec==max(freq$spec))
frequency <- 1/freq$freq[which(freq$spec==max(freq$spec))]
data$均值 <- data$總銷量/data$分店數
freq <- spec.pgram(data$均值, taper=0, log='no', plot=FALSE);
start <- which(freq$spec==max(freq$spec))
frequency <- 1/freq$freq[which(freq$spec==max(freq$spec))]
plot(data$均值, type='l')
meanTS <- ts(
data$均值[start:length(data$均值)],
frequency=frequency
)
ts.plot(meanTS)
meanTSdecompose <- decompose(meanTS)
plot(meanTSdecompose)
#趨勢分解
meanTSdecompose$trend
#季節性分解資料
meanTSdecompose$seasonal
#隨機部分
meanTSdecompose$random