티스토리 뷰

R

[R] 고급 통계

rimo (리모) 2022. 6. 30. 13:49

 

 

 

[R] 기초 통계

앞서 작성한 글들을 바탕으로 R을 이용해 여러 기본적인 통계를 실행합니다. (수식에 대한 자세한 분석은 생략합니다. 이런 함수들이 있고 사용법을 익히는 정도 입니다!) R은 다음과 같이 다양

munak.tistory.com

 

위 글에서 이어집니다. R을 이용해 군집분석, 분산분석, 시계열분석을 실행합니다.

 

 


 

 

군집분석

적절한 목적으로 여러 집단으로 나눈 후 특성 및 차이를 분석하기 위하여 사용한다.

기법에는 최단 연결법, 최장 연결법, 와드연결법, 평균연결법, k-means 등이 있다.

 

 

 

1) 최단 연결법 (Single Linkage Method)

 

두 군집 U와 V사이의 거리 d를 각 군집에 속하는 임의의 두 개체들 사이의 거리중에서 최단거리로 정의하여 가장 유사성이 큰 군집을 묶어나가는 방법이다.

 

 

 

 

 

 

 

2) 최장연결법 (Complete Linkage Method)

 

두 군집 U와 V사이의 거리 d를 각 군집에 속하는 임의의 두 개체들 사이의 거리중에서 최장거리로 정의하여 가장 유사성이 큰 군집을 묶어나가는 방법이다.

 

 

 

 

 

 

 

3) 와드 연결법(Ward's Method)

 

새로운 군집으로 인하여 파생되는 ESS(Error Sum of Squares : 오차 제곱합) 의 증가량을 두 군집 사이의 거리로 정의하여 가장 유사성이 큰 군집을 묶어 나가는 방법이다.

 

 

 

 

 

 

4) 평균 연결법(Average Linkage Method)

 

두 군집 U와 V사이의 거리 d를 각 군집에 속하는 모든 개체들의 평균거리로 정의하여 가장 유사성이 큰 군집을 묶어나가는 방법이다.

 

 

 

 

 

 

 

5) K-means

 

직접 군집을 형성하지 않고, 관찰값들을 몇개의 군집으로 구분시키는 형태를 가진다. 원하는 군집의 개수와 초기값을 정하고 각 데이터들을의 거리가 가장 가까운 seed가 있는 군집으로 분류한다. (적절한 군집의 개수는 일반적으로 3~5개이다.)

 

 

 

 

 

 


 

 

 

분산분석

종속 변수의 개별 관측치와 이들 관측치의 평균값 사이의 변동을 그 원인에 따라 몇가지로 나누어 분석하는 방법이다.

두 집단에서 나온 자료가 동일한 분포를 가지고 있는가를 검정하는 t-검정을 확장하여, k개의 표본들이 같은 분포를 가지고 있는가를 검정하는데에 사용된다.

 

 

ex. 일원분산분석 예시 : 세 종류의 건전지의 수명에 차이가 있을까?

 

- 기존데이터 확인

 

 

 

 

- 일원 분산분석 실행

 

일원분산분석(aov) 이후 다중 비교를 실행합니다. 다중비교(Multiple Comparison)란, 수준(Levels)의 집단 간에 어디에서 차이가 생겼는지 알고 싶을 때 사용하는 방법입니다.

 

 

 

 

 

 

 

ex. 원분산분석 예시 : 온도와 압력에 따른 반응값의 차이는 어떻게 될까?

 

 

 

 

 

 

 

 


 

 

 

시계열분석

특정한 관측치 또는 통계량의 변화가 시간의 흐름에 따라 어떻게 변화하고 있는지 살펴보고 이를 계열화 하는 것을 시계열이라한다. 시계열 분석은 시간의 흐름에 따른 관측치의 변화를 함수로 표현하고 이를 통해 미래의 값을 추정하는 것이다.

 

 

ex. 분석 예

 

 

 

 

 

 

 

 

 

+ 차분(현시점 자료 - 이전시점자료)를 통해 안정적인 시계열 데이터를 얻는다. (차분은 diff 함수를 이용한다. )

 

 

 

 

 

 

 

- 장기 추세선 제거

 

 

 

 

 

 

 

- 추세(차분), 계절요인(이동평균), 순환 변동, 불규칙 변동의 추출

 

 

 

 

# 기존의 AirPassengers(항공기 승객) 데이터셋 사용
AirPassengers

apts<-ts(AirPassengers, frequency=12)   # ts(시계열) data 생성
plot(apts)



# 자기상관함수 
acf(apts)

# 편자기상관함수
pacf(apts)

# 스펙트럼
spectrum(apts)




# diff로 차분하고 log로 변환 안정적 여부 확인
acf(diff(log(AirPassengers)))
pacf(diff(log(AirPassengers)))


install.packages("zoo")
library(zoo)

m<-lm(coredata(apts) ~ index(apts))
apts.eltr<-ts(resid(m), index(apts))

plot(apts.eltr)
plot(diff(log(apts)))





# 시계열 데이터를 x, trend, seasonal, random값으로 분해
f<-decompose(apts)
attributes(f)

plot(f$figure, type = "b", xaxt = "n", xlab = "")


# 날짜에 대한 기준 설정
monthNames<-months(ISOdate(2012, 1:12, 1))
# 축생성 및 설정
axis(1, at = 1:12, labels = monthNames, las = 2)

# 시각화
plot(f)

 

 

 

 

 

- ARIMA 

 

시계열 데이터 기반 분석 기법으로 과거의 관측 값과 오차를 사용해서 현재의 시계열 값을 설명하는 ARMA(Auto-regressive Moving Average) 모델을 일반화 한 것이다. 분기/반기/연간 단위로 다음 지표를 예측한다거나 주간/월간 단위로 지표를 리뷰하며 트렌드에 이상치가 없는지를 모니터링 하는 데 사용된다.

 

R에서도 ARIMA 모델을 사용한 시계열 분석이 가능하다.

 

 

--> ARIMA 를 사용해 실제 데이터(검은색 실선) 이후를 예측한다. 

 

 

 

 

+ log변환을 통해 안정시계열로 변환한 뒤 예측해본다.

 

 

 

install.packages("forecast") # 패키지 다운로드
library(forecast) # 라이브러리 적재

apts.log<-log(apts)

# 데이터를 활용하여 최적의 ARIMA 모형을 선택
apts.log.arima<-auto.arima(apts.log)
summary(apts.log.arima)

#새로운 데이터에 대한 예측값을 구하는데에 사용
fore<-predict(apts.log.arima, n.ahead = 24)

# 예측값 :  $pred와 표준오차 $se를 사용
U<-fore$pred + 2*fore$se
L<-fore$pred - 2*fore$se

# 계절성 기법 : 예측식과 3개의 평활식으로 구성
# mul : multiplicative
apts.smoothing<-HoltWinters(apts.log, seasonal = "mul")

# 예측할 기간 설정
fore2<-predict(apts.smoothing, n.ahead = 24)

#다중 시계열 플롯생성
ts.plot(exp(apts.log), exp(fore$pred), exp(U), exp(L), exp(fore2), 
        col = c(1,2,4,4,6), lty=c(1,1,2,2,3))

# 범례설정
legend("topleft", c("Actual", "ARIMA", "ARIMA Error Bound (95% Confidence)",
                    "exponextial smoothing"), col=c(1,2,4,6), lty=c(1,1,2,3), cex=0.5)

 

 

 

[참고자료]

 

 

ARIMA 모형과 에너지 예측 | 알기 쉬운 산업수학 | 산업수학혁신센터

 

icim.nims.re.kr

 

 

 

감사합니다.

 

 


 

 

 

2022년 AI분석을 위한 R통계교육의 수업내용을 정리한 글입니다.

 

공부한 내용을 복습/기록하기 위해 작성한 글이므로 내용에 오류가 있을 수 있습니다.

 

'R' 카테고리의 다른 글

[R] 데이터 시각화 - ggplot2  (0) 2022.07.04
[R] 데이터 시각화 - 그래프 활용과 Plot  (0) 2022.06.30
[R] 기초 통계  (0) 2022.06.29
[R] 모드(mode)와 자료구조  (0) 2022.06.28
[R] 변수와 벡터  (0) 2022.06.28
댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday