[R] Grid search: avoid "for" loops thanks to apply&co?

Matthieu Stigler stigler3 at etu.unige.ch
Mon Jan 28 16:29:31 CET 2008


Hello

I'm trying to implement a grid search for a threshold autoregressive 
model, it is a model in which the regression coefficients are different 
according to the regimes (under the lower threshold, between lower and 
upper, over the upper threshold).

Estimation of the threshold is made with Conditional least squares: once 
the threshold is given, the usual parameters are computed with usual 
OLS, the thresholds values are those which  minimise the Sum of 
squares.  In order to find the threshold values one has to compute the 
sum of squares of all models, which takes n x n/2 operations for a model 
with two regimes (for my case: 300x150=45'000).

Transcription of the Matlab code into R is inefficient because of the 
loops (very slow), a schema of the actual code gives:

for(in in 1:length(thres1))
    firstThresh<-tresh1[i]
        for(j in 1:length(thres1))
                if(j>i)
              secondThresh<-tresh1[j]
                   regime1<-ifelse(x<thresh1)*x
                   regime2<-ifelse(x>thresh2)*x               
...(some matrix algebra in order to obtain the Sum of Squares of 
cbind(x, regime1, regime2)

I'm trying to implement it into R with apply&co instead, but don't 
succeed. Many packages use grid search but all with "for" loops and 
small number of values. To use apply&co, I saw these solutions:

-write the "matrix building and estimation" function estim(X,thresh1, 
thresh2) and then with mapply
mapply(estim, tresh1, thresh2)

The problem is that I have to compute all combinations of thresh 1 and 
thresh 2 (with the condition thresh 2>thresh1) and not only the 
combinations arg1[i] with arg2[i]

-create a big array with all possible matrices cbind(y, regime1, 
regime2) and then use apply with only an estimation function. But I 
would need to create an array of 300 x 300 matrices...

What do you think? Do you see other solutions? Is is possible to 
evaluate other combinations within the mapply function?

Thanks for your help!



More information about the R-help mailing list