1. 程式人生 > >R中季節性時間序列分析及非季節性時間序列分析

R中季節性時間序列分析及非季節性時間序列分析

序列分解

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(freqspec==max(freqspec))週期開始位置
  • frequency<-1/freqfreq[which(freqspec==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

這裡寫圖片描述