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(31.58,27.88,27.32,28.89,28.05,28.73,32.00,34.53,33.47,34.09,35.47,34.59,34.32,32.78,28.38,29.18,28.62,28.20,29.33,29.72,26.29,26.82,27.64,27.10,27.05,26.02,25.76,25.94,24.97,21.74,18.16,16.95,16.46,16.44,18.20,16.44,15.70,13.94,12.23,14.75,14.62,15.04,15.50,16.10,15.44,15.14,15.42,15.69,17.57,18.42,17.96,18.39,17.63,17.95,17.79,17.73,18.99,19.83,20.23,20.24,21.12,21.25,21.80,21.84,22.21,22.64,23.54,23.78,23.65,23.93,24.77,26.26,27.69,29.54,29.31,29.26,28.69,26.16,27.12,29.40,30.99,32.96,32.20,31.67,32.49,33.66,32.44,34.38,32.36,30.73,30.31,27.26,25.05,22.33,18.26,18.30,16.00,14.36,14.98,16.88,16.56,13.31,9.61,9.34,7.89,1.71,0.81,0.71) > par10 = 'FALSE' > par9 = '0' > par8 = '0' > par7 = '0' > par6 = '3' > par5 = '12' > par4 = '0' > par3 = '1' > par2 = '0.0' > par1 = '12' > #'GNU S' R Code compiled by R2WASP v. 1.0.44 () > #Author: Prof. Dr. P. Wessa > #To cite this work: AUTHOR(S), (YEAR), YOUR SOFTWARE TITLE (vNUMBER) in Free Statistics Software (v$_version), Office for Research Development and Education, URL http://www.wessa.net/rwasp_YOURPAGE.wasp/ > #Source of accompanying publication: Office for Research, Development, and Education > #Technical description: Write here your technical program description (don't use hard returns!) > 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 0.2592 0.0154 0.1148 s.e. 0.1042 0.1122 0.1103 sigma^2 estimated as 0.003752: log likelihood = 130.44, aic = -252.89 > (forecast <- predict(arima.out,fx)) $pred Time Series: Start = 97 End = 108 Frequency = 1 [1] 2.891183 2.864052 2.857030 2.852989 2.848721 2.846746 2.845705 2.844915 [9] 2.844468 2.844220 2.844059 2.843962 $se Time Series: Start = 97 End = 108 Frequency = 1 [1] 0.06125686 0.09849763 0.12828397 0.15715122 0.18358101 0.20748178 [7] 0.22954230 0.25001323 0.26909978 0.28702572 0.30395815 0.32002909 > (lb <- forecast$pred - 1.96 * forecast$se) Time Series: Start = 97 End = 108 Frequency = 1 [1] 2.771119 2.670997 2.605593 2.544973 2.488902 2.440082 2.395802 2.354889 [9] 2.317032 2.281650 2.248301 2.216705 > (ub <- forecast$pred + 1.96 * forecast$se) Time Series: Start = 97 End = 108 Frequency = 1 [1] 3.011246 3.057107 3.108467 3.161006 3.208539 3.253411 3.295608 3.334941 [9] 3.371904 3.406791 3.439817 3.471219 > 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] 31.58000 27.88000 27.32000 28.89000 28.05000 28.73000 32.00000 34.53000 [9] 33.47000 34.09000 35.47000 34.59000 34.32000 32.78000 28.38000 29.18000 [17] 28.62000 28.20000 29.33000 29.72000 26.29000 26.82000 27.64000 27.10000 [25] 27.05000 26.02000 25.76000 25.94000 24.97000 21.74000 18.16000 16.95000 [33] 16.46000 16.44000 18.20000 16.44000 15.70000 13.94000 12.23000 14.75000 [41] 14.62000 15.04000 15.50000 16.10000 15.44000 15.14000 15.42000 15.69000 [49] 17.57000 18.42000 17.96000 18.39000 17.63000 17.95000 17.79000 17.73000 [57] 18.99000 19.83000 20.23000 20.24000 21.12000 21.25000 21.80000 21.84000 [65] 22.21000 22.64000 23.54000 23.78000 23.65000 23.93000 24.77000 26.26000 [73] 27.69000 29.54000 29.31000 29.26000 28.69000 26.16000 27.12000 29.40000 [81] 30.99000 32.96000 32.20000 31.67000 32.49000 33.66000 32.44000 34.38000 [89] 32.36000 30.73000 30.31000 27.26000 25.05000 22.33000 18.26000 18.30000 [97] 18.01460 17.53242 17.40974 17.33954 17.26568 17.23162 17.21370 17.20010 [105] 17.19241 17.18815 17.18538 17.18371 > (perc.se <- (ub-forecast$pred)/1.96/forecast$pred) Time Series: Start = 97 End = 108 Frequency = 1 [1] 0.06508591 0.10864793 0.14585273 0.18404250 0.22095392 0.25602033 [7] 0.28987751 0.32263191 0.35437811 0.38529502 0.41551310 0.44513641 > postscript(file="/var/www/html/rcomp/tmp/1izzs1229514762.ps",horizontal=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.se <- array(0, dim=fx) > perf.mse <- 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.mape[i] = perf.mape[i] + abs(perf.pe[i]) + perf.se[i] = (x[nx+i] - forecast$pred[i])^2 + perf.mse[i] = perf.mse[i] + perf.se[i] + 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 = perf.mape / fx > perf.mse = perf.mse / fx > perf.rmse = sqrt(perf.mse) > postscript(file="/var/www/html/rcomp/tmp/2cfsb1229514762.ps",horizontal=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:12] <- 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/rcomp/createtable file can be downloaded at http://www.wessa.net/cretab > load(file="/var/www/html/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/rcomp/tmp/3xts11229514762.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.mape[i],4)) + a<-table.element(a,round(perf.se[i],4)) + a<-table.element(a,round(perf.mse[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/rcomp/tmp/45s3v1229514762.tab") > > system("convert tmp/1izzs1229514762.ps tmp/1izzs1229514762.png") > system("convert tmp/2cfsb1229514762.ps tmp/2cfsb1229514762.png") > > > proc.time() user system elapsed 0.585 0.300 0.859