R version 2.8.0 (2008-10-20) Copyright (C) 2008 The R Foundation for Statistical Computing ISBN 3-900051-07-0 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(227.86 + ,198.24 + ,194.97 + ,184.88 + ,196.79 + ,205.36 + ,226.72 + ,226.05 + ,202.50 + ,194.79 + ,192.43 + ,219.25 + ,217.47 + ,192.34 + ,196.83 + ,186.07 + ,197.31 + ,215.02 + ,242.67 + ,225.17 + ,206.69 + ,197.75 + ,196.43 + ,213.55 + ,222.75 + ,194.03 + ,201.85 + ,189.50 + ,206.07 + ,225.59 + ,247.91 + ,247.64 + ,213.01 + ,203.01 + ,200.26 + ,220.50 + ,237.90 + ,216.94 + ,214.01 + ,196.00 + ,208.37 + ,232.75 + ,257.46 + ,267.69 + ,220.18 + ,210.61 + ,209.59 + ,232.75 + ,232.75 + ,219.82 + ,226.74 + ,208.04 + ,220.12 + ,235.69 + ,257.05 + ,258.69 + ,227.15 + ,219.91 + ,219.30 + ,259.04 + ,237.29 + ,212.88 + ,226.03 + ,211.07 + ,222.91 + ,249.18 + ,266.38 + ,268.53 + ,238.02 + ,224.69 + ,213.75 + ,237.43 + ,248.46 + ,210.82 + ,221.40 + ,209.00 + ,234.37 + ,248.43 + ,271.98 + ,268.11 + ,233.88 + ,223.43 + ,221.38 + ,233.76 + ,243.97 + ,217.76 + ,224.66 + ,210.84 + ,220.35 + ,236.84 + ,266.15 + ,255.20 + ,234.76 + ,221.29 + ,221.26 + ,244.13 + ,245.78 + ,224.62 + ,234.80 + ,211.37 + ,222.39 + ,249.63 + ,282.29 + ,279.13 + ,236.60 + ,223.62 + ,225.86 + ,246.41 + ,261.70 + ,225.01 + ,231.54 + ,214.82 + ,227.70 + ,263.86 + ,278.15 + ,274.64 + ,237.66 + ,227.97 + ,224.75 + ,242.91 + ,253.08 + ,228.13 + ,233.68 + ,217.38 + ,236.38 + ,256.08 + ,292.83 + ,304.71 + ,245.57 + ,234.41 + ,234.12 + ,258.17 + ,268.66 + ,245.31 + ,247.47 + ,226.25 + ,251.67 + ,268.79 + ,288.94 + ,290.16 + ,250.69 + ,240.80) > par3 = 'additive' > par2 = 'Triple' > par1 = '12' > #'GNU S' R Code compiled by R2WASP v. 1.0.44 () > #Author: Prof. Dr. P. Wessa > #To cite this work: Wessa P., (2010), Exponential Smoothing (v1.0.4) in Free Statistics Software (v$_version), Office for Research Development and Education, URL http://www.wessa.net/rwasp_exponentialsmoothing.wasp/ > #Source of accompanying publication: > #Technical description: > 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 additive seasonal component. Call: HoltWinters(x = x, seasonal = par3) Smoothing parameters: alpha: 0.1574259 beta : 0.001000688 gamma: 0.3316144 Coefficients: [,1] a 255.3535975 b 0.3168805 s1 -16.1464193 s2 5.5769025 s3 13.9156143 s4 -12.8862191 s5 -7.6828756 s6 -25.8338836 s7 -7.9830663 s8 13.2237146 s9 37.4911215 s10 37.7658094 s11 -3.9057397 s12 -14.7215481 > myresid <- x - fit$fitted[,'xhat'] > postscript(file="/var/www/html/freestat/rcomp/tmp/1vma91274289247.ps",horizontal=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/www/html/freestat/rcomp/tmp/2vma91274289247.ps",horizontal=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/www/html/freestat/rcomp/tmp/36d9u1274289247.ps",horizontal=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/www/html/freestat/rcomp/createtable file can be downloaded at http://www.wessa.net/cretab > load(file="/var/www/html/freestat/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/www/html/freestat/rcomp/tmp/4k5731274289247.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/www/html/freestat/rcomp/tmp/5ce6n1274289247.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/www/html/freestat/rcomp/tmp/6yx5b1274289247.tab") > > try(system("convert tmp/1vma91274289247.ps tmp/1vma91274289247.png",intern=TRUE)) character(0) > try(system("convert tmp/2vma91274289247.ps tmp/2vma91274289247.png",intern=TRUE)) character(0) > try(system("convert tmp/36d9u1274289247.ps tmp/36d9u1274289247.png",intern=TRUE)) character(0) > > > proc.time() user system elapsed 1.488 0.790 1.883