R version 2.12.0 (2010-10-15) Copyright (C) 2010 The R Foundation for Statistical Computing ISBN 3-900051-07-0 Platform: i486-pc-linux-gnu (32-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(1149822 + ,1086979 + ,1276674 + ,1522522 + ,1742117 + ,1737275 + ,1979900 + ,2061036 + ,1867943 + ,1707752 + ,1298756 + ,1281814 + ,1281151 + ,1164976 + ,1454329 + ,1645288 + ,1817743 + ,1895785 + ,2236311 + ,2295951 + ,2087315 + ,1980891 + ,1465446 + ,1445026 + ,1488120 + ,1338333 + ,1715789 + ,1806090 + ,2083316 + ,2092278 + ,2430800 + ,2424894 + ,2299016 + ,2130688 + ,1652221 + ,1608162 + ,1647074 + ,1479691 + ,1884978 + ,2007898 + ,2208954 + ,2217164 + ,2534291 + ,2560312 + ,2429069 + ,2315077 + ,1799608 + ,1772590 + ,1744799 + ,1659093 + ,2099821 + ,2135736 + ,2427894 + ,2468882 + ,2703217 + ,2766841 + ,2655236 + ,2550373 + ,2052097 + ,1998055 + ,1920748 + ,1876694 + ,2380930 + ,2467402 + ,2770771 + ,2781340 + ,3143926 + ,3172235 + ,2952540 + ,2920877 + ,2384552 + ,2248987 + ,2208616 + ,2178756 + ,2632870 + ,2706905 + ,3029745 + ,3015402 + ,3391414 + ,3507805 + ,3177852 + ,3142961 + ,2545815 + ,2414007 + ,2372578 + ,2332664 + ,2825328 + ,2901478 + ,3263955 + ,3226738 + ,3610786 + ,3709274 + ,3467185 + ,3449646 + ,2802951 + ,2462530 + ,2490645 + ,2561520 + ,3067554 + ,3226951 + ,3546493 + ,3492787 + ,3952263 + ,3932072 + ,3720284 + ,3651555 + ,2914972 + ,2713514 + ,2703997 + ,2591373 + ,3163748 + ,3355137 + ,3613702 + ,3686773 + ,4098716 + ,4063517 + ,3551489 + ,3226663 + ,2656842 + ,2597484 + ,2572399 + ,2596631 + ,3165225 + ,3303145 + ,3698247 + ,3668631 + ,4130433 + ,4131400 + ,3864358 + ,3721110 + ,2892532 + ,2843451 + ,2747502 + ,2668775 + ,3018602 + ,3013392 + ,3393657 + ,3544233 + ,4075832 + ,4032923 + ,3734509 + ,3761285 + ,2970090 + ,2847849 + ,2741680 + ,2830639 + ,3257673 + ,3480085 + ,3843271 + ,3796961 + ,4337767 + ,4243630 + ,3927202 + ,3915296 + ,3087396 + ,2963792 + ,2955792 + ,2829925 + ,3281195 + ,3548011 + ,4059648 + ,3941175 + ,4528594 + ,4433151 + ,4145737 + ,4077132 + ,3198519 + ,3078660 + ,3028202 + ,2858642 + ,3398954 + ,3808883 + ,4175961 + ,4227542 + ,4744616 + ,4608012 + ,4295049 + ,4201144 + ,3353276 + ,3286851 + ,3169889 + ,3051720 + ,3695426 + ,3905501 + ,4296458 + ,4246247 + ,4921849 + ,4821446 + ,4425064 + ,4379099 + ,3472889 + ,3359160 + ,3200944 + ,3153170 + ,3741498 + ,3918719 + ,4403449 + ,4400407 + ,4847473 + ,4716136 + ,4297440 + ,4272253 + ,3271834 + ,3168388 + ,2911748 + ,2720999 + ,3199918 + ,3672623 + ,3892013 + ,3850845 + ,4532467 + ,4484739 + ,4014972 + ,3983758 + ,3158459 + ,3100569 + ,2935404 + ,2855719 + ,3465611 + ,3006985 + ,4095110 + ,4104793 + ,4730788 + ,4642726 + ,4246919 + ,4308117) > par10 = 'FALSE' > par9 = '1' > par8 = '0' > par7 = '1' > par6 = '0' > par5 = '12' > par4 = '1' > par3 = '1' > par2 = '0.3' > 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: ma1 sma1 -0.2639 -0.5706 s.e. 0.0795 0.0778 sigma^2 estimated as 0.4956: log likelihood = -217.05, aic = 440.1 > (forecast <- predict(arima.out,par1)) $pred Time Series: Start = 215 End = 226 Frequency = 1 [1] 88.59279 87.73071 86.23689 85.08061 89.57032 92.15053 94.62506 94.44014 [9] 98.48098 97.93521 95.11893 94.84017 $se Time Series: Start = 215 End = 226 Frequency = 1 [1] 0.7039733 0.8741455 1.0162098 1.1407166 1.2529111 1.3558533 1.4515130 [8] 1.5412469 1.6260363 1.7066183 1.7835632 1.8573233 > (lb <- forecast$pred - 1.96 * forecast$se) Time Series: Start = 215 End = 226 Frequency = 1 [1] 87.21300 86.01738 84.24512 82.84481 87.11462 89.49306 91.78009 91.41930 [9] 95.29395 94.59024 91.62315 91.19981 > (ub <- forecast$pred + 1.96 * forecast$se) Time Series: Start = 215 End = 226 Frequency = 1 [1] 89.97258 89.44403 88.22866 87.31642 92.02603 94.80800 97.47002 [8] 97.46099 101.66801 101.28018 98.61472 98.48052 > 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] 1149822 1086979 1276674 1522522 1742117 1737275 1979900 2061036 1867943 [10] 1707752 1298756 1281814 1281151 1164976 1454329 1645288 1817743 1895785 [19] 2236311 2295951 2087315 1980891 1465446 1445026 1488120 1338333 1715789 [28] 1806090 2083316 2092278 2430800 2424894 2299016 2130688 1652221 1608162 [37] 1647074 1479691 1884978 2007898 2208954 2217164 2534291 2560312 2429069 [46] 2315077 1799608 1772590 1744799 1659093 2099821 2135736 2427894 2468882 [55] 2703217 2766841 2655236 2550373 2052097 1998055 1920748 1876694 2380930 [64] 2467402 2770771 2781340 3143926 3172235 2952540 2920877 2384552 2248987 [73] 2208616 2178756 2632870 2706905 3029745 3015402 3391414 3507805 3177852 [82] 3142961 2545815 2414007 2372578 2332664 2825328 2901478 3263955 3226738 [91] 3610786 3709274 3467185 3449646 2802951 2462530 2490645 2561520 3067554 [100] 3226951 3546493 3492787 3952263 3932072 3720284 3651555 2914972 2713514 [109] 2703997 2591373 3163748 3355137 3613702 3686773 4098716 4063517 3551489 [118] 3226663 2656842 2597484 2572399 2596631 3165225 3303145 3698247 3668631 [127] 4130433 4131400 3864358 3721110 2892532 2843451 2747502 2668775 3018602 [136] 3013392 3393657 3544233 4075832 4032923 3734509 3761285 2970090 2847849 [145] 2741680 2830639 3257673 3480085 3843271 3796961 4337767 4243630 3927202 [154] 3915296 3087396 2963792 2955792 2829925 3281195 3548011 4059648 3941175 [163] 4528594 4433151 4145737 4077132 3198519 3078660 3028202 2858642 3398954 [172] 3808883 4175961 4227542 4744616 4608012 4295049 4201144 3353276 3286851 [181] 3169889 3051720 3695426 3905501 4296458 4246247 4921849 4821446 4425064 [190] 4379099 3472889 3359160 3200944 3153170 3741498 3918719 4403449 4400407 [199] 4847473 4716136 4297440 4272253 3271834 3168388 2911748 2720999 3199918 [208] 3672623 3892013 3850845 4532467 4484739 4014972 3983758 3099759 3000351 [217] 2833416 2708749 3215243 3534485 3860888 3835796 4410704 4329750 3928468 [226] 3890222 > (perc.se <- (ub-forecast$pred)/1.96/forecast$pred) Time Series: Start = 215 End = 226 Frequency = 1 [1] 0.02697185 0.03397653 0.04034909 0.04607781 0.04813633 0.05071618 [7] 0.05294965 0.05645844 0.05714516 0.06043648 0.06522676 0.06825239 > postscript(file="/var/www/rcomp/tmp/1k24r1292185916.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/rcomp/tmp/29ljk1292185916.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/rcomp/createtable file can be downloaded at http://www.wessa.net/cretab > load(file="/var/www/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/rcomp/tmp/3ymgw1292185916.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/rcomp/tmp/4cvvn1292185916.tab") > > try(system("convert tmp/1k24r1292185916.ps tmp/1k24r1292185916.png",intern=TRUE)) character(0) > try(system("convert tmp/29ljk1292185916.ps tmp/29ljk1292185916.png",intern=TRUE)) character(0) > > > proc.time() user system elapsed 0.810 0.440 1.223