Логистическая регрессия с каретой и glmnet в R

Я пытаюсь приспособить модель логистической регрессии к моим данным, используя glmnet (для лассо) и каретку (для перекрестной проверки в k-кратном размере). Я пробовал два разных синтаксиса, но они оба выдают ошибку:

fitControl <- trainControl(method = "repeatedcv",
                       number = 10,
                       repeats = 3,
                       verboseIter = TRUE)

# with response as a integer (0/1)
fit_logistic <- train(response ~.,
                   data = df_without,
                   method = "glmnet",
                   trControl = fitControl,
                   family = "binomial")

Error in cut.default(y, breaks, include.lowest = TRUE) : 
 invalid number of intervals

df_without$response <- as.factor(df_without$response)
# with response as a factor
fit_logistic <- train(as.matrix(df_without[1:47]), df_without$response,
              method = "glmnet",
              trControl = fitControl,
              family = "binomial")

Error in lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs,  : 
  NA/NaN/Inf in foreign function call (arg 5)
In addition: Warning message:
In lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs,  :
  NAs introduced by coercion

Нужно ли преобразовывать мой массив данных в матрицу или нет?

Должна ли моя переменная ответа быть фактором или просто 0/1 целым числом?

Файл.Rdata с фреймом данных df_without находится здесь.

sessionInfo ()

R version 3.2.0 (2015-04-16)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.10.1 (Yosemite)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] parallel  splines   stats     graphics  grDevices utils         datasets  methods   base     

other attached packages:
 [1] e1071_1.6-4     plyr_1.8.2      gbm_2.1.1       survival_2.38-1     glmnet_2.0-2    foreach_1.4.2  
 [7] Matrix_1.2-0    caret_6.0-47    ggplot2_1.0.1   lattice_0.20-31     lubridate_1.3.3 RJDBC_0.2-5    
[13] rJava_0.9-6     DBI_0.3.1      

loaded via a namespace (and not attached):
 [1] Rcpp_0.11.6         compiler_3.2.0      nloptr_1.0.4            class_7.3-12        iterators_1.0.7    
 [6] tools_3.2.0         digest_0.6.8        lme4_1.1-7              memoise_0.2.1       nlme_3.1-120       
[11] gtable_0.1.2        mgcv_1.8-6          brglm_0.5-9             SparseM_1.6         proto_0.3-10       
[16] BradleyTerry2_1.0-6 stringr_1.0.0       gtools_3.5.0            grid_3.2.0          nnet_7.3-9         
[21] minqa_1.2.4         reshape2_1.4.1      car_2.0-25              magrittr_1.5        scales_0.2.4       
[26] codetools_0.2-11    MASS_7.3-40         pbkrtest_0.4-2          colorspace_1.2-6    quantreg_5.11      
[31] stringi_0.4-1       munsell_0.4.2  

2 ответа

У меня была та же проблема, я исправил свою, используя функцию model.matrix для работы с кодированием категориальных переменных.

Попробуйте это для аргумента x в glmnet:

as.matrix(model.matrix(response ~ .)[, -1])

Я удалил столбец перехвата, потому что по умолчанию в glmnet включается перехват.

Проблема в том, что в вашем наборе данных есть непрерывные переменные. GLMNET должен иметь фактор двоичных переменных.

Если вы запустите свои первые строки кода и выберете несколько непостоянных переменных, вы увидите, что он работает так, как ожидалось.

Другие вопросы по тегам