Dear Lukas,
allthough I'm intrigued by the purpose of what you are trying to do,
as mentioned by some of the other persons on this list, I liked the
challenge to write such a function.
I came up with the following during some train-traveling this morning:
tum <- function(x)
{
tum <- matrix(data=NA, nrow=2^x, ncol=x)
for (i in 1:x)
{
tum[,i] <- c(rep(NA,2^i/2),rep(i+1,2^i/2))
}
return(tum)
}
###
all.models <- function(model)
{
npred <- length(model$coefficients) - 1
matr.model <- tum(npred)
output <- matrix(data=NA, nrow=2^npred, ncol=1)
for (t in 2:2^npred)
{
preds <- names(model$coefficients)
interc <- names(model$coefficients)[1]
form <- as.formula(paste(". ~", paste(preds[na.omit(matr.model
[t,])],collapse="+")))
model2 <- update(model, form)
output[t,] <- mean(resid(model2)^2)
}
return(output)
}
##
As you can see, I used a helper-function (tum, "the ultimate matrix")
to the actual function. Also, I wrote it using lm instead of glm, but
I suppose that you can easily alter that. As well, the function now
returns just some regular fit-measurement. But that is not all that
essential, I think.
The main point is: it works! Using this on my G4 mac, with a lm of 10
predictors and 18 cases, it returns the output quite fast (<1 minute).
I hope you can put this to use. It needs some easy adapting to your
specific needs, but I don't expect that to be a problem. If you need
help with that, please contact me.
I'd appreciate to hear from you, if this function is helpful in any way.
sincerely,
Rense Nieuwenhuis
On Feb 27, 2007, at 8:46 , Indermaur Lukas wrote:
Hi,
Fitting all possible models (GLM) with 10 predictors will result in
loads of (2^10 - 1) models. I want to do that in order to get the
importance of variables (having an unbalanced variable design) by
summing the up the AIC-weights of models including the same
variable, for every variable separately. It's time consuming and
annoying to define all possible models by hand.
Is there a command, or easy solution to let R define the set of all
possible models itself? I defined models in the following way to
process them with a batch job:
# e.g. model 1
preference<- formula(Y~Lwd + N + Sex + YY)
# e.g. model 2
preference_heterogeneity<- formula(Y~Ri + Lwd + N + Sex + YY)
etc.
etc.
I appreciate any hint
Cheers
Lukas
???
Lukas Indermaur, PhD student
eawag / Swiss Federal Institute of Aquatic Science and Technology
ECO - Department of Aquatic Ecology
?berlandstrasse 133
CH-8600 D?bendorf
Switzerland
Phone: +41 (0) 71 220 38 25
Fax : +41 (0) 44 823 53 15
Email: lukas.indermaur at eawag.ch
www.lukasindermaur.ch