rucker
rucker

Reputation: 403

Difficulty getting Caret GLM with Repeated CV to execute

I have been doing 10X10-fold cv logistic models for a long time using homebrew code, but recently have figured that it might be nice to let caret handle the messy stuff for me.

Unfortunately, I seem to be missing some of the nuances that caret needs to be able to function.

Specifically, I keep getting this error:

>Error in { : task 1 failed - "argument is not interpretable as logical"

Please see if you can pick up what I am doing wrong...

Thanks in advance!

Data set is located here.

dataset <- read.csv("Sample Data.csv")

library(caret)

my_control <- trainControl(
  method="repeatedcv",
  number=10,
  repeats = 10,
  savePredictions="final",
  classProbs=TRUE
)

This next block of code was put in there to make caret happy. My original dependent variable was a binary that I had turned into a factor, but caret had issues with the factor levels being "0" and "1". Not sure why.

dataset$Temp <- "Yes"
dataset$Temp[which(dataset$Dep.Var=="0")] <- "No"
dataset$Temp <- as.factor(dataset$Temp)

Now I (try) to get caret to run the 10X10-fold glm model for me...

testmodel <- train(Temp ~ Param.A + Param.G + Param.J + Param.O, data = dataset,
             method = "glm",
             trControl = my_control,
             metric = "Kappa")

testmodel


> Error in { : task 1 failed - "argument is not interpretable as logical"

Upvotes: 0

Views: 476

Answers (3)

geekoverdose
geekoverdose

Reputation: 1007

Though you already found a fix by updating R and caret, I'd like to point out there is (was) a bug in your code which caused the error, and which I can reproduce here with an older version of R and caret:

The savePredictions of trainControl is meant to be set to either TRUE or FALSE instead of 'final'. Seems you simply mixed it with the returnResamp parameter, which would take exactly this parameter.

BTW: R and caret have restrictions on level names of factors, which is why caret complained when you handed 0 and 1 level names for the dependent variable to it. Using a simple dataset$Dep.Var <- factor(paste0('class', dataset$Dep.Var)) should do the trick in such cases.

Upvotes: 1

rucker
rucker

Reputation: 403

Thanks to @Sumedh, I figured that the problem might not be with my code, and I updated all my packages.

Surprise! Now it works. So I wasn't crazy after all.

Sorry all for the fire drill.

Upvotes: 0

Sumedh
Sumedh

Reputation: 4965

I don't have enough reputation to comment, so I am posting this as an answer. I ran your exact code, and it worked fine for me, twice. I did get this warning:

glm.fit: fitted probabilities numerically 0 or 1 occurred

As per the author, this error had something to do with the savePredictions parameter. Have a look at this issue: https://github.com/topepo/caret/issues/304

Upvotes: 1

Related Questions