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. Natural language support but running in an English locale 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(78.33,78.21,78.94,77.94,77.31,75.75,77.73,77.90,77.45,77.46,77.97,77.23,76.56,76.70,76.51,76.03,76.69,76.38,76.80,76.63,77.17,78.63,78.89,76.94,77.50,79.27,79.77,78.62,78.60,77.88,78.71,79.27,80.12,81.12,81.48,82.81,82.39,82.41,82.20,81.99,81.61,83.51,84.05,82.99,83.54,84.44,84.24,83.88,84.17,84.59,84.76,85.14,85.22,84.77,84.50,84.56,83.79,83.96,84.80,84.89,84.78,84.80,84.44,84.65,84.22,84.08,85.29,85.00,84.63,84.92,84.61,84.50,84.29,84.50,84.41,84.71,84.21,83.86,84.40,83.71,84.42,85.26,85.08,85.65,85.74,85.89,86.08,85.49,85.97,85.84,86.72,85.42,83.87,85.45,85.35,84.27,83.13,83.79,83.70,83.76,83.47,83.78,84.83,84.43,84.90,85.36,85.49,85.29) > par10 = 'FALSE' > par9 = '0' > par8 = '2' > par7 = '1' > par6 = '3' > par5 = '12' > par4 = '0' > par3 = '1' > par2 = '1' > par1 = '12' > #'GNU S' R Code compiled by R2WASP v. 1.0.44 () > #Author: Prof. Dr. P. Wessa > #To cite this work: Wessa P., (2009), ARIMA Forecasting (v1.0.5) in Free Statistics Software (v$_version), Office for Research Development and Education, URL http://www.wessa.net/rwasp_arimaforecasting.wasp/ > #Source of accompanying publication: > #Technical description: > par1 <- as.numeric(par1) #cut off periods > par2 <- as.numeric(par2) #lambda > par3 <- as.numeric(par3) #degree of non-seasonal differencing > par4 <- as.numeric(par4) #degree of seasonal differencing > par5 <- as.numeric(par5) #seasonal period > par6 <- as.numeric(par6) #p > par7 <- as.numeric(par7) #q > par8 <- as.numeric(par8) #P > par9 <- as.numeric(par9) #Q > if (par10 == 'TRUE') par10 <- TRUE > if (par10 == 'FALSE') par10 <- FALSE > if (par2 == 0) x <- log(x) > if (par2 != 0) x <- x^par2 > lx <- length(x) > first <- lx - 2*par1 > nx <- lx - par1 > nx1 <- nx + 1 > fx <- lx - nx > if (fx < 1) { + fx <- par5 + nx1 <- lx + fx - 1 + first <- lx - 2*fx + } > first <- 1 > if (fx < 3) fx <- round(lx/10,0) > (arima.out <- arima(x[1:nx], order=c(par6,par3,par7), seasonal=list(order=c(par8,par4,par9), period=par5), include.mean=par10, method='ML')) Call: arima(x = x[1:nx], order = c(par6, par3, par7), seasonal = list(order = c(par8, par4, par9), period = par5), include.mean = par10, method = "ML") Coefficients: ar1 ar2 ar3 ma1 sar1 sar2 0.7296 -0.1954 0.3151 -0.8380 0.0415 0.2481 s.e. 0.1676 0.1264 0.0995 0.1461 0.1120 0.1204 sigma^2 estimated as 0.4417: log likelihood = -96.93, aic = 207.86 > (forecast <- predict(arima.out,par1)) $pred Time Series: Start = 97 End = 108 Frequency = 1 [1] 84.34273 84.69485 84.53192 84.45429 84.37866 84.28537 84.40931 84.15942 [9] 84.26195 84.51929 84.45237 84.53608 $se Time Series: Start = 97 End = 108 Frequency = 1 [1] 0.6646205 0.8904152 0.9803098 1.1006656 1.2438278 1.3647960 1.4759654 [8] 1.5896772 1.7011237 1.8075835 1.9113625 2.0132297 > (lb <- forecast$pred - 1.96 * forecast$se) Time Series: Start = 97 End = 108 Frequency = 1 [1] 83.04008 82.94963 82.61052 82.29698 81.94075 81.61037 81.51642 81.04365 [9] 80.92774 80.97642 80.70610 80.59015 > (ub <- forecast$pred + 1.96 * forecast$se) Time Series: Start = 97 End = 108 Frequency = 1 [1] 85.64539 86.44006 86.45333 86.61159 86.81656 86.96037 87.30221 87.27519 [9] 87.59615 88.06215 88.19864 88.48201 > if (par2 == 0) { + x <- exp(x) + forecast$pred <- exp(forecast$pred) + lb <- exp(lb) + ub <- exp(ub) + } > if (par2 != 0) { + x <- x^(1/par2) + forecast$pred <- forecast$pred^(1/par2) + lb <- lb^(1/par2) + ub <- ub^(1/par2) + } > if (par2 < 0) { + olb <- lb + lb <- ub + ub <- olb + } > (actandfor <- c(x[1:nx], forecast$pred)) [1] 78.33000 78.21000 78.94000 77.94000 77.31000 75.75000 77.73000 77.90000 [9] 77.45000 77.46000 77.97000 77.23000 76.56000 76.70000 76.51000 76.03000 [17] 76.69000 76.38000 76.80000 76.63000 77.17000 78.63000 78.89000 76.94000 [25] 77.50000 79.27000 79.77000 78.62000 78.60000 77.88000 78.71000 79.27000 [33] 80.12000 81.12000 81.48000 82.81000 82.39000 82.41000 82.20000 81.99000 [41] 81.61000 83.51000 84.05000 82.99000 83.54000 84.44000 84.24000 83.88000 [49] 84.17000 84.59000 84.76000 85.14000 85.22000 84.77000 84.50000 84.56000 [57] 83.79000 83.96000 84.80000 84.89000 84.78000 84.80000 84.44000 84.65000 [65] 84.22000 84.08000 85.29000 85.00000 84.63000 84.92000 84.61000 84.50000 [73] 84.29000 84.50000 84.41000 84.71000 84.21000 83.86000 84.40000 83.71000 [81] 84.42000 85.26000 85.08000 85.65000 85.74000 85.89000 86.08000 85.49000 [89] 85.97000 85.84000 86.72000 85.42000 83.87000 85.45000 85.35000 84.27000 [97] 84.34273 84.69485 84.53192 84.45429 84.37866 84.28537 84.40931 84.15942 [105] 84.26195 84.51929 84.45237 84.53608 > (perc.se <- (ub-forecast$pred)/1.96/forecast$pred) Time Series: Start = 97 End = 108 Frequency = 1 [1] 0.007879997 0.010513216 0.011596918 0.013032678 0.014741024 0.016192560 [7] 0.017485812 0.018888880 0.020188516 0.021386639 0.022632432 0.023815035 > postscript(file="/var/www/html/freestat/rcomp/tmp/1nszf1293225031.ps",horizontal=F,onefile=F,pagecentre=F,paper="special",width=8.3333333333333,height=5.5555555555556) > opar <- par(mar=c(4,4,2,2),las=1) > ylim <- c( min(x[first:nx],lb), max(x[first:nx],ub)) > plot(x,ylim=ylim,type='n',xlim=c(first,lx)) > usr <- par('usr') > rect(usr[1],usr[3],nx+1,usr[4],border=NA,col='lemonchiffon') > rect(nx1,usr[3],usr[2],usr[4],border=NA,col='lavender') > abline(h= (-3:3)*2 , col ='gray', lty =3) > polygon( c(nx1:lx,lx:nx1), c(lb,rev(ub)), col = 'orange', lty=2,border=NA) > lines(nx1:lx, lb , lty=2) > lines(nx1:lx, ub , lty=2) > lines(x, lwd=2) > lines(nx1:lx, forecast$pred , lwd=2 , col ='white') > box() > par(opar) > dev.off() null device 1 > prob.dec <- array(NA, dim=fx) > prob.sdec <- array(NA, dim=fx) > prob.ldec <- array(NA, dim=fx) > prob.pval <- array(NA, dim=fx) > perf.pe <- array(0, dim=fx) > perf.mape <- array(0, dim=fx) > perf.mape1 <- array(0, dim=fx) > perf.se <- array(0, dim=fx) > perf.mse <- array(0, dim=fx) > perf.mse1 <- array(0, dim=fx) > perf.rmse <- array(0, dim=fx) > for (i in 1:fx) { + locSD <- (ub[i] - forecast$pred[i]) / 1.96 + perf.pe[i] = (x[nx+i] - forecast$pred[i]) / forecast$pred[i] + perf.se[i] = (x[nx+i] - forecast$pred[i])^2 + prob.dec[i] = pnorm((x[nx+i-1] - forecast$pred[i]) / locSD) + prob.sdec[i] = pnorm((x[nx+i-par5] - forecast$pred[i]) / locSD) + prob.ldec[i] = pnorm((x[nx] - forecast$pred[i]) / locSD) + prob.pval[i] = pnorm(abs(x[nx+i] - forecast$pred[i]) / locSD) + } > perf.mape[1] = abs(perf.pe[1]) > perf.mse[1] = abs(perf.se[1]) > for (i in 2:fx) { + perf.mape[i] = perf.mape[i-1] + abs(perf.pe[i]) + perf.mape1[i] = perf.mape[i] / i + perf.mse[i] = perf.mse[i-1] + perf.se[i] + perf.mse1[i] = perf.mse[i] / i + } > perf.rmse = sqrt(perf.mse1) > postscript(file="/var/www/html/freestat/rcomp/tmp/212w61293225031.ps",horizontal=F,onefile=F,pagecentre=F,paper="special",width=8.3333333333333,height=5.5555555555556) > plot(forecast$pred, pch=19, type='b',main='ARIMA Extrapolation Forecast', ylab='Forecast and 95% CI', xlab='time',ylim=c(min(lb),max(ub))) > dum <- forecast$pred > dum[1:par1] <- x[(nx+1):lx] > lines(dum, lty=1) > lines(ub,lty=3) > lines(lb,lty=3) > 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,'Univariate ARIMA Extrapolation Forecast',9,TRUE) > a<-table.row.end(a) > a<-table.row.start(a) > a<-table.element(a,'time',1,header=TRUE) > a<-table.element(a,'Y[t]',1,header=TRUE) > a<-table.element(a,'F[t]',1,header=TRUE) > a<-table.element(a,'95% LB',1,header=TRUE) > a<-table.element(a,'95% UB',1,header=TRUE) > a<-table.element(a,'p-value
(H0: Y[t] = F[t])',1,header=TRUE) > a<-table.element(a,'P(F[t]>Y[t-1])',1,header=TRUE) > a<-table.element(a,'P(F[t]>Y[t-s])',1,header=TRUE) > mylab <- paste('P(F[t]>Y[',nx,sep='') > mylab <- paste(mylab,'])',sep='') > a<-table.element(a,mylab,1,header=TRUE) > a<-table.row.end(a) > for (i in (nx-par5):nx) { + a<-table.row.start(a) + a<-table.element(a,i,header=TRUE) + a<-table.element(a,x[i]) + a<-table.element(a,'-') + a<-table.element(a,'-') + a<-table.element(a,'-') + a<-table.element(a,'-') + a<-table.element(a,'-') + a<-table.element(a,'-') + a<-table.element(a,'-') + a<-table.row.end(a) + } > for (i in 1:fx) { + a<-table.row.start(a) + a<-table.element(a,nx+i,header=TRUE) + a<-table.element(a,round(x[nx+i],4)) + a<-table.element(a,round(forecast$pred[i],4)) + a<-table.element(a,round(lb[i],4)) + a<-table.element(a,round(ub[i],4)) + a<-table.element(a,round((1-prob.pval[i]),4)) + a<-table.element(a,round((1-prob.dec[i]),4)) + a<-table.element(a,round((1-prob.sdec[i]),4)) + a<-table.element(a,round((1-prob.ldec[i]),4)) + a<-table.row.end(a) + } > a<-table.end(a) > table.save(a,file="/var/www/html/freestat/rcomp/tmp/3icsl1293225031.tab") > a<-table.start() > a<-table.row.start(a) > a<-table.element(a,'Univariate ARIMA Extrapolation Forecast Performance',7,TRUE) > a<-table.row.end(a) > a<-table.row.start(a) > a<-table.element(a,'time',1,header=TRUE) > a<-table.element(a,'% S.E.',1,header=TRUE) > a<-table.element(a,'PE',1,header=TRUE) > a<-table.element(a,'MAPE',1,header=TRUE) > a<-table.element(a,'Sq.E',1,header=TRUE) > a<-table.element(a,'MSE',1,header=TRUE) > a<-table.element(a,'RMSE',1,header=TRUE) > a<-table.row.end(a) > for (i in 1:fx) { + a<-table.row.start(a) + a<-table.element(a,nx+i,header=TRUE) + a<-table.element(a,round(perc.se[i],4)) + a<-table.element(a,round(perf.pe[i],4)) + a<-table.element(a,round(perf.mape1[i],4)) + a<-table.element(a,round(perf.se[i],4)) + a<-table.element(a,round(perf.mse1[i],4)) + a<-table.element(a,round(perf.rmse[i],4)) + a<-table.row.end(a) + } > a<-table.end(a) > table.save(a,file="/var/www/html/freestat/rcomp/tmp/44dr91293225031.tab") > > try(system("convert tmp/1nszf1293225031.ps tmp/1nszf1293225031.png",intern=TRUE)) character(0) > try(system("convert tmp/212w61293225031.ps tmp/212w61293225031.png",intern=TRUE)) character(0) > > > proc.time() user system elapsed 3.106 0.698 3.458