카테고리 없음
[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") # 계절변동을 제거한 시계열 자료
반응형