[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
inputOrder=1)
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){
N=1
n=length(output)
tempMat=0
if (inputOrder==1) {
tempMat=ts(input)
}
if (inputOrder > 1) {
tempMat=input
for (i in 1:(inputOrder-1)){
tempMat=cbind(tempMat, lag(input,-i))
}
tempMat=tempMat[-c((length(input)+1):(length(input)
+inputOrder-1)),]
}
if (length(tempMat) > length(input)) {
N=length(tempMat[1,])
}
for (i in 1:N){
if (length(tempMat)==1) {
return(arima(ts(output),order=c(arOrder,0,maOrder),optim.control =
list(maxit = 1000)))
}
else {
try(return(arima(ts(output),order=c(arOrder,
0,maOrder),xreg=tempMat,optim.control = list(maxit = 1000))), TRUE)
}
if (N!=1){
tempMat=tempMat[,-(N+1)]
tempMat=tempMat[,-1]
}
else { tempMat=0 }
}
}
More information about the R-help
mailing list