ADP (R)

오늘의 ADP 준비 / 2022-09-24 토

멋쟁이천재사자 2022. 9. 24. 14:53

지난 5월 21일 25회 ADP 필기를 합격했고, 9월 25일 26회 실기를 준비하고 있습니다.

드디어 내일 시험입니다.

 

1-1. 시계열 문제 풀이 업데이트 실패

 

기계2. 시계열 문제(유입관광객) 문제를 끝내 제대로 풀지 못했습니다.

log 변환을 해도 분산이 안정화되지 않습니다.

 

#[Adp 실기 기출 풀이] 25회 시계열 문제 (풀이중)
library(sarima)
library(dplyr) 

# 추세가 있고 분산 증가하며 계절성이 존재하는 데이터 생성
# 3개의 결측치도 강제로 생성
set.seed(5678)   
ss <- sim_sarima(252, model=list(sar=0.8,nseasons=12, sigma2=1)) 

data.frame(r=ss) %>%    
  mutate(no=row_number()) %>%  
  mutate(visitors=100000+no*100+round(no*r*10)) %>% 
  select(no, visitors) %>%  
  mutate(visitors=ifelse(no %in% c(99,121,245),NA,visitors)) -> x


#EDA
summary(x)
library(tseries)
library(forecast)
x %>% 
  mutate(visitors = ifelse(is.na(visitors),0,visitors)) %>%  
  select(visitors) %>%  
  ts(frequency = 12, start = c(2001,01)) %>%  
  #monthplot(choice = "seasonal", cex.axis = 0.8) 
  autoplot()

# 결측치 처리
x %>% 
  mutate(visitors = ifelse(is.na(visitors),111833,visitors)) %>%  
  select(visitors) %>%  
  ts(frequency = 12, start = c(2001,01)) %>%  
  {x2 <<- .} %>% 
  autoplot()

# 시간의 흐름에 따라 변동폭이 커짐. 
# 안정화를 위해 log변환해도 동일??
# 비정상 시계열로 보이는데 adf.test 는 정상이라고 나오고...
plot(x2)
plot(log(x2))

 

1-2. nsdiffs() 를 통한 계절 차분

 

sarima 모델링을 위해 Forecasting: Principles and Practice(https://otexts.com/fppkr/index.html) 를 조금 공부했습니다.

 

gas 데이터는 추세도 존재하고 분산도 안정화되지 않은 샘플입니다. 또한 계절성도 확인됩니다.

auto.arima(gas) 를 돌리면 ARIMA(2,1,1)(0,1,1)[12]  로 확인이 됩니다.

 

auto.arima 로 블랙박스처럼 튀어 나온 결과 모델을 acf pacf 를 이용해서 직접 유도 해보고자 시도했습니다.

계절차분이 auto.arima 에서 1로 확인되는데, 계절성 차분은 nsdiffs 를 이용해 가능하다고 합니다.

출처 : https://otexts.com/fppkr/stationarity.html

 

nsdiffs(gas) 를 통해 계절성 부분의 d 도 1이 적당함을 확인할 수 있었습니다.

그렇지만 pq 인수값을 뽑아내지 못했습니다.

decompose stl diff acf pacf 등을 이용해서 pdq 후보 값을 뽑아낼 수 있을 것 같은데 마무리가 안되네요.

 

# ARIMA(2,1,1)(0,1,1)[12] 
auto.arima(gas)

# 차분1
ndiffs(gas)

# 계절차분 필요수 1 (1차차분 후에도 1로확인됨.로그에 1차 차분해도 확인됨 )
nsdiffs(gas)
nsdiffs(diff(gas))
nsdiffs(diff(log(gas)))

ndiffs(decompose(gas)$seasonal)
plot(decompose(gas)$seasonal)

# 분산 안정화
par(mfrow = c(2, 2))
plot(gas,main="gas");plot(log(gas),main="log(gas)")

#비계절 q 인수확인 2 이후에 0에 수렴했다가 다시 주기적으로 벗어남
nsgas <- gas - decompose(gas)$seasonal
ndiffs(nsgas)
plot(nsgas)
Acf(diff(nsgas))

 

 

nsgas <- gas - decompose(gas)$seasona 는 아래 자료를 참고해서 시도해보았습니다.

계절부분을 제거하고 비계절 부분의 pdq 를 확인해보려고 하는데 auto.arima 와 유사한 결과를 찾는데 실패했습니다.

출처 : https://kerpect.tistory.com/161

 

1-3. log 변환을 통한 분산 안정화

par(mfrow = c(2, 2))
plot(gas,main="gas");plot(log(gas),main="log(gas)")

 

gas 데이터는 log 변환으로 분산이 안정화 됩니다.

아래 스크립트러 인위적으로 생성한 x 는 log 변환으로 분산이 안정화되지 않습니다.

인위적으로 생성한 방식에 문제가 있는 듯 합니다.

 

library(sarima)
library(dplyr)
set.seed(5678)  
ss <- sim_sarima(252, model=list(sar=0.8,nseasons=12, sigma2=1))

data.frame(r=ss) %>%   
  mutate(no=row_number()) %>% 
  mutate(visitors=100000+no*100+round(no*r*10)) %>%
  select(no, visitors) %>% 
  mutate(visitors=ifelse(no %in% c(99,121,245),NA,visitors)) -> x

 

 

2. 다항회귀분석 시각화

 

set.seed(7355826)                   # Create example data frame
x <- rnorm(200)
y <- rnorm(200) + 0.2 * x^3
data <- data.frame(x, y)
head(data) 

my_mod <- lm(y ~ poly(x, 4),        # Estimate polynomial regression model
             data = data)
summary(my_mod)                     # Summary statistics of polynomial regression model
plot(y ~ x, data)                   # Draw Base R plot
lines(sort(data$x),                 # Draw polynomial regression curve
      fitted(my_mod)[order(data$x)],
      col = "red",
      type = "l")

 

출처 : https://statisticsglobe.com/add-polynomial-regression-line-plot-r

 

3. 관리도

출처 : https://www.qimacros.com/free-excel-tips/control-chart-limits/

 

 

4. 테미스

테미스는 불균형 데이터를 처리하는 패키지인데 저울을 들고 있는 그리스 신 이름을 따온 것이라고 합니다.

불균형데이터 처리를 위해 공부해볼까 했는데, (제26회)R_package_list.txt 에는 없는 패키지네요.


https://terms.naver.com/entry.naver?docId=3398227&cid=58143&categoryId=58143
테미스는 가이아와 우라노스 사이에서 태어난 티탄 12신 중 하나로, 메티스에 이어 제우스의 두 번째 아내가 된 여신이다.
법, 질서, 정의, 지혜,저울, 칼, 눈을 가린 헝겊

https://www.rdocumentation.org/packages/themis/versions/1.0.0
themis contains extra steps for the recipes package for dealing with unbalanced data. 
The name themis is that of the ancient Greek god who is typically depicted with a balance.

5. two sample z-test

모집단의 분산(또는 표준편차)이 알려져있다면 z-test 를 수행하며, 그것은 표본의 크기가 30 보다 크거나 아닌 조건보다 우선인 듯 합니다.

출처: https://vitalflux.com/two-samples-z-test-for-means-formula-examples/

 

z-test는 두 집단의 평균비교를 통한 가설을 검증하는 분석기법을 말한다. 원칙적으로 모집단의 표준편차를 알고 있는 경우에 z-test를 사용하며, 표준편차를 모를 경우 t-test를 사용한다. 그러나 표본의 크기가 30보다 크다면 ‘중심극한정리(Central Limit Theorem)’에 의해서 정규분포를 따른다고 보고 모집단의 표준편차를 모를지라도 z-test를 사용할 수 있다.

출처 : https://terms.naver.com/entry.naver?docId=20762&cid=43659&categoryId=43659

 

 

 

.