[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