[R] contrasts can be applied only to factors with 2 or more levels

William Dunlap wdun|@p @end|ng |rom t|bco@com
Fri Dec 20 22:56:28 CET 2019


You can also get this error from caret::grid_search() if you have 2-valued
string variables with one value pretty rare, so that a sample may include
just one of the values.  You can get this if you've set
options(stringsAsFactors=FALSE) or call read.table() with
stringsAsFactors=FALSE.  E.g., in R-3.6.2:

> set.seed(1)
> d <- data.frame(Results=1:1000, x1=ifelse((1:1000)==1, "one", "not one"),
x2=ifelse((1:1000)==2,"two", "not two"), stringsAsFactors=FALSE)
> index <- createDataPartition(log10(d$Results), p = 0.25, list = FALSE)
> tr <- d[index, ]
> ts <- d[-index, ]
> index_2 <- createFolds(log10(tr$Results), returnTrain = TRUE, list = TRUE)
> ctrl <- trainControl(method = "cv", index = index_2)
> grid_search <- train(log10(Results) ~ ., data = tr, method="lm",
trControl=ctrl)
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
  contrasts can be applied only to factors with 2 or more levels

Converting all character columns to factor columns can help.

Bill Dunlap
TIBCO Software
wdunlap tibco.com


On Fri, Dec 20, 2019 at 1:21 PM Patrick (Malone Quantitative) <
malone using malonequantitative.com> wrote:

> As the Posting Guide directs, please make all replies to the list.
>
> Basically, you need to inspect your data. Using "~ ." adds everything
> in the dataframe that's not elsewhere in the function as predictors.
> Check the descriptive statistics on every one (variance/standard
> deviation for numeric data, table for string/factor).
>
> On Fri, Dec 20, 2019 at 3:32 PM javed khan <javedbtk111 using gmail.com> wrote:
> >
> > Hi Patrick
> >
> > I have no idea about this type of error. Is it a categorical predictor?
> How to find variability?
> >
> > Thanks
> >
> > On Fri, Dec 20, 2019 at 9:08 PM Patrick (Malone Quantitative) <
> malone using malonequantitative.com> wrote:
> >>
> >> Seems self-explanatory. It sounds like one of your predictors has no
> >> variability.
> >>
> >> On Fri, Dec 20, 2019 at 3:01 PM javed khan <javedbtk111 using gmail.com>
> wrote:
> >> >
> >> > I am using the folowing code and it give me the error message like
> >> >
> >> > " contrasts can be applied only to factors with 2 or more levels".
> >> >
> >> > What could be the problem
> >> >
> >> > d=read.csv("Result.csv")
> >> > index <- createDataPartition(log10(d$Results), p = .70,list = FALSE)
> >> > tr <- d[index, ]
> >> > ts <- d[-index, ]
> >> > index_2 <- createFolds(log10(tr$Results), returnTrain = TRUE, list =
> TRUE)
> >> > ctrl <- trainControl(method = "cv", index = index_2)
> >> >
> >> > set.seed(30218)
> >> >
> >> > grid_search <- train(log10(Results) ~ ., data = tr,
> >> >                      method = "svmRadial",
> >> >
> >> >                      tuneLength = 8,
> >> >                      metric = "MAE",
> >> >                      preProc = c("center", "scale", "zv"),
> >> >                      trControl = ctrl)
> >> >
> >> >         [[alternative HTML version deleted]]
> >> >
> >> > ______________________________________________
> >> > R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> >> > https://stat.ethz.ch/mailman/listinfo/r-help
> >> > PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> >> > and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list