[R] arima and xreg

Jose Capco cliomseerg at kriocoucke.mailexpire.com
Fri Sep 12 16:01:55 CEST 2008

Thats nice thanks =) .. I can trick R to do multivariate armax with
lagged inputs as well and I bet R people didnt designed it that way
(but the idea is the same when doing MLE, it must work)..

anyway.. I wrote a small code (you can change it if you want) that
does armax with multiple inputs in matrix form and wherein you can
give lag for the inputs (a true-blooded ARMAX model
estimation). The function basically does an armax on the given
model .. but if it sees that the inputs are correlated, it deletes the
input columns (theres a bug there in my code.. I didnt have
time to improve it .. but I'll do it soon.. it works though if

Code looks fine and works for me (I tried with your part and mort
data.. I did armax until inputOrder=4)
One thing that annoys me is that the matrix column get named as "blah
+i" instead of "blah+1" .. etc. -_-;

I'll write an improvement to the code soon.. Im having time management
difficulty yet, and I just finished reading 1/3 of your book in 1
week. So this is just as much as I could do for one week starting with
0 knowledge in the theory of time-series =)

#input is a matrix of doubles (for multivariate input)
#output is a vector of doubles having same length as input
#this function returns the one step ahead prediction (can be modified
for more steps
#inputOrder is the order of input in ARMAX in integer
armax = function(input,output, arOrder, maOrder,inputOrder){
	if (inputOrder==1) {
	if (inputOrder > 1) {
		for (i in 1:(inputOrder-1)){
			tempMat=cbind(tempMat, lag(input,-i))
	if (length(tempMat) > length(input)) {
	for (i in 1:N){
		if (length(tempMat)==1) {
			return(arima(ts(output),order=c(arOrder,0,maOrder),optim.control =
list(maxit = 1000)))
		else {
0,maOrder),xreg=tempMat,optim.control = list(maxit = 1000))), TRUE)
		if (N!=1){
		else { tempMat=0 }

More information about the R-help mailing list