R version 3.3.0 (2016-05-03) -- "Supposedly Educational" Copyright (C) 2016 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > x <- c(2341 + ,2115 + ,2402 + ,2180 + ,2453 + ,2507 + ,2679 + ,2622 + ,2618 + ,2648 + ,2523 + ,2473 + ,2513 + ,2466 + ,2544 + ,2537 + ,2564 + ,2582 + ,2716 + ,2904 + ,2851 + ,2932 + ,2772 + ,2811 + ,2935 + ,2783 + ,3003 + ,2995 + ,3127 + ,2985 + ,3287 + ,3236 + ,3252 + ,3228 + ,2856 + ,3176 + ,3362 + ,3036 + ,3330 + ,3251 + ,3318 + ,3238 + ,3597 + ,3708 + ,3902 + ,3745 + ,3426 + ,3526 + ,3483 + ,3458 + ,3824 + ,3696 + ,3518 + ,3814 + ,3996 + ,4136 + ,4037 + ,3915 + ,3760 + ,3955 + ,4160 + ,4115 + ,4202 + ,4018 + ,4233 + ,4029 + ,4401 + ,4645 + ,4491 + ,4379 + ,4394 + ,4472 + ,4614 + ,4160 + ,4328 + ,4202 + ,4635 + ,4542 + ,4920 + ,4774 + ,4698 + ,4916 + ,4703 + ,4616 + ,4873 + ,4375 + ,4801 + ,4427 + ,4684 + ,4648 + ,5225 + ,5174 + ,5181 + ,5266 + ,4839 + ,5032 + ,5221 + ,4658 + ,5014 + ,4980 + ,4952 + ,4946 + ,5365 + ,5456 + ,5397 + ,5436 + ,4995 + ,5019 + ,5249 + ,4799 + ,5137 + ,4979 + ,4951 + ,5265 + ,5612 + ,5572 + ,5403 + ,5373 + ,5252 + ,5437 + ,5296 + ,5011 + ,5294 + ,5335 + ,5398 + ,5396 + ,5724 + ,5898 + ,5718 + ,5625 + ,5380 + ,5488 + ,5678 + ,5224 + ,5596 + ,5184 + ,5620 + ,5531 + ,5816 + ,6086 + ,6175 + ,6112 + ,5813 + ,5740 + ,5821 + ,5294 + ,5881 + ,5589 + ,5845 + ,5706 + ,6355 + ,6404 + ,6426 + ,6375 + ,5869 + ,5994 + ,6105 + ,5792 + ,6011 + ,5968 + ,6255 + ,6208 + ,6897 + ,6814 + ,6897 + ,6596 + ,6188 + ,6406 + ,6548 + ,5842 + ,6555 + ,6424 + ,6596 + ,6645 + ,7203 + ,7128 + ,7133 + ,6778 + ,6593 + ,6591 + ,6120 + ,5612 + ,6070 + ,5983 + ,6145 + ,6303 + ,6588 + ,6640 + ,6719 + ,6575 + ,6487 + ,6510 + ,6365 + ,5844 + ,5974 + ,5880 + ,6279 + ,6342 + ,6598 + ,6801 + ,6529 + ,6369 + ,6028 + ,6187 + ,6164 + ,5866 + ,6198 + ,5898 + ,6462 + ,6063 + ,6496 + ,6678 + ,6554 + ,6513 + ,6210 + ,5928 + ,6268 + ,5582 + ,5869 + ,5764 + ,6082 + ,6062 + ,6810 + ,6727 + ,6537 + ,6175 + ,6014 + ,6109) > par3 = 'multiplicative' > par2 = 'Triple' > par1 = '12' > par3 <- 'multiplicative' > par2 <- 'Triple' > par1 <- '12' > #'GNU S' R Code compiled by R2WASP v. 1.2.327 () > #Author: root > #To cite this work: Wessa P., (2013), Exponential Smoothing (v1.0.5) in Free Statistics Software (v$_version), Office for Research Development and Education, URL http://www.wessa.net/rwasp_exponentialsmoothing.wasp/ > #Source of accompanying publication: > # > par1 <- as.numeric(par1) > if (par2 == 'Single') K <- 1 > if (par2 == 'Double') K <- 2 > if (par2 == 'Triple') K <- par1 > nx <- length(x) > nxmK <- nx - K > x <- ts(x, frequency = par1) > if (par2 == 'Single') fit <- HoltWinters(x, gamma=F, beta=F) > if (par2 == 'Double') fit <- HoltWinters(x, gamma=F) > if (par2 == 'Triple') fit <- HoltWinters(x, seasonal=par3) > fit Holt-Winters exponential smoothing with trend and multiplicative seasonal component. Call: HoltWinters(x = x, seasonal = par3) Smoothing parameters: alpha: 0.3977449 beta : 0.02385914 gamma: 0.2723045 Coefficients: [,1] a 6178.7183573 b 1.7765375 s1 0.9913508 s2 0.9135356 s3 0.9746619 s4 0.9522800 s5 0.9997545 s6 0.9862356 s7 1.0621995 s8 1.0668308 s9 1.0491120 s10 1.0225647 s11 0.9798662 s12 0.9836193 > myresid <- x - fit$fitted[,'xhat'] > postscript(file="/var/wessaorg/rcomp/tmp/1yo5b1463658704.ps",horizontal=F,onefile=F,pagecentre=F,paper="special",width=8.3333333333333,height=5.5555555555556) > op <- par(mfrow=c(2,1)) > plot(fit,ylab='Observed (black) / Fitted (red)',main='Interpolation Fit of Exponential Smoothing') > plot(myresid,ylab='Residuals',main='Interpolation Prediction Errors') > par(op) > dev.off() null device 1 > postscript(file="/var/wessaorg/rcomp/tmp/2x0fw1463658704.ps",horizontal=F,onefile=F,pagecentre=F,paper="special",width=8.3333333333333,height=5.5555555555556) > p <- predict(fit, par1, prediction.interval=TRUE) > np <- length(p[,1]) > plot(fit,p,ylab='Observed (black) / Fitted (red)',main='Extrapolation Fit of Exponential Smoothing') > dev.off() null device 1 > postscript(file="/var/wessaorg/rcomp/tmp/3b6ld1463658704.ps",horizontal=F,onefile=F,pagecentre=F,paper="special",width=8.3333333333333,height=5.5555555555556) > op <- par(mfrow = c(2,2)) > acf(as.numeric(myresid),lag.max = nx/2,main='Residual ACF') > spectrum(myresid,main='Residals Periodogram') > cpgram(myresid,main='Residal Cumulative Periodogram') > qqnorm(myresid,main='Residual Normal QQ Plot') > qqline(myresid) > par(op) > dev.off() null device 1 > > #Note: the /var/wessaorg/rcomp/createtable file can be downloaded at http://www.wessa.net/cretab > load(file="/var/wessaorg/rcomp/createtable") > > a<-table.start() > a<-table.row.start(a) > a<-table.element(a,'Estimated Parameters of Exponential Smoothing',2,TRUE) > a<-table.row.end(a) > a<-table.row.start(a) > a<-table.element(a,'Parameter',header=TRUE) > a<-table.element(a,'Value',header=TRUE) > a<-table.row.end(a) > a<-table.row.start(a) > a<-table.element(a,'alpha',header=TRUE) > a<-table.element(a,fit$alpha) > a<-table.row.end(a) > a<-table.row.start(a) > a<-table.element(a,'beta',header=TRUE) > a<-table.element(a,fit$beta) > a<-table.row.end(a) > a<-table.row.start(a) > a<-table.element(a,'gamma',header=TRUE) > a<-table.element(a,fit$gamma) > a<-table.row.end(a) > a<-table.end(a) > table.save(a,file="/var/wessaorg/rcomp/tmp/4l0xu1463658704.tab") > a<-table.start() > a<-table.row.start(a) > a<-table.element(a,'Interpolation Forecasts of Exponential Smoothing',4,TRUE) > a<-table.row.end(a) > a<-table.row.start(a) > a<-table.element(a,'t',header=TRUE) > a<-table.element(a,'Observed',header=TRUE) > a<-table.element(a,'Fitted',header=TRUE) > a<-table.element(a,'Residuals',header=TRUE) > a<-table.row.end(a) > for (i in 1:nxmK) { + a<-table.row.start(a) + a<-table.element(a,i+K,header=TRUE) + a<-table.element(a,x[i+K]) + a<-table.element(a,fit$fitted[i,'xhat']) + a<-table.element(a,myresid[i]) + a<-table.row.end(a) + } > a<-table.end(a) > table.save(a,file="/var/wessaorg/rcomp/tmp/57cbp1463658704.tab") > a<-table.start() > a<-table.row.start(a) > a<-table.element(a,'Extrapolation Forecasts of Exponential Smoothing',4,TRUE) > a<-table.row.end(a) > a<-table.row.start(a) > a<-table.element(a,'t',header=TRUE) > a<-table.element(a,'Forecast',header=TRUE) > a<-table.element(a,'95% Lower Bound',header=TRUE) > a<-table.element(a,'95% Upper Bound',header=TRUE) > a<-table.row.end(a) > for (i in 1:np) { + a<-table.row.start(a) + a<-table.element(a,nx+i,header=TRUE) + a<-table.element(a,p[i,'fit']) + a<-table.element(a,p[i,'lwr']) + a<-table.element(a,p[i,'upr']) + a<-table.row.end(a) + } > a<-table.end(a) > table.save(a,file="/var/wessaorg/rcomp/tmp/6abno1463658704.tab") > > try(system("convert tmp/1yo5b1463658704.ps tmp/1yo5b1463658704.png",intern=TRUE)) character(0) > try(system("convert tmp/2x0fw1463658704.ps tmp/2x0fw1463658704.png",intern=TRUE)) character(0) > try(system("convert tmp/3b6ld1463658704.ps tmp/3b6ld1463658704.png",intern=TRUE)) character(0) > > > proc.time() user system elapsed 1.745 0.232 1.974