R "Error in terms.formula" 使用 GA/genalg 库
R "Error in terms.formula" using GA/genalg library
我正在尝试创建一个遗传算法(对库、ga 和 genalg 产生相同的错误不挑剔)以通过最小化 -adj 来识别用于线性回归模型的潜在列。 ^2。使用 mtcars 作为游戏集,试图在 mpg 上回归。
我有以下适应度函数:
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)
这导致:
Error in terms.formula(formula, data = data) :
'.' in formula and no 'data' argument
研究这个错误后,我决定可以这样解决它:
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)
但这会导致:
Error in terms.formula(formula, data = data) :
invalid model formula in ExtractVars
我知道它 应该 工作,因为我可以通过任何一种方式手写评估函数,而不使用 ga:
solution <- c("1","1","1","0","1","0","1","1","1","0")
evalFunc(solution)
[1] -0.8172511
我还在 "A quick tour of GA" (https://cran.r-project.org/web/packages/GA/vignettes/GA.html) 中发现使用 "string" in which(string == 1) 是 GA 应该能够处理的事情,所以我有不知道 GA 对我的函数有什么问题。
关于编写此代码以使 ga 或 genalg 接受该函数的任何想法?
事实证明,我没有考虑到解决方案字符串 0(或者实际上,一串 0 和一个 1)会导致内部粘贴读取 "mpg ~ ",这不是可能的线性回归。
我正在尝试创建一个遗传算法(对库、ga 和 genalg 产生相同的错误不挑剔)以通过最小化 -adj 来识别用于线性回归模型的潜在列。 ^2。使用 mtcars 作为游戏集,试图在 mpg 上回归。
我有以下适应度函数:
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)
这导致:
Error in terms.formula(formula, data = data) :
'.' in formula and no 'data' argument
研究这个错误后,我决定可以这样解决它:
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)
但这会导致:
Error in terms.formula(formula, data = data) :
invalid model formula in ExtractVars
我知道它 应该 工作,因为我可以通过任何一种方式手写评估函数,而不使用 ga:
solution <- c("1","1","1","0","1","0","1","1","1","0")
evalFunc(solution)
[1] -0.8172511
我还在 "A quick tour of GA" (https://cran.r-project.org/web/packages/GA/vignettes/GA.html) 中发现使用 "string" in which(string == 1) 是 GA 应该能够处理的事情,所以我有不知道 GA 对我的函数有什么问题。
关于编写此代码以使 ga 或 genalg 接受该函数的任何想法?
事实证明,我没有考虑到解决方案字符串 0(或者实际上,一串 0 和一个 1)会导致内部粘贴读取 "mpg ~ ",这不是可能的线性回归。