AI/시계열자료 분석

[R] stl() 이란? :: stl parameter :: stl s.window

슈퍼짱짱 2019. 10. 29. 14:46
반응형

R에서 시계열 데이터 분해하는 방법


time series 데이터를 체계적 성분으로 분해하는 함수 중 하나가 stl() 이다.


stl(x, s.window, s.degree = 0,

    t.window = NULL, t.degree = 1,

    l.window = nextodd(period), l.degree = t.degree,

    s.jump = ceiling(s.window/10),

    t.jump = ceiling(t.window/10),

    l.jump = ceiling(l.window/10),

    robust = FALSE,

    inner = if(robust)  1 else 2,

    outer = if(robust) 15 else 0,

    na.action = na.fail)


stl() 함수에 input으로 들어가는 데이터의 형태와, default값이 없는 s.window parameter에 대해 알아보겠다.

일반적으로 stl(x, s.window = "periodic")의 형태를 가장 많이 쓴다.




1. x


stl()은 시계열 자료를 계절성분, 추세성분, 불규칙성분으로 분해하는 함수로, ts 데이터를 input으로 받는다.


* ts()


vector 혹은 matrix type의 데이터를 시계열자료로 변형해주는 함수.


예) 

> ex <- sample(1:100,100,replace = T)

> ts(ex, start=1, frequency = 4) # 데이터를 주기가 4인 시계열자료로 변환


   Qtr1 Qtr2 Qtr3 Qtr4

1    15   88   10   25

2    27   36   92   61

3    22   92   13    9

4    55   86   95   34


> ts(ex, start=1995, frequency = 12) # 데이터를 1995년부터 월별 시계열자료로 변환


     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

1995  15  88  10  25  27  36  92  61  22  92  13   9

1996  55  86  95  34   1  11  31  73  17  73  70  34

1997  95  33  85  40  15  70  81  69  94  36  51   3

1998  62  73  56  39  17  75  66  21  30  70  62  86

1999  45  82  74  51  48  10  50  10  98  53  31  86

2000  64  67   8  31  29   9  23  91  74  41  37  70

2001  48  61  58  85  72  47   1  98  51  63  87  14

2002   5  96  54  88  75  33   8  56   2   7  17   2

2003  56  64  13  68 


> ts(ex, start=1995, end = 2000, frequency = 12) # 실제 데이터보다 짧은 end 지정


     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

1995  15  88  10  25  27  36  92  61  22  92  13   9

1996  55  86  95  34   1  11  31  73  17  73  70  34

1997  95  33  85  40  15  70  81  69  94  36  51   3

1998  62  73  56  39  17  75  66  21  30  70  62  86

1999  45  82  74  51  48  10  50  10  98  53  31  86

2000  64


> ts(ex, start=1995, end = 2005, frequency = 12) # 실제 데이터보다 긴 end 지정시 처음 데이터부터 다시 반복


     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

1995  15  88  10  25  27  36  92  61  22  92  13   9

1996  55  86  95  34   1  11  31  73  17  73  70  34

1997  95  33  85  40  15  70  81  69  94  36  51   3

1998  62  73  56  39  17  75  66  21  30  70  62  86

1999  45  82  74  51  48  10  50  10  98  53  31  86

2000  64  67   8  31  29   9  23  91  74  41  37  70

2001  48  61  58  85  72  47   1  98  51  63  87  14

2002   5  96  54  88  75  33   8  56   2   7  17   2

2003  56  64  13  68  15  88  10  25  27  36  92  61

2004  22  92  13   9  55  86  95  34   1  11  31  73

2005  17


단, ts 데이터의 주기가 최소 2바퀴 초과 되어야 한다.


10개뿐인 데이터를 주기가 5인 ts 데이터로 변환하면 딱 두 바퀴. -> error

> ex <- sample(1:100,10,replace = T)

> stl(ts(ex, start=1995, frequency = 5), s.window = "periodic") 


Error in stl(ts(ex, start = 1995, frequency = 5), s.window = "periodic") : 

  series is not periodic or has less than two periods




2. s.window


time series 데이터에서 seasonal component를 추출하기위한 parameter로, "periodic" 혹은 7이상의 숫자를 입력해준다.

이 때, 계절의 패턴이 시간에 따라 일정하다고 판단되면 "periodic" 혹은 큰 수를, 계절의 패턴이 시간의 흐름에 따라 진화한다고 판단되면 최근 데이터만 사용하도록 작은 수를 입력한다.


예) AirPassengers 데이터



> plot(stl(AirPassengers, s.window = 100))

> plot(stl(AirPassengers, s.window = "periodic"))


stl_periodic


> plot(stl(AirPassengers, s.window = 10))





반응형