Как обработать ошибку в lm.fit (0 не-n случаев) с помощью функции createFolds в R - PullRequest
2 голосов
/ 07 апреля 2020

Я хочу запустить регрессионную модель, используя функцию creatFolds и указав c set.seed.

Я могу запустить регрессионную модель без функции creatFolds без ошибок.

Здесь можно найти набор данных Фридмана

   wdbc <- read_csv("friedman.dat", col_names = FALSE, skip = 10) 
   wdbc[] <- lapply(wdbc, scale)

Модель регрессии без Функция createFolds

    lm(X6 ~ ., data = wdbc) 

Call:
lm(formula = X6 ~ ., data = wdbc)

Coefficients:
(Intercept)           X1           X2           X3           X4           X5  
  2.553e-16    3.892e-01    3.563e-01    2.834e-04    5.739e-01    2.767e-01  

Модель регрессии с Функция createFolds

 FX <- function(seed, data, k=30) {
      set.seed(seed)  
      folds <- createFolds(data[, "X6"], k=k, list=TRUE, returnTrain=TRUE) 
      lm1 <- lapply(folds, function(folds) lm(X6 ~ ., data=data[folds, ]))
    }
    seeds <- 1:30 
    res <- lapply(seeds, FX, data=wdbc) 

 Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  0 (non-NA) cases  

1 Ответ

1 голос
/ 07 апреля 2020

Функция createFolds является проблемной c деталью:

createFolds(wdbc[, "X6"], k=1, list=TRUE, returnTrain=TRUE)
$Fold1
integer(0)

Это дает вам пустой вектор, следовательно, вы регрессируете пустым. Таким образом, есть разница, когда вы делаете разные звонки ниже:

typeof(wdbc[["X6"]])
[1] "double"
typeof(wdbc[,"X6"])
[1] "list"
typeof(as.matrix(wdbc)[,"X6"])
[1] "double"

Может быть, кто-то еще более хорошо разбирается в Tibble et c может скинуться.

Вы можете конвертировать свои данные в data.frame или используйте data[["X6"]]:

FX <- function(seed, data, k=30) {
      set.seed(seed)  
      folds <- createFolds(data[["X6"]], k=k, list=TRUE, returnTrain=TRUE) 
      lm1 <- lapply(folds, function(folds) lm(X6 ~ ., data=data[folds, ]))
    }
    seeds <- 1:30 
res <- lapply(seeds, FX, data=wdbc)

res[[1]][[1]]

Call:
lm(formula = X6 ~ ., data = data[folds, ])

Coefficients:
(Intercept)           X1           X2           X3           X4           X5  
  0.0007255    0.3933912    0.3600078   -0.0008834    0.5733893    0.2729162  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...