Я пытаюсь выяснить минимальную MSE в выборе лучшего подмножества.Однако which.min после цикла не сообщает уникальные индексы, возможно, из-за некоторого внутреннего допуска.Как я могу получить только нужный индекс?
pacman::p_load(lmSubsets, MASS)
attach(Boston)
Boston <- na.omit(Boston)
# Data preparation --------------------------------------------------------
set.seed(1)
train <- sample(nrow(Boston), 400, replace = F)
Boston.train <- Boston[train, ]
Boston.test <- Boston[-train, ]
grid = 10 ^ seq(10,-2, length = 100)
ers = c()
f <- reformulate(setdiff(colnames(Boston), "crim"), response = "crim")
# predict.lmSubsets -----------------------------------------------------
predict.lmSubsets <- function(object, newdata, id, ...) {
form = as.formula(object$call[[2]])
mat = model.matrix(form, newdata)
coefi = coef(object)[id,]
xvars = names(coefi)
mat[, xvars] %*% coefi
}
# Best subset ------------------------------------------------------------
lmsub.fit <- lmSubsets(as.formula(f), data = Boston.train)
errors = c()
# calculate MSE for each subset on the test data
for (i in 1:ncol(Boston) - 1) {
err <- mean((Boston.test[, "crim"] - predict(lmsub.fit,
newdata = Boston.test, i)) ^ 2)
names(err) <- paste(i)
errors = c(errors, err)
}
min(errors)
which(errors == min(errors))
Хотя приведенный ниже код работает, но у нас есть что-то менее подробное или глобальная настройка R для установки допуска?
which(match(errors,min(errors)) == 1)
Это поднимает, по крайней мере, еще один вопрос: если which.min / max разрешено возвращать более одного индекса, то почему бы не сделать условие для определения допуска?