简体   繁体   中英

R “Error in terms.formula” using GA/genalg library

I'm attempting to create a genetic algorithm (not picky about library, ga and genalg produce same errors) to identify potential columns for use in a linear regression model, by minimizing -adj. r^2. Using mtcars as a play-set, trying to regress on mpg.

I have the following fitness function:

mtcarsnompg <- mtcars[,2:ncol(mtcars)]

evalFunc <- function(string) {
  costfunc <- summary(lm(mtcars$mpg ~ ., data = mtcarsnompg[, which(string == 1)]))$adj.r.squared
  return(-costfunc)
}

ga("binary",fitness = evalFunc, nBits = ncol(mtcarsnompg), popSize = 100, maxiter = 100, seed = 1, monitor = FALSE)

this causes:

 Error in terms.formula(formula, data = data) : 
  '.' in formula and no 'data' argument 

Researching this error, I decided I could work around it this way:

evalFunc = function(string) {
  child <- mtcarsnompg[, which(string == 1)]
  costfunc <- summary(lm(as.formula(paste("mtcars$mpg ~", paste(child, collapse = "+"))), data = mtcars))$adj.r.squared
  return(-costfunc)
}

ga("binary",fitness = evalFunc, nBits = ncol(mtcarsnompg), popSize = 100, maxiter = 100, seed = 1, monitor = FALSE)

but this results in:

 Error in terms.formula(formula, data = data) : 
  invalid model formula in ExtractVars 

I know it should work, because I can evaluate the function by hand written either way, while not using ga:

solution <- c("1","1","1","0","1","0","1","1","1","0")

evalFunc(solution)
[1] -0.8172511

I also found in "A quick tour of GA" ( https://cran.r-project.org/web/packages/GA/vignettes/GA.html ) that using "string" in which(string == 1) is something the GA ought to be able to handle, so I have no idea what GA's issue with my function is.

Any thoughts on a way to write this to get ga or genalg to accept the function?

事实证明,我不认为0的解决方案字符串(或者实际上是一个带1的0s字符串)会导致内部粘贴读取“ mpg〜”,这不可能进行线性回归。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM