Hi, I have a dataset where the results are coded ("yes", "no") We want to do some machine learning with SVM to predict the "yes" outcome My problem is that if I just use the as.factor function to convert, then it reverses the levels. ---------------------- x <- c("no", "no", "no", "yes", "yes", "no", "no") as.factor(x) [1] no no no yes yes no no Levels: no yes ---------------------- The SVM function (in the e1071 package) sees "no" as the first label and treats that as the positive outcome. The problem arises when we look at the decision values of the predictions. Everything is gauged as values for "no". So, is there a way to force R to use my specified order when converting to factors? I've tried as.factor(x, levels=c("yes", "no")) but that throws errors about unused arguments. Any help? Thanks
Hi, I have a dataset where the results are coded ("yes", "no") We want to do some machine learning with SVM to predict the "yes" outcome My problem is that if I just use the as.factor function to convert, then it reverses the levels. ---------------------- x <- c("no", "no", "no", "yes", "yes", "no", "no") as.factor(x) [1] no no no yes yes no no Levels: no yes ---------------------- The SVM function (in the e1071 package) sees "no" as the first label and treats that as the positive outcome. The problem arises when we look at the decision values of the predictions. Everything is gauged as values for "no". So, is there a way to force R to use my specified order when converting to factors? I've tried as.factor(x, levels=c("yes", "no")) but that throws errors about unused arguments. Any help? Thanks
Noah Silverman wrote:> Hi, > > I have a dataset where the results are coded ("yes", "no") We want to > do some machine learning with SVM to predict the "yes" outcome > > My problem is that if I just use the as.factor function to convert, then > it reverses the levels. > > ---------------------- > x <- c("no", "no", "no", "yes", "yes", "no", "no") > as.factor(x) > [1] no no no yes yes no no > Levels: no yesYou want to use ?factor, not ?as.factor. Then you can use the "levels" argument. factor(x, levels = c("yes", "no")) Also see ?relevel.
Hi, On Thu, Jun 17, 2010 at 3:45 PM, Noah Silverman <noahsilverman at ucla.edu> wrote:> Hi, > > I have a dataset where the results are coded ("yes", "no") ?We want to > do some machine learning with SVM to predict the "yes" outcome > > My problem is that if I just use the as.factor function to convert, then > it reverses the levels. > > ---------------------- > x <- c("no", "no", "no", "yes", "yes", "no", "no") > ?as.factor(x) > [1] no ?no ?no ?yes yes no ?no > Levels: no yes > ---------------------- > The SVM function (in the e1071 package) sees "no" as the first label and > treats that as the positive outcome. > The problem arises when we look at the decision values of the > predictions. ?Everything is gauged as values for "no". > > So, is there a way to force R to use my specified order when converting > to factors? > > I've tried as.factor(x, levels=c("yes", "no")) but that throws errors > about unused arguments. > > Any help?Yes, look at the error message you're getting in your call to `as.factor` more closely -- also look at the help for as.factor and note there is no "levels" argument: R> x <- c("no", "no", "no", "yes", "yes", "no", "no") R> factor(x, levels=c('yes', 'no')) [1] no no no yes yes no no Levels: yes no -steve -- Steve Lianoglou Graduate Student: Computational Systems Biology | Memorial Sloan-Kettering Cancer Center | Weill Medical College of Cornell University Contact Info: http://cbio.mskcc.org/~lianos/contact