which.min возвращает множественные индексы для вектора двойников - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь выяснить минимальную 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 разрешено возвращать более одного индекса, то почему бы не сделать условие для определения допуска?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...