fitness <- function(curr, y, X, m) { # fitness function for SGA and PGA # this one uses GCV # by Mu Zhu # Feb 2005 n <- nrow(X); p <- ncol(X) gcvrss <- numeric(m) for (i in 1:m) { q <- sum(curr[i,]) if (q > 0) { ls.out <- lsfit(X[,curr[i,]==1], y, intercept=T) gcvrss[i]<- sum((ls.out$resid/(1-(q+1)/n))^2) } else { ybar <- mean(y) gcvrss[i]<- sum(((y-ybar)/(1-(q+1)/n))^2) } } return(gcvrss) }