카테고리 없음

[R] 데이터분석(2) - 시계열데이터 EDA(평활화, 필터링, 요소분해, 상관관계분석)

도아죻아 2023. 4. 15. 15:43
반응형

목차

평활화(Smoothing)

필터링(Filtering)

요소분해(Decomposition)

상관관계 분석(Serial Correlation)

 

 

 

EDA평활법
  • 단순이동평균
  • 이중이동평균
  • 가중이동평균
  • 이중가중이동평균

 

(참고)
j<t: prediction
j=t: filter
j>t: smooting
Box-Pierce test

 

 

평활화(①이동평균평활법, ②지수평활법), j>t

이동평균평활법(Moving Average, MASmoothing)

library(TSA) 
data(Airpassengers)
ma3 <- filter(AirPassengers, filter=rep(1/3, 3))  #앞뒤 3개의 평균값 (이동평균선)
ma6 <- filter(AirPassengers, filter=rep(1/6, 6))  #6개 평균
ma12 <- filter(AirPassengers, f=rep(1/12, 12))    #12개 평균
par(mfrow=c(4, 1)) 
plot(AirPassengers, main="Air Passengers: Original Data")
plot(ma3, main="3-points Moving Average")
plot(ma6, main="6-points Moving Average")
plot(ma12, main="12-points Moving Average")
#평활화의 단점은 season의 데이터 손실이 좀 있다.

필터링(filtering), j=t

 

#install.packages('forecast')
#library(forecast)

plot(dd1.ts, main="Simple Moving Average Smoothing: dd1")
lines(ff, col="red", lty=2, lwd=2) # fitted line 진한 빨강 점선으로 
abline(h=mean(dd1.ts), col="blue") #평균선

 

가설
가설검정 = 귀무가설(H_0) + 대립가설(H_1)
  • 귀무가설: 기존에 알려진 사실
  • 대립가설: 새로운 사실

 

※ 자기상관구조 : 시계열 데이터가 과거 값들과 상관관계를 가지는 현상

 

 

 

Box-pierce test
res <- ff[-1:-3, ] - dd1.ts[-1:-3, ]
#ff는 4평균, dd1은 일반데이터
Box.test(res) # 독립이며 자기상관이 없다는 H0 기각 불가 # 즉, 잔차는 독립적이다

(설명)

p-value가 낮을수록 자기상관구조를 가진다는 대립가설을 더 지지함.

보통 0.05보다 낮으면 귀무가설을 기가하고, 대립가설을 채택

 

 

 

1. 단순 이동평균 평활법(Simple Moving Average Smoothing) 
( ff <- filter(dd1.ts, filter=rep(1, 4)/4, method="convolution", sides=1) ) # 평활상수 filter = 0.25 (m=4)
plot(dd1.ts, main="Simple Moving Average Smoothing: dd1")
lines(ff, col="red", lty=2, lwd=2) # fitted line 진한 빨강 점선으로 
abline(h=mean(dd1.ts), col="blue")
res <- ff[-1:-3, ] - dd1.ts[-1:-3, ]
Box.test(res) # 독립이며 자기상관이 없다는 H0 기각 불가 # 즉, 잔차는 독립적이다

 

2. 이중 이동평균 평활법(Double Moving Average Smoothing)
( ff1 <- filter(dd1.ts, filter=rep(1, 3)/3, method="convolution", sides=1) ) # 평활상수 filter= 0.33 (m=3) #1번째
( ff2 <- filter(ff1, filter=rep(1, 3)/3, method="convolution", sides=1) ) # 평활상수 filter= 0.33 (m=3) #2번째
plot(dd1.ts, main="Double Moving Average Smoothing: dd1")
lines(ff2, col="red", lty=2, lwd=2) # fitted line 진한 빨강 점선으로 
abline(h=mean(dd1.ts), col="red")
res <- ff2[-1:-3, ] - dd1.ts[-1:-3, ]
Box.test(res)

ff1, ff2를 각각 2번 평활화

 

3. 가중 이동평균 평활법(Weighted Moving Average Smoothing)
w1 <- c(0.4, 0.3, 0.2, 0.1) # 평활상수 filter = (0.4, 0.3, 0.2, 0.1) # 동일 가중이 아니라
( ff3 <- filter(dd1.ts, filter=w1, method="convolution", sides=1) ) # 직전 시간에 40%, 그 이전 30% 등 차별 가중
res <- ff3[-1:-3, ] - dd1.ts[-1:-3, ]
tsdisplay(res, main="Residuals by Moving Average: dd1")
Box.test(res) ## 자기상관은 없으나, Simple MA나 Double MA 보다는 p-value 낮음

#동일가중이 아니라 4개의 수치를 각각 0.4, 0.3, 0.2, 0.1로 가중을 주어 계산

 

4. 이중 가중 이동평균 평활법(Double Weight Moving Average Smoothing)
w1 <- c(0.4, 0.3, 0.2, 0.1)

ff3 <- filter(dd1.ts, filter=w1, method="convolution", sides=1) 
( ff4 <- filter(ff3, filter=w1, method="convolution", sides=1) )

plot(dd1.ts, main="Simple Moving Average Smoothing: dd1")
lines(ff4, col="red", lty=2, lwd=2) # fitted line 진한 빨강 점선으로 
abline(h=mean(dd1.ts), col="red")

res <- ff4[-1:-3, ] - dd1.ts[-1:-3, ]
Box.test(res)

 

종합
print(f1)
print(f2)
print(f3)
print(f4)

 

 

요소분해(Decomposition)

시계열 자료는 우연변동, 추세변동, 계졀변동 주기변동 등 다양한 변동의 성분이 중첩되어 있음

각 요소를 분해하는 방법에는

 - 선형적으로 구성되는 가법모형(Additive)

 - 비선형적으로 구성되는 승법모형(Multiplicative)

 

dd2.ts <- ts(data=dd2, start=c(2016, 1), frequency=4)
dd4.ts <- ts(dat=dd4, start=c(2016, 1), freq=4)

plot(decompose(dd2.ts, type="additive"))
plot(decompose(dd4.ts, type="additive"))
#비선형을 사용할 경우 type="multiplicative"

dd4_a <- decompose(dd4.ts, type="a")
names(dd4_a) # 분석결과의 내용

dd4_a$seasonal # 계절변동 분석결과
dd4_a$trend # 추세변동 분석결과
dd4_a$random # 우연변동 분석결과

ddd1 <- dd4 - dd4_a$seasonal # 계절변동 제거자료 # 1320.852-178.852 = 1142 
ddd2 <- dd4 - dd4_a$trend # 추세변동 제거자료
#dd4 = dd4_a$seasonal + dd4_a$trend + dd4_a$random
plot(ddd1, main="Decomposition of Seasonal Variation: ddd1") # 추세변동을 제거한 시계열 자료
plot(ddd2, main="Decomposition of Trend Variation : ddd2") # 계절변동을 제거한 시계열 자료
반응형