[R] predict and arima

bdp palmer.bryan at gmail.com
Sun Jan 30 04:15:35 CET 2011


Some code I have been playing with to do this follows ...

get.best.arima <- function(x.ts, minord=c(0,0,0,0,0,0),
maxord=c(2,1,1,2,1,1))
{
	# function based on 'Introductory Time Series with R'
	best.aic <- 1e8 # a big number
	n <- length(x.ts)
	for(p in minord[1]:maxord[1]) for(d in minord[2]:maxord[2]) for(q in
minord[3]:maxord[3])
	{
		for(P in minord[4]:maxord[4]) for(D in minord[5]:maxord[5]) for(Q in
minord[6]:maxord[6])
		{
			fit <- arima(x.ts, order=c(p,q,d), seas=list(order=c(P,D,Q), 
				frequency(x.ts)), method='CSS')
			fit.aic <- -2 * fit$loglik + (log(n) + 1) * length(fit$coef)
			if(fit.aic < best.aic) # probably should  do other tests here before
accepting
			{
				best.aic <- fit.aic
				best.fit <- fit
				best.model <- c(p,d,q,P,D,Q)
			}
		}
	}
	#print(best.aic)
	#print(best.model)
	return(best.fit)
}

extend.series <- function(series.ts, extend.by=1)
{
	log.series.ts <- log(series.ts)

	best.log <- get.best.arima(log.series.ts)

	prediction.log <- predict( best.log,
n.ahead=(frequency(series.ts)*extend.by) )

	reverse.log.series.ts <- ts( data=rev(as.vector(log.series.ts)), 
		frequency=frequency(series.ts) )

	best.log.reverse <- get.best.arima(reverse.log.series.ts)

	prediction.log.reverse <- predict( best.log.reverse,
n.ahead=(frequency(series.ts)*extend.by) )

	start.series.ts <- start(series.ts)
	end.series.ts <- end(series.ts)

	extended.vector <- append(rev(exp(as.vector(prediction.log.reverse$pred))), 
		as.vector(series.ts) )
	extended.vector <- append( extended.vector,
exp(as.vector(prediction.log$pred)) )

	extended.ts <- ts(data=extended.vector, frequency=frequency(series.ts), 
		start=c(start.series.ts[1]-extend.by, 1))
}

-- 
View this message in context: http://r.789695.n4.nabble.com/R-predict-and-arima-tp813419p3246820.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list