저는 R에서 HoltWinters 함수를 사용하고 있으며 해당 함수에 의해 반환 된 개체에서 “계수”가 나타내는 것을 이해하려고합니다. $
댓글
답변
+1 이것은 혼란 스럽습니다. 시계열의 길이가 $ N 인 경우 $ 및 빈도 $ p $, 소위 “계수”(HW
가 반환 된 객체 인 경우 HW$coeff
로 액세스 할 수 있음) by HoltWinters
)는 정확히 $ a [N] $, $ b [N] $ 및 $ s [N-p + 1] $, $ s [N-p + 값입니다. 2], \ cdots s [N] $ 여기서 이들은 Holt Winters 도움말 페이지의 공식에 의해 정의되며, ?HoltWinters
를 사용하여 R 내에서 액세스 할 수 있습니다.
기본값 인 가법 모델의 경우 my.ts
가 양의 빈도가 $ p $ 인 시계열 객체라고 가정합니다. $ a [N-1] $, $의 값 b [N-1] $ 및 $ s [Np] $까지의 모든 이전 $ s [t] $는 HoltWinters(my.ts)$fitted
테이블에 제공됩니다. n HoltWinters(my.ts)$coeff
는 $$ a [t] = α (Y [t]-s [tp]) + (1-α) (a [t- 1] + b [t-1]) $$
$$ b [t] = β (a [t]-a [t-1]) + (1-β) b [t- 1] $$
$ t = N $ 및 $ \ alpha = $ HoltWinters(my.ts)$alpha
, $ \ beta = $ HoltWinters(my.ts)$beta
및
$$ s [t] = γ (Y [t]-a [t]) + (1-γ) s [tp] $$
$ t = N-p + 1, \ ldots, N $ 및 $ \ alpha = $ HoltWinters(my.ts)$alpha
, $ \ beta = $ HoltWinters(my.ts)$beta
및 $ \ gamma = $ HoltWinters(my.ts)$gamma
.
이것은 $ a $ 및 $ b $ (수준 및 추세)에서 작동하지만 계산을 할 때 계절의 경우 출력에 제공된 것과 약간 다른 값 (약 5 % 이내)을 얻습니다. 누군가 계절에 어떤 일이 일어나고 있는지 설명하기 위해이 답변을 편집 할 수 있기를 바랍니다. 다음은 HoltWinters
함수에서 호출하는 hw
함수의 C 코드에 대한 링크입니다.
https://svn.r-project.org/R/trunk/src/library/stats/src/HoltWinters.c
답변
a, b, s, 알파, 베타 및 감마 매개 변수의 의미는 HoltWinters 함수 (R의 ?HoltWinters
시도)에 대한 도움말에서 세부 정보 .
예 추가 모델은 다음과 같이 설명됩니다.
Yhat[t+h] = a[t] + h * b[t] + s[t - p + 1 + (h - 1) mod p], where a[t], b[t] and s[t] are given by a[t] = α (Y[t] - s[t-p]) + (1-α) (a[t-1] + b[t-1]) b[t] = β (a[t] - a[t-1]) + (1-β) b[t-1] s[t] = γ (Y[t] - a[t]) + (1-γ) s[t-p]
도움말을 보면 예제 중 하나는 다음과 같습니다.
(m <- HoltWinters(co2)) plot(m) plot(fitted(m))
출력 포함 :
Holt-Winters exponential smoothing with trend and additive seasonal component. Call: HoltWinters(x = co2) Smoothing parameters: alpha: 0.5126484 beta : 0.009497669 gamma: 0.4728868 Coefficients: [,1] a 364.7616237 b 0.1247438 s1 0.2215275 s2 0.9552801 s3 1.5984744 s4 2.8758029 s5 3.2820088 s6 2.4406990 s7 0.8969433 s8 -1.3796428 s9 -3.4112376 s10 -3.2570163 s11 -1.9134850 s12 -0.5844250
이제 호출 계수의 출력을 살펴 보겠습니다.
coefficients(m) a b s1 s2 s3 s4 364.7616237 0.1247438 0.2215275 0.9552801 1.5984744 2.8758029 s5 s6 s7 s8 s9 s10 3.2820088 2.4406990 0.8969433 -1.3796428 -3.4112376 -3.2570163 s11 s12 -1.9134850 -0.5844250
이전에 생성 된 동일한 수량의 출력과 정확히 일치합니다.
a
div>, b
, s
, alpha
, beta
및 gamma
어떤 부분이 명확하지 않습니까?
댓글
- 어떤 시점이 " a " 및 " b
대표?
답변
퍼즐이 있다는 데 동의합니다. 퍼즐을보기 위해 R에서 사용할 수있는 co2 시리즈를 고려했습니다. 대답은 깁니다. 오늘 추가 한 * -부분
예상
co2HWBis$coefficients[2]
co2HW$fitted[length(co2HW$fitted[,3]),3]
예 계수는 마지막 예상 추세와 같습니다. 아래에서 이것이 사실이 아닌지 확인할 수 있습니다. 그러나
co2HW$fitted[length(co2HW$fitted[,3]),3]
아래에 설명 된대로 시리즈의 마지막 값을 떨어 뜨린 경우 얻은 계수와 같습니다. 나는 계수가 어떻게 든 “앞으로 쓰여진 것”이라고 생각합니다. 또한 베타 추정을 허용하면 문제가 달라집니다.
소스 코드를 읽고 있습니다 ( http://svn.r-project.org/R/trunk/src/library/stats/R/HoltWinters.R )하지만 아직 무슨 일이 일어나는지 잘 모르겠습니다.
이것은 완전한 코드입니다.
rm(list=ls()) co2HW = HoltWinters(co2, alpha = 0.2, gamma = 0.2, beta = 0.5) # co2HW$coeff[2] co2HW$fitted[length(co2HW$fitted[,3]),3] co2Bis = window(co2,end=c(1997,11)) co2HWBis = HoltWinters(co2Bis, alpha=0.2, gamma=0.2, beta=0.5) co2HWBis$coefficients[2] # co2HWBis$fitted[length(co2HWBis$fitted[,3])-1,3] co2HW$beta*(co2HW$fitted[length(co2HW$fitted[,2]),2] - co2HW$fitted[length(co2HW$fitted[,2])-1,2]) + (1 - co2HW$beta)*co2HW$fitted[length(co2HW$fitted[,3])-1,3] ##################### co2HW = HoltWinters(co2, alpha = 0.2, gamma = 0.2) # co2HW$coeff[2] co2HW$fitted[length(co2HW$fitted[,3]),3] co2Bis = window(co2,end=c(1997,11)) co2HWBis = HoltWinters(co2Bis, alpha=0.2, gamma=0.2) co2HWBis$coefficients[2] # co2HWBis$fitted[length(co2HWBis$fitted[,3])-1,3] co2HW$beta*(co2HW$fitted[length(co2HW$fitted[,2]),2] - co2HW$fitted[length(co2HW$fitted[,2])-1,2]) + (1 - co2HW$beta)*co2HW$fitted[length(co2HW$fitted[,3])-1,3]
* -part
… 어느 날 밤 답답한 답을 줄 수있을 것 같아요. 제 생각에 문제는 co2HW $ fitted 테이블의 타이밍입니다. 마지막 라인은 샘플에서 마지막 기간의 추정 된 추세 수준 및 saison이 아닙니다. 계수는 마지막 기간의 추정 된 수준, 추세 및 saison이지만 이러한 값은 표에 표시되지 않습니다.다음 코드가 설득력이 있기를 바랍니다.
rm(list=ls()) x = co2 m = HoltWinters(x) # m$fitted[length(m$fitted[,3]),3] aux1 = m$alpha*( x[length(x)] - m$fitted[length(m$fitted[,3]),4] ) + ( 1 - m$alpha )*( m$fitted[length(m$fitted[,3]),3] + m$fitted[length(m$fitted[,3]),2] ); aux1 m$coeff[1] aux2 = m$beta*(aux1 - m$fitted[length(m$fitted[,3]),2] ) + (1-m$beta)*m$fitted[length(m$fitted[,3]),3] aux2 m$coeff[2] m$coeff[14] aux3 = m$gamma*(x[length(x)] - aux1) + ( 1 - m$gamma )*m$fitted[length(m$fitted[,3]),4] aux3
댓글
- 사이트에 오신 것을 환영합니다. 질문의 원래 포스터? 이것은 ' 답이 아닌 것 같습니다.
- @ user28623에게 감사합니다! 나는 그것에 대해 뭔가 수상한 것이 있다는 것에 동의합니다. 또한 소스 코드를 읽으려고했지만 ' 진행되지 않았습니다.
- CO2 항목을 게시했고 무슨 일이 일어나고 있는지 알아 낸 것 같습니다. 첫째,
co2HW$fitted[,3]
의 마지막 값은 샘플의 마지막 기간의 예상 추세가 아닙니다. 지난 기간 이전 한 기간의 예상 추세입니다. 둘째,co2HW$coeff[2]
는 마지막 기간의 추세입니다. 제 생각에는co2HW$fitted
테이블의 타이밍이 잘못된 것 같습니다. - @ user28623, 대신
co2HW$fitted[,1]
를 의미합니까?co2HW$fitted[,3]
의? 그리고co2HW$fitted[,1]
는trend
가 아니라level
입니다. 귀하의 답변이 정말 도움이되었다고 생각하지만 약간 혼란 스럽습니다.
답변
다른 답변에서는 볼 수 없지만 놓쳤을 수있는 계수는 예측이 기반 / 수행 된 시계열의 마지막 기간에 대한 평활 수준 및 평활 추세의 값입니다. 해당 시계열의 지난 12 개월 동안.
예측에 대한 적합치 표를 이해하는 것도 도움이됩니다. 시간 t에 해당하는 각 행에 대해 수준 및 추세 값은 시간 t에 대해 평활화 된 값입니다. -1이고 시즌의 값은 tp의 평활 값입니다. 이들은 시간 t, Xhat에 대한 예상 실제 수준을 제공하기 위해 추가됩니다.
나는 꽤 최근에야 R을 사용하기 시작 했으므로 사과드립니다. 내 용어는 “완전히 정확하지 않습니다.
댓글
- 질문이 명확하게 언급되었다고 생각하지 않습니다 '. glen_b가 지적했듯이 불완전합니다. 질문이 명확하지 않기 때문에 ' 답변이 어떻게 제공되는지 알 수 없습니다.
답변
이것은 R의 HoltWinters 문서에서 발췌 한 것입니다. 동일한 질문이 있었고 이것이 동일한 계절 값을 계산할 수없는 이유에 대한 답변입니다. 이 함수는 계절성을 통합 할 때 모든 초기 값을 찾기 위해 분해 방법을 사용하는 반면, 단일 및 이중 지수 평활의 경우이 작업을 수행하지 않습니다.
“계절 모델의 경우 a, b 및 시작 값 s는 start.periods 첫 번째 기간 (추세 구성 요소에 대한 단순 선형 회귀가 시작 수준 및 추세에 사용됨)에서 이동 평균 (분해 함수 참조)을 사용하여 추세 및 계절 성분에서 단순 분해를 수행하여 추론됩니다. 수준 / 추세 모델 (계절 성분 없음)의 경우 a와 b의 시작 값은 각각 x [2] 및 x [2]-x [1]입니다. 수준 전용 모델 (일반 지수 평활)의 경우 a의 시작 값은 x [1]입니다. “
초기 값을 얻는 방법을 설명하는 다음 웹 사이트를 찾았습니다. https://robjhyndman.com/hyndsight/hw-initialization/
댓글
을 볼 때 반환 된 값이 명백하게 일치하지 않는 것 같습니다. 질문이 끝났습니까?