제2장 : 통계 분석

먼저 데이터 분석을 수행할 환경의 경로를 설정합니다.

# Working Directory
setwd('C:/Users/wooil/Documents/GitHub/ADP')
getwd()

‘C:/Users/wooil/Documents/GitHub/ADP’

제3절 다변량 분석

1. 상관 분석

피어슨의 상관계수

# (예제)
install.packages("Hmisc")
library(Hmisc)
Installing package into 'C:/Users/wooil/Documents/R/win-library/3.6'
(as 'lib' is unspecified)


package 'Hmisc' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\wooil\AppData\Local\Temp\RtmpoVx66K\downloaded_packages


Loading required package: lattice
Loading required package: survival
Loading required package: Formula
Loading required package: ggplot2
Registered S3 methods overwritten by 'ggplot2':
  method         from
  [.quosures     rlang
  c.quosures     rlang
  print.quosures rlang

Attaching package: 'Hmisc'

The following objects are masked from 'package:base':

    format.pval, units
data(mtcars)
print(head(mtcars))
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

mtcars 데이터셋의 drat, disp 간 산점도와 상관계수

plot(mtcars$drat, mtcars$disp)                         # 음의 직선관계 존재 확인

png

cor(mtcars$drat, mtcars$disp)                          # 상관계수 : -0.71

-0.71021392716927

# mtcars 모든 변수 간 상관계수 - 'rcorr' 함수 이용
rcorr(as.matrix(mtcars), type='pearson')               # 상관계수 행렬과 P-Value 행렬 출력('carb'와 'am' p-value > 0.05 이므로 유의하지 않음)
       mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
mpg   1.00 -0.85 -0.85 -0.78  0.68 -0.87  0.42  0.66  0.60  0.48 -0.55
cyl  -0.85  1.00  0.90  0.83 -0.70  0.78 -0.59 -0.81 -0.52 -0.49  0.53
disp -0.85  0.90  1.00  0.79 -0.71  0.89 -0.43 -0.71 -0.59 -0.56  0.39
hp   -0.78  0.83  0.79  1.00 -0.45  0.66 -0.71 -0.72 -0.24 -0.13  0.75
drat  0.68 -0.70 -0.71 -0.45  1.00 -0.71  0.09  0.44  0.71  0.70 -0.09
wt   -0.87  0.78  0.89  0.66 -0.71  1.00 -0.17 -0.55 -0.69 -0.58  0.43
qsec  0.42 -0.59 -0.43 -0.71  0.09 -0.17  1.00  0.74 -0.23 -0.21 -0.66
vs    0.66 -0.81 -0.71 -0.72  0.44 -0.55  0.74  1.00  0.17  0.21 -0.57
am    0.60 -0.52 -0.59 -0.24  0.71 -0.69 -0.23  0.17  1.00  0.79  0.06
gear  0.48 -0.49 -0.56 -0.13  0.70 -0.58 -0.21  0.21  0.79  1.00  0.27
carb -0.55  0.53  0.39  0.75 -0.09  0.43 -0.66 -0.57  0.06  0.27  1.00

n= 32


P
     mpg    cyl    disp   hp     drat   wt     qsec   vs     am     gear  
mpg         0.0000 0.0000 0.0000 0.0000 0.0000 0.0171 0.0000 0.0003 0.0054
cyl  0.0000        0.0000 0.0000 0.0000 0.0000 0.0004 0.0000 0.0022 0.0042
disp 0.0000 0.0000        0.0000 0.0000 0.0000 0.0131 0.0000 0.0004 0.0010
hp   0.0000 0.0000 0.0000        0.0100 0.0000 0.0000 0.0000 0.1798 0.4930
drat 0.0000 0.0000 0.0000 0.0100        0.0000 0.6196 0.0117 0.0000 0.0000
wt   0.0000 0.0000 0.0000 0.0000 0.0000        0.3389 0.0010 0.0000 0.0005
qsec 0.0171 0.0004 0.0131 0.0000 0.6196 0.3389        0.0000 0.2057 0.2425
vs   0.0000 0.0000 0.0000 0.0000 0.0117 0.0010 0.0000        0.3570 0.2579
am   0.0003 0.0022 0.0004 0.1798 0.0000 0.0000 0.2057 0.3570        0.0000
gear 0.0054 0.0042 0.0010 0.4930 0.0000 0.0005 0.2425 0.2579 0.0000       
carb 0.0011 0.0019 0.0253 0.0000 0.6212 0.0146 0.0000 0.0007 0.7545 0.1290
     carb  
mpg  0.0011
cyl  0.0019
disp 0.0253
hp   0.0000
drat 0.6212
wt   0.0146
qsec 0.0000
vs   0.0007
am   0.7545
gear 0.1290
carb       
# 공분산(Covariance) 출력
print(cov(mtcars))
             mpg         cyl        disp          hp         drat          wt
mpg    36.324103  -9.1723790  -633.09721 -320.732056   2.19506351  -5.1166847
cyl    -9.172379   3.1895161   199.66028  101.931452  -0.66836694   1.3673710
disp -633.097208 199.6602823 15360.79983 6721.158669 -47.06401915 107.6842040
hp   -320.732056 101.9314516  6721.15867 4700.866935 -16.45110887  44.1926613
drat    2.195064  -0.6683669   -47.06402  -16.451109   0.28588135  -0.3727207
wt     -5.116685   1.3673710   107.68420   44.192661  -0.37272073   0.9573790
qsec    4.509149  -1.8868548   -96.05168  -86.770081   0.08714073  -0.3054816
vs      2.017137  -0.7298387   -44.37762  -24.987903   0.11864919  -0.2736613
am      1.803931  -0.4657258   -36.56401   -8.320565   0.19015121  -0.3381048
gear    2.135685  -0.6491935   -50.80262   -6.358871   0.27598790  -0.4210806
carb   -5.363105   1.5201613    79.06875   83.036290  -0.07840726   0.6757903
             qsec           vs           am        gear        carb
mpg    4.50914919   2.01713710   1.80393145   2.1356855 -5.36310484
cyl   -1.88685484  -0.72983871  -0.46572581  -0.6491935  1.52016129
disp -96.05168145 -44.37762097 -36.56401210 -50.8026210 79.06875000
hp   -86.77008065 -24.98790323  -8.32056452  -6.3588710 83.03629032
drat   0.08714073   0.11864919   0.19015121   0.2759879 -0.07840726
wt    -0.30548161  -0.27366129  -0.33810484  -0.4210806  0.67579032
qsec   3.19316613   0.67056452  -0.20495968  -0.2804032 -1.89411290
vs     0.67056452   0.25403226   0.04233871   0.0766129 -0.46370968
am    -0.20495968   0.04233871   0.24899194   0.2923387  0.04637097
gear  -0.28040323   0.07661290   0.29233871   0.5443548  0.32661290
carb  -1.89411290  -0.46370968   0.04637097   0.3266129  2.60887097

스피어만의 상관계수(Spearman’s rank correlation coefficient)

피어슨의 상관계수는 두 변수 간의 선형관계의 크기를 측정하는 값으로 비선형적인 상관관계는 나타내지 못함.
스피어만 상관계수는 두 변수 간의 비선형적인 관계도 나타낼 수 있는 값으로, 한 변수를 단조 증가 함수로 변환하여 다른 변수를 나타낼 수 있는 정도를 나타냄.
스피어만의 상관계수는 두 변수를 모두 순위로 변환시킨 후, 두 순위 사이의 피어슨 상관계수로 정의 됨.

스피어만 상관계수 행렬 출력

rcorr(as.matrix(mtcars), type="spearman")
       mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
mpg   1.00 -0.91 -0.91 -0.89  0.65 -0.89  0.47  0.71  0.56  0.54 -0.66
cyl  -0.91  1.00  0.93  0.90 -0.68  0.86 -0.57 -0.81 -0.52 -0.56  0.58
disp -0.91  0.93  1.00  0.85 -0.68  0.90 -0.46 -0.72 -0.62 -0.59  0.54
hp   -0.89  0.90  0.85  1.00 -0.52  0.77 -0.67 -0.75 -0.36 -0.33  0.73
drat  0.65 -0.68 -0.68 -0.52  1.00 -0.75  0.09  0.45  0.69  0.74 -0.13
wt   -0.89  0.86  0.90  0.77 -0.75  1.00 -0.23 -0.59 -0.74 -0.68  0.50
qsec  0.47 -0.57 -0.46 -0.67  0.09 -0.23  1.00  0.79 -0.20 -0.15 -0.66
vs    0.71 -0.81 -0.72 -0.75  0.45 -0.59  0.79  1.00  0.17  0.28 -0.63
am    0.56 -0.52 -0.62 -0.36  0.69 -0.74 -0.20  0.17  1.00  0.81 -0.06
gear  0.54 -0.56 -0.59 -0.33  0.74 -0.68 -0.15  0.28  0.81  1.00  0.11
carb -0.66  0.58  0.54  0.73 -0.13  0.50 -0.66 -0.63 -0.06  0.11  1.00

n= 32


P
     mpg    cyl    disp   hp     drat   wt     qsec   vs     am     gear  
mpg         0.0000 0.0000 0.0000 0.0000 0.0000 0.0071 0.0000 0.0008 0.0013
cyl  0.0000        0.0000 0.0000 0.0000 0.0000 0.0006 0.0000 0.0022 0.0008
disp 0.0000 0.0000        0.0000 0.0000 0.0000 0.0081 0.0000 0.0001 0.0003
hp   0.0000 0.0000 0.0000        0.0023 0.0000 0.0000 0.0000 0.0416 0.0639
drat 0.0000 0.0000 0.0000 0.0023        0.0000 0.6170 0.0102 0.0000 0.0000
wt   0.0000 0.0000 0.0000 0.0000 0.0000        0.2148 0.0004 0.0000 0.0000
qsec 0.0071 0.0006 0.0081 0.0000 0.6170 0.2148        0.0000 0.2644 0.4182
vs   0.0000 0.0000 0.0000 0.0000 0.0102 0.0004 0.0000        0.3570 0.1170
am   0.0008 0.0022 0.0001 0.0416 0.0000 0.0000 0.2644 0.3570        0.0000
gear 0.0013 0.0008 0.0003 0.0639 0.0000 0.0000 0.4182 0.1170 0.0000       
carb 0.0000 0.0005 0.0014 0.0000 0.4947 0.0036 0.0000 0.0000 0.7264 0.5312
     carb  
mpg  0.0000
cyl  0.0005
disp 0.0014
hp   0.0000
drat 0.4947
wt   0.0036
qsec 0.0000
vs   0.0000
am   0.7264
gear 0.5312
carb       

2. 다차원 척도법(Multidimensional Scaling, MDS)

다차원척도법은 여러 대상 간의 거리가 주어져 있을 때, 대상들을 동일한 상대적 거리를 가진 실수공간의 점들로 배치시키는 방법을 말함.
주어진 거리는 추상적인 대상들 간의 거리가 될 수도 있고, 실수공간에서의 거리가 될 수도 있음.
대상들을 2차원이나 3차원 실수공간의 점으로 대응시킬 수 있다면 이 점들을 시각화할 수 있고, 이는 관측치들 간의 전반적 관계에 대한 직관적 이해를 할 수 있게 도와줌. 따라서 다차원척도법은 주로 자료들의 상대적 관계를 이해하는 시각화 방법의 근간으로 주로 사용됨.

(예제) euridist 데이터 - 도시 사이의 거리 매핑

data(eurodist)
print(eurodist)
                Athens Barcelona Brussels Calais Cherbourg Cologne Copenhagen
Barcelona         3313                                                       
Brussels          2963      1318                                             
Calais            3175      1326      204                                    
Cherbourg         3339      1294      583    460                             
Cologne           2762      1498      206    409       785                   
Copenhagen        3276      2218      966   1136      1545     760           
Geneva            2610       803      677    747       853    1662       1418
Gibraltar         4485      1172     2256   2224      2047    2436       3196
Hamburg           2977      2018      597    714      1115     460        460
Hook of Holland   3030      1490      172    330       731     269        269
Lisbon            4532      1305     2084   2052      1827    2290       2971
Lyons             2753       645      690    739       789     714       1458
Madrid            3949       636     1558   1550      1347    1764       2498
Marseilles        2865       521     1011   1059      1101    1035       1778
Milan             2282      1014      925   1077      1209     911       1537
Munich            2179      1365      747    977      1160     583       1104
Paris             3000      1033      285    280       340     465       1176
Rome               817      1460     1511   1662      1794    1497       2050
Stockholm         3927      2868     1616   1786      2196    1403        650
Vienna            1991      1802     1175   1381      1588     937       1455
                Geneva Gibraltar Hamburg Hook of Holland Lisbon Lyons Madrid
Barcelona                                                                   
Brussels                                                                    
Calais                                                                      
Cherbourg                                                                   
Cologne                                                                     
Copenhagen                                                                  
Geneva                                                                      
Gibraltar         1975                                                      
Hamburg           1118      2897                                            
Hook of Holland    895      2428     550                                    
Lisbon            1936       676    2671            2280                    
Lyons              158      1817    1159             863   1178             
Madrid            1439       698    2198            1730    668  1281       
Marseilles         425      1693    1479            1183   1762   320   1157
Milan              328      2185    1238            1098   2250   328   1724
Munich             591      2565     805             851   2507   724   2010
Paris              513      1971     877             457   1799   471   1273
Rome               995      2631    1751            1683   2700  1048   2097
Stockholm         2068      3886     949            1500   3231  2108   3188
Vienna            1019      2974    1155            1205   2937  1157   2409
                Marseilles Milan Munich Paris Rome Stockholm
Barcelona                                                   
Brussels                                                    
Calais                                                      
Cherbourg                                                   
Cologne                                                     
Copenhagen                                                  
Geneva                                                      
Gibraltar                                                   
Hamburg                                                     
Hook of Holland                                             
Lisbon                                                      
Lyons                                                       
Madrid                                                      
Marseilles                                                  
Milan                  618                                  
Munich                1109   331                            
Paris                  792   856    821                     
Rome                  1011   586    946  1476               
Stockholm             2428  2187   1754  1827 2707          
Vienna                1363   898    428  1249 1209      2105
loc = cmdscale(eurodist)
print(loc)
                        [,1]        [,2]
Athens           2290.274680  1798.80293
Barcelona        -825.382790   546.81148
Brussels           59.183341  -367.08135
Calais            -82.845973  -429.91466
Cherbourg        -352.499435  -290.90843
Cologne           293.689633  -405.31194
Copenhagen        681.931545 -1108.64478
Geneva             -9.423364   240.40600
Gibraltar       -2048.449113   642.45854
Hamburg           561.108970  -773.36929
Hook of Holland   164.921799  -549.36704
Lisbon          -1935.040811    49.12514
Lyons            -226.423236   187.08779
Madrid          -1423.353697   305.87513
Marseilles       -299.498710   388.80726
Milan             260.878046   416.67381
Munich            587.675679    81.18224
Paris            -156.836257  -211.13911
Rome              709.413282  1109.36665
Stockholm         839.445911 -1836.79055
Vienna            911.230500   205.93020
x = loc[, 1]
y = loc[, 2]
plot(x,y, type='n', main='eurodist')
text(x,y,rownames(loc),cex=0.8)
abline(v=0, h=0)

png

3. 주성분 분석(Principal Component Analysis)

주성분 분석은 상관관계가 있는 고차원 자료를 자료의 변동을 최대한 보존하는 저차원 자료로 변환시키는 방법으로, 자료의 차원을 축약시키는데 주로 활용됨.
정의에 따라 주성분들은 서로 상관관계가 없고, 주성분들의 분산의 합은 Xi들의 분산의 합과 같음.

# (예제) 미국 50개 주 인구 10만명 당 살인, 폭행, 강간으로 인한 체포의 수와 도시 인구의 비율
library(datasets)
data(USArrests)
print(head(USArrests))
summary(USArrests)
           Murder Assault UrbanPop Rape
Alabama      13.2     236       58 21.2
Alaska       10.0     263       48 44.5
Arizona       8.1     294       80 31.0
Arkansas      8.8     190       50 19.5
California    9.0     276       91 40.6
Colorado      7.9     204       78 38.7



     Murder          Assault         UrbanPop          Rape      
 Min.   : 0.800   Min.   : 45.0   Min.   :32.00   Min.   : 7.30  
 1st Qu.: 4.075   1st Qu.:109.0   1st Qu.:54.50   1st Qu.:15.07  
 Median : 7.250   Median :159.0   Median :66.00   Median :20.10  
 Mean   : 7.788   Mean   :170.8   Mean   :65.54   Mean   :21.23  
 3rd Qu.:11.250   3rd Qu.:249.0   3rd Qu.:77.75   3rd Qu.:26.18  
 Max.   :17.400   Max.   :337.0   Max.   :91.00   Max.   :46.00  

주성분 분석 - cor=TRUE : 공분산 행렬이 아닌 상관계수 행렬 사용하여 수행

fit = princomp(USArrests, cor=TRUE)

주성분의 표준편차, 분산의 비율 등 출력 : 주성분1이 총 분산의 62% 설명

summary(fit)
Importance of components:
                          Comp.1    Comp.2    Comp.3     Comp.4
Standard deviation     1.5748783 0.9948694 0.5971291 0.41644938
Proportion of Variance 0.6200604 0.2474413 0.0891408 0.04335752
Cumulative Proportion  0.6200604 0.8675017 0.9566425 1.00000000

주성분들의 로딩 벡터 출력

loadings(fit)
Loadings:
         Comp.1 Comp.2 Comp.3 Comp.4
Murder    0.536  0.418  0.341  0.649
Assault   0.583  0.188  0.268 -0.743
UrbanPop  0.278 -0.873  0.378  0.134
Rape      0.543 -0.167 -0.818       

               Comp.1 Comp.2 Comp.3 Comp.4
SS loadings      1.00   1.00   1.00   1.00
Proportion Var   0.25   0.25   0.25   0.25
Cumulative Var   0.25   0.50   0.75   1.00

각 주성분의 분산의 크기를 출력 : 스크리 플롯(Scree plot)

주성분의 분산의 감소가 급격하게 줄어들어 주성분의 갯수를 늘릴 때 얻게되는 정보의 양이 상대적으로 미미한 지점에서 주성분의 갯수를 정하는 것이 하나의 방법임.
그 외에도 주성분들이 설명하는 총 분산의 비율이 70~90% 사이가 되는 주성분의 갯수를 선택하는 방법을 사용하기도 함.

plot(fit, type='lines')

png

각 관측치를 주성분들로 표현한 값 출력

print(fit$scores)
                    Comp.1      Comp.2      Comp.3       Comp.4
Alabama         0.98556588  1.13339238  0.44426879  0.156267145
Alaska          1.95013775  1.07321326 -2.04000333 -0.438583440
Arizona         1.76316354 -0.74595678 -0.05478082 -0.834652924
Arkansas       -0.14142029  1.11979678 -0.11457369 -0.182810896
California      2.52398013 -1.54293399 -0.59855680 -0.341996478
Colorado        1.51456286 -0.98755509 -1.09500699  0.001464887
Connecticut    -1.35864746 -1.08892789  0.64325757 -0.118469414
Delaware        0.04770931 -0.32535892  0.71863294 -0.881977637
Florida         3.01304227  0.03922851  0.57682949 -0.096284752
Georgia         1.63928304  1.27894240  0.34246008  1.076796812
Hawaii         -0.91265715 -1.57046001 -0.05078189  0.902806864
Idaho          -1.63979985  0.21097292 -0.25980134 -0.499104101
Illinois        1.37891072 -0.68184119  0.67749564 -0.122021292
Indiana        -0.50546136 -0.15156254 -0.22805484  0.424665700
Iowa           -2.25364607 -0.10405407 -0.16456432  0.017555916
Kansas         -0.79688112 -0.27016470 -0.02555331  0.206496428
Kentucky       -0.75085907  0.95844029  0.02836942  0.670556671
Louisiana       1.56481798  0.87105466  0.78348036  0.454728038
Maine          -2.39682949  0.37639158  0.06568239 -0.330459817
Maryland        1.76336939  0.42765519  0.15725013 -0.559069521
Massachusetts  -0.48616629 -1.47449650  0.60949748 -0.179598963
Michigan        2.10844115 -0.15539682 -0.38486858  0.102372019
Minnesota      -1.69268181 -0.63226125 -0.15307043  0.067316885
Mississippi     0.99649446  2.39379599  0.74080840  0.215508013
Missouri        0.69678733 -0.26335479 -0.37744383  0.225824461
Montana        -1.18545191  0.53687437 -0.24688932  0.123742227
Nebraska       -1.26563654 -0.19395373 -0.17557391  0.015892888
Nevada          2.87439454 -0.77560020 -1.16338049  0.314515476
New Hampshire  -2.38391541 -0.01808229 -0.03685539 -0.033137338
New Jersey      0.18156611 -1.44950571  0.76445355  0.243382700
New Mexico      1.98002375  0.14284878 -0.18369218 -0.339533597
New York        1.68257738 -0.82318414  0.64307509 -0.013484369
North Carolina  1.12337861  2.22800338  0.86357179 -0.954381667
North Dakota   -2.99222562  0.59911882 -0.30127728 -0.253987327
Ohio           -0.22596542 -0.74223824  0.03113912  0.473915911
Oklahoma       -0.31178286 -0.28785421  0.01530979  0.010332321
Oregon          0.05912208 -0.54141145 -0.93983298 -0.237780688
Pennsylvania   -0.88841582 -0.57110035  0.40062871  0.359061124
Rhode Island   -0.86377206 -1.49197842  1.36994570 -0.613569430
South Carolina  1.32072380  1.93340466  0.30053779 -0.131466685
South Dakota   -1.98777484  0.82334324 -0.38929333 -0.109571764
Tennessee       0.99974168  0.86025130 -0.18808295  0.652864291
Texas           1.35513821 -0.41248082  0.49206886  0.643195491
Utah           -0.55056526 -1.47150461 -0.29372804 -0.082314047
Vermont        -2.80141174  1.40228806 -0.84126309 -0.144889914
Virginia       -0.09633491  0.19973529 -0.01171254  0.211370813
Washington     -0.21690338 -0.97012418 -0.62487094 -0.220847793
West Virginia  -2.10858541  1.42484670 -0.10477467  0.131908831
Wisconsin      -2.07971417 -0.61126862  0.13886500  0.184103743
Wyoming        -0.62942666  0.32101297  0.24065923 -0.166651801

바이플롯(bibplot)은 관측치들을 첫 번째와 두 번째 주성분의 좌표에 그린 그림 출력

Comp1 이 Assault, Murder, Rape와 비슷한 방향을 가지고, UrbanPop과 방향이 수직에 가까운 것으로 보아 첫 번째 주성분이 주로 Assault, Murder, Rape 변수들에 대해 상대적으로 큰 가중치를 적용하여 계산된 것을 알 수 있음.

Comp2 이 UrbanPop와 상대적으로 평행하기 때문에 다른 변수들에 비해 UrbanPop의 영향을 크게 받아 구성된 것으로 보임.

즉, 첫 번째 주성분의 값이 작을수록 세 가지 범죄 발생율이 큰 주이고, 두 번째 주성분 값이 작을수록 도심인구 비율이 큰 주라고 해석 할 수 있음.

biplot(fit)

png

제4절 시계열 예측

1.정상성(Stationary)

시간의 흐름에 따라서 관측된 데이터를 시계열자료(Time-series Data)라고 함.
시계열분석(Time Series Analysis)을 위해서는 정상성(Stationary)을 만족해야 함.
정상성은 시점에 상관없이 시계열의 특성이 일정하다는 것을 의미함.

  • 정상성 만족 조건

1) 평균이 일정하다.
2) 분산이 시점에 의존하지 않는다.
3) 공분산은 단지 시차에만 의존하고 시점 자체에는 의존하지 않는다.

위에서 정의한 정상성 만족 조건을 하나라도 만족하지 못하는 경우의 시계열 자료를 비정상 시계열이라고 부름.
대부분의 시계열 자료는 비정상 시계열 자료임. 비정상 시계열 자료는 정상성을 만족하도록 데이터를 정상 시계열 자료로 만든 후에 시계열 분석을 수행함.

따라서 주어진 시계열 자료가 정상성을 만족하는지 판단하는 과정이 필요함. 가장 먼저 시계열 자료 그림을 통해서 자료의 이상점(Outlier)과 개입(Intervention)을 살피고, 정상성 만족 여부와 개략적인 추세 유무를 관찰함.
이상점의 경우 일반적으로 해당 이상값을 제거하고, 개입의 경우 회귀분석을 수행하면 됨.

추세를 보이는(평균이 일정하지 않은) 경우에는 차분(Difference)을 통해 비정상 시계열을 정상 시계열로 바꾸고, 시간에 따라 분산이 일정하지 않은 경우에는 변환(Transformation)을 통해서 정상 시계열로 바꿀 수 있음.

차분이란 현 시점의 자료값에서 전 시점의 자료값을 빼는 것을 말함. 일반적인 차분은 현재 시점에서 바로 전 시점의 자료값을 빼는 것을 말하며, 여러 시점 전의 자료를 빼는 것을 계절차분(Seasonal Difference)이라고 함. 계절성을 갖는 비정상 시계열을 정상 시계열로 바꿀 때 계절차분을 사용함.

2. 시계열 모형

자기회귀 모형(AR모형)

자기회귀모형(Autoregressive model)은 현 시점의 자료가 p 시점 전의 유한개의 과거 자료로 설명될 수 있다는 의미이며 AR(p) 모형이라 함.  

Zt = Φ1 * Zt-1 + Φ2 *Zt-2 + ... + Φp * Zt-p + at  

at : 백색잡음과정(White Noise Process, 대표적 정상 시계열), 시계열 분석에서 오차항을 의미함.  
at는 독립이고 같은 분포를 따르며 평균이 0이고 분산이 σa^2인 확률변수  

<자기회귀모형 식별>  

자기상관함수(ACF, Auto-Correlation Function), 부분자기상관함수(PACF, Partial Auto-Correlation Function)
일반적으로 자기회귀모형은 자기상관함수는 시차가 증가함에 따라 점차적으로 감소하고,
부분자기상관함수는 p+1 시차 이후 급격히 감소하여 절단된 형태이며, 이를 AR(p) 모형이라고 판별함.

이동평균모형(MA모형)

시계열 자료를 모형화 하는데 자기회귀모형 다음으로 많이 쓰이는 모형이 이동평균모형(Moving Average Model)임.  

Zt = at - θ1*at-1 - θ2*at-2 - ... - θp*at-p  

이동평균모형은 현 시점의 자료를 유한개의 백색잡음의 선형결합으로 표현되었기 때문에 항상 정상성을 만족함.  
때문에 이동평균모형은 정상성 가정이 필요없음.  
1차 이동평균모형, MA(1) 모형은 가장 간단한 이동평균모형으로 같은 시점의 백색잡음과 바로 전 시점의 백색잡음의 결합으로 이루어진 모형임.  

<이동평균모형 식별>  

이동평균모형을 판단하기 위한 모형 식별은 자기회귀모형과 마찬가지로 자기상관함수와 부분자기상관함수를 이용하여 식별하게 됨. 이동평균모형은 자기회귀모형과 반대로 자기상관함수는 p+1 시차 이후 절단된 형태가 되고, 이때를 MA(p) 모형이라 볼 수 있음. 그리고 부분자기상관함수는 점차 감소하는 형태를 띄게 됨.

자기회귀누적이동평균모형(ARIMA 모형)

대부분의 많은 시계열 자료가 자기회귀누적이동평균모형(Autoregressive Integrated Moving Average Model)을 따름.  
ARIMA 모형은 기본적으로 비정상 시계열 모형이기 때문에 차분이나 변환을 통해 AR 모형이나 MA 모형, ARMA 모형으로 정상화할 수 있음.  

ARIMA(p, d, q) 모형은 차수 p,d,q의 값에 따라 모형의 이름이 다르게 됨.  
차수 p는 AR 모형과 관련이 있고,  
q는 MA 모형과 관련이 있는 차수임  
d는 ARIMA에서 ARMA로 정상화할 때 몇 번 차분을 했는지를 의미함.  

d=0이면 ARMA(p,q) 모형이라 부르고, 이 모형은 정상성을 만족함.  
p=0이면 IMA(d,q) 모형이라 부르고, 이 모형을 d번 차분하면 MA(q) 모형이 됨.  
q=0이면 ARI(p,d) 모형이며, 이를 d번 차분한 시계열 모형이 AR(p) 모형을 따르게 됨.  

분해 시계열

분해 시계열이란 시계열에 영향을 주는 일반적인 요인을 시계열에서 분리해 분석하는 방법을 말하며
회귀분석적인 방법을 주로 사용하고 있음. 시계열을 구성하는 요소는 다음 4가지로 분류됨.

1) 추세요인
자료의 그림을 그렸을 때 그 형태가 오르거나 내리는 추세를 따르는 경우가 있음.
물론 선형적으로 추세가 있는 것 이외에도 이차식의 형태를 취하거나 지수적 형태를 취할 수도 있는데,
이렇게 자료가 어떤 특정한 형태를 취할 때 추세요인(Trend factor)이 있다고 함.

2) 계절요인
요일마다 반복되거나 일년 중 각 월에 의한 변화, 사분기 자료에서 각 분기에 의한 변화 등
고정된 주기에 따라 자료가 변화하는 경우가 있음. 이렇게 고정된 주기에 따라 자료가 변화할 경우
계절요인(Seasonal factor)이 있다고 함.

3) 순환요인
명백한 경제적이나 자연적인 이유가 없이 알려지지 않은 주기를 가지고 변화하는 자료가 있음.
이와 같이 알려지지 않은 주기를 가지고 자료가 변화할 때 순환요인(Cyclical factor)이 있다고 함.

4) 불규칙요인
위 세 가지의 요인으로 설명할 수 없는 회귀분석에서 오차에 해당하는 요인을 불규칙요인(Irregular factor)라고 함.


분해 시계열 분석법에서는 각 구성요인을 정확하게 분리하는 것이 중요함. 그러나 각 요인을 정확하게 분리하는 것은
그리 쉽지 않음. 또한 분해 시계열 방법은 이론적인 약점이 있는 것으로도 알려져 있음.
하지만 경제학자들이나 조사통계학자들은 이러한 약점에도 널리 사용하고 있으며, 실제로 경제 분석이나 예측에서
이 방법은 성공적으로 사용되고 있음. 분해식의 일반적 정의는 다음과 같음.

Zt = f(Tt,St,Ct,It)

Tt : 경향(추세) 요인
St : 계절요인
Ct : 순환요인
It : 불규칙요인
Zt : 시계열 값
f : 미지의 함수

3. 실습

시계열 자료

1) 시계열 자료 불러오기

(예제1) Nile 데이터

1871~1970 아스완 댐에서 측정한 나일강의 여난 유입량에 관한 시계열 데이터
데이터 자체가 시계열 자료 형식인 ts 클래스를 갖기 때문에 따로 설정할 필요는 없음.
다만, 일반 데이터셋을 시계열 자료 형식으로 변환하려면 ts 함수를 사용하면 됨.

data(Nile)
print(Nile)
Time Series:
Start = 1871
End = 1970
Frequency = 1
  [1] 1120 1160  963 1210 1160 1160  813 1230 1370 1140  995  935 1110  994 1020
 [16]  960 1180  799  958 1140 1100 1210 1150 1250 1260 1220 1030 1100  774  840
 [31]  874  694  940  833  701  916  692 1020 1050  969  831  726  456  824  702
 [46] 1120 1100  832  764  821  768  845  864  862  698  845  744  796 1040  759
 [61]  781  865  845  944  984  897  822 1010  771  676  649  846  812  742  801
 [76] 1040  860  874  848  890  744  749  838 1050  918  986  797  923  975  815
 [91] 1020  906  901 1170  912  746  919  718  714  740

(예제2) ldeaths 데이터

1974~1979 영국 내의 월별 폐질환 사망자에 관한 시계열 데이터
*mdeath는 남성, fdeath는 여성에 관한 폐질환 사망자 데이터임.

data(ldeaths)
print(ldeaths)
Warning message in data(ldeaths):
"data set 'ldeaths' not found"

      Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
1974 3035 2552 2704 2554 2014 1655 1721 1524 1596 2074 2199 2512
1975 2933 2889 2938 2497 1870 1726 1607 1545 1396 1787 2076 2837
1976 2787 3891 3179 2011 1636 1580 1489 1300 1356 1653 2013 2823
1977 3102 2294 2385 2444 1748 1554 1498 1361 1346 1564 1640 2293
1978 2815 3137 2679 1969 1870 1633 1529 1366 1357 1570 1535 2491
1979 3084 2605 2573 2143 1693 1504 1461 1354 1333 1492 1781 1915

2) 그림 고찰

# 나일강 연간 유입량 시계열 그림
# 비계절성을 띄는 데이터. 평균이 변화하는 추세를 보이므로 정상성 만족하지 못함.
plot(Nile)

png

# 폐질환 사망자 시계열 그림
# 년도 별로 계절성을 띄고 있는 것으로 보임. 매 년 일정 주기별로 사망자 수가 늘었다 줄었다 하는 경향을 보임
plot(ldeaths)

png

3) 분해 시계열

그림 고찰을 통해서 봤을 때 영국 내 폐질환 사망자 데이터는 계절성을 띄는 시계열 자료인 것으로 봄.
매년 4분기에 사망자수가 급증했다가 2분기에 급격히 감소하는 모습을 보임.
계절성을 띄는 시계열 자료는 추세요인, 계절요인, 불규칙요인으로 구성됨.
R에서 decompose 함수를 사용하면 시계열 자료를 4가지 요인으로 분해할 수 있음.

ldeaths.decompose = decompose(ldeaths)
print(ldeaths.decompose$seasonal)
           Jan       Feb       Mar       Apr       May       Jun       Jul
1974  873.7514  896.3347  687.5431  156.5847 -284.4819 -440.0236 -519.4236
1975  873.7514  896.3347  687.5431  156.5847 -284.4819 -440.0236 -519.4236
1976  873.7514  896.3347  687.5431  156.5847 -284.4819 -440.0236 -519.4236
1977  873.7514  896.3347  687.5431  156.5847 -284.4819 -440.0236 -519.4236
1978  873.7514  896.3347  687.5431  156.5847 -284.4819 -440.0236 -519.4236
1979  873.7514  896.3347  687.5431  156.5847 -284.4819 -440.0236 -519.4236
           Aug       Sep       Oct       Nov       Dec
1974 -669.8736 -678.2236 -354.3069 -185.2069  517.3264
1975 -669.8736 -678.2236 -354.3069 -185.2069  517.3264
1976 -669.8736 -678.2236 -354.3069 -185.2069  517.3264
1977 -669.8736 -678.2236 -354.3069 -185.2069  517.3264
1978 -669.8736 -678.2236 -354.3069 -185.2069  517.3264
1979 -669.8736 -678.2236 -354.3069 -185.2069  517.3264

폐질환 사망자 시계열 분해 그림

plot(ldeaths.decompose)

png

원 시계열 자료에서 계절요인 제거하기

계절성을 띄는 시계열 자료는 계절요인을 추정해 그 값을 원 시계열자료에서 빼면 적절하게 조정할 수 있음.

ldeaths.decompose.adj = ldeaths - ldeaths.decompose$seasonal
plot(ldeaths.decompose.adj)

png

4) ARIMA 모형

차분

나일강 연간 유입량 데이터는 그림으로 고찰해보았을 때 시간에 따라 평균이 일정하지 않은 비정상 시계열 자료였음. 따라서 diff 함수를 사용하여 차분을 함.

Nile.diff1 = diff(Nile, differences = 1)
plot(Nile.diff1)

png

1번 차분한 결과로는 아직 평균이 일정하지 않아 보임. 차분을 2번 한 결과는 아래와 같음.

Nile.diff2 = diff(Nile, differences = 2)
plot(Nile.diff2)

png

위 그림은 2번 차분한 결과로 시간이 지남에 따라 평균과 분산이 어느 정도 일정한 정상성을 만족하는 것으로 보임.

ARIMA 모형 적합 및 검정

자기상관함수와 부분자기상관함수를 통해 ARIMA 모형을 적합한 후에 최종 모형을 결정할 수 있음.
자기상관함수를 살펴보기 위해 acf 함수를 사용하여 2차 차분을 한 나일강 연간 유입량 시계열 자료의 자기상관함수 그래프를 그려보면 다음과 같음.

acf(Nile.diff2, lag.max=20)
acf(Nile.diff2, lag.max=20, plot=FALSE)
Autocorrelations of series 'Nile.diff2', by lag

     0      1      2      3      4      5      6      7      8      9     10
 1.000 -0.626  0.100  0.067 -0.072  0.017  0.074 -0.192  0.245 -0.079 -0.153
    11     12     13     14     15     16     17     18     19     20
 0.183 -0.106  0.062  0.010 -0.096  0.134 -0.134  0.091 -0.030  0.003

png

acf 함수의 lag 개수 20개로 설정했음. lag 개수를 너무 많이 설정하면 자기상관함수 그래프를 보고 모형 식별을 위한 판단이 힘들기 때문에 적절한 값을 선택함.
위 결과 자기상관함수가 lag=1, 8을 제외하고 모두 신뢰구간 안에 있는 것을 확인할 수 있음.
다음으로 부분자기상관함수 그래프를 그려보면 아래와 같음.

pacf(Nile.diff2, lag.max = 20)
pacf(Nile.diff2, lag.max = 20, plot=FALSE)
Partial autocorrelations of series 'Nile.diff2', by lag

     1      2      3      4      5      6      7      8      9     10     11
-0.626 -0.481 -0.302 -0.265 -0.273 -0.112 -0.353 -0.213  0.038 -0.120 -0.117
    12     13     14     15     16     17     18     19     20
-0.197 -0.132 -0.055 -0.109  0.022 -0.184 -0.067 -0.037 -0.024

png

부분자기상관함수가 lag=1~8에서 신뢰구간을 넘어서 음의 값을 가지고, lag=9에서 절단된 것을 볼 수 있음.
이와 같이 자기상관함수와 부분자기상관함수의 그래프를 종합해보면 다음과 같은
ARMA 모형이 존재하게 됨.

- ARMA(8,0) : 부분자기상관함수 그래프에서 lag=9에서 절단되었음
- ARMA(0,1) : 자기상관함수 그래프에서 lag=2에서 절단되었음
- ARMA(p,q) : AR 모형과 MA 모형을 혼합하여 모형을 식별하고 결정해야 함

어떤 모형을 선택해야하느냐 하는 문제는 생각처럼 쉽지 않음. 모수가 많다면 모형을 설명하는 설명력이
커지겠지만, 모형이 복잡하고 이해하기 어려움. 반대로, 모수가 적은 모형을 선택한다면 모형이 단순하고
이해하기 쉽지만, 모형을 설명하는 설명력이 상대적으로 낮아질 수밖에 없음.
본 예제에서는 forecast 패키지에 있는 auto.arima 함수를 사용하여 적절한 ARIMA 모형을 결정하도록 할 것임.

forecast 패키지 - auto.arima 함수

install.packages('forecast')
library(forecast)
auto.arima(Nile)
Installing package into 'C:/Users/wooil/Documents/R/win-library/3.6'
(as 'lib' is unspecified)


package 'forecast' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\wooil\AppData\Local\Temp\RtmpoVx66K\downloaded_packages


Registered S3 method overwritten by 'xts':
  method     from
  as.zoo.xts zoo
Registered S3 method overwritten by 'quantmod':
  method            from
  as.zoo.data.frame zoo
Registered S3 methods overwritten by 'forecast':
  method             from    
  fitted.fracdiff    fracdiff
  residuals.fracdiff fracdiff



Series: Nile
ARIMA(1,1,1)

Coefficients:
         ar1      ma1
      0.2544  -0.8741
s.e.  0.1194   0.0605

sigma^2 estimated as 20177:  log likelihood=-630.63
AIC=1267.25   AICc=1267.51   BIC=1275.04

auto.arima 함수를 사용하여 나일강의 연간 유입량 시계열 자료에 적절한 모형은 ARIMA(1,1,1) 모형으로 결정된 것을 알 수 있음.

ARIMA 모형을 이용한 예측

시계열 자료에 대해 적절한 ARIMA 모형이 결정되었다면, ARIMA 모형을 통해 미래의 수치 값을 예측할 수 있음.
앞서 나일강 연간 유입량 시계열 자료의 모형은 ARIMA(1,1,1) 모형으로 결정되었음.
이 시계열 자료를 ARIMA(1,1,1) 모형에 적합함.

Nile.arima = arima(Nile, order=c(1,1,1))
Nile.arima
Call:
arima(x = Nile, order = c(1, 1, 1))

Coefficients:
         ar1      ma1
      0.2544  -0.8741
s.e.  0.1194   0.0605

sigma^2 estimated as 19769:  log likelihood = -630.63,  aic = 1267.25

데이터를 모형에 적합한 후 forecast 패키지의 forecast 함수를 사용하여 미래의 수치 값을 예측함.
h=10은 10개 년도만 예측한다는 의미임.

Nile.forecasts = forecast(Nile.arima, h=10)

나일강 유입량 데이터 예측 그래프

plot(Nile.forecasts)

png

Reference

데이터 분석 전문가 가이드

태그:

카테고리:

업데이트:

댓글남기기