cvfit error {not-yet-implemented method for <data.frame> }

Viewed 125

I am fitting a multinomial model using both glmnet and cv.glmnet :

fit <- glmnet(x, y, family = "multinomial")
cvfit <- cv.glmnet(x, y, family = "multinomial")

My variables are

x:
 $ Q1: int [1:1000] 3 3 5 3 3 4 3 3 4 4 ...
 $ Q2: int [1:1000] 4 3 5 5 5 5 5 5 4 4 ...
 $ Q3: int [1:1000] 3 3 4 3 5 5 4 5 5 5 ...
 $ Q4: int [1:1000] 3 5 5 4 5 4 4 4 1 4 ...
 $ Q5: int [1:1000] 2 4 5 3 5 3 4 4 3 5 ...
 $ Q6: int [1:1000] 2 1 4 3 4 3 3 4 3 3 ...
 $ Gender : Factor w/ 2 levels "Female","Male": 1 1 1 1 2  

  

y: Factor w/ 7 levels "A", "B", "C", "D", "E"

However, I am getting this error ONLY when using cv.glmnet, but not when using glmnet:

Error in cbind2(1, newx) %*% (nbeta[[i]]) : 
  not-yet-implemented method for <data.frame> %*% <dgCMatrix>

I wish someone could explain me why, thanks!

1 Answers

You need to make sure your independent or exogenous x is a matrix and not dataframe, using an example below:

library(glmnet)

x = data.frame(matrix(sample(1:5,5000,replace=TRUE),ncol=5))
x$Gender = factor(sample(c("Female","Male"),1000,replace=TRUE))
y = factor(sample(LETTERS[1:7],1000,replace=TRUE))

We use model.matrix(), ~. as formula means all the variables in the data frames are independent variables, and I remove the intercept column because it will be included in cv.glmnet, and you can see your factor Gender is encoded binary:

xmat = model.matrix(~ .,data=x)[,-1]
head(xmat)
      X1 X2 X3 X4 X5 GenderMale
1  3  1  1  1  1          0
2  5  2  4  3  2          1
3  1  3  2  5  4          1
4  5  5  1  4  2          0
5  3  3  3  1  2          0
6  1  1  3  1  4          1

Run this:

cv.glmnet(xmat,y,family="multinomial")

Call:  cv.glmnet(x = xmat, y = y, family = "multinomial") 

Measure: Multinomial Deviance 

     Lambda Index Measure       SE Nonzero
min 0.02215     1     3.9 0.004419       0
1se 0.02215     1     3.9 0.004419       0
Related