R glmnet as.matrix () сообщение об ошибке - PullRequest
18 голосов
/ 10 декабря 2011

Я пытаюсь использовать пакет glmnet в наборе данных.Я использую cv.glmnet(), чтобы получить значение лямбды для glmnet().Я исключаю столбцы 1,2,7,12 как они есть: столбец идентификатора, столбец ответа, содержат NA и содержат NA.

Вот набор данных и сообщение об ошибке:

> head(t2)
  X1 X2        X3 X4 X5         X6    X7 X8 X9 X10 X11 X12
1  1  1 0.7661266 45  2 0.80298213  9120 13  0   6   0   2
2  2  0 0.9571510 40  0 0.12187620  2600  4  0   0   0   1
3  3  0 0.6581801 38  1 0.08511338  3042  2  1   0   0   0
4  4  0 0.2338098 30  0 0.03604968  3300  5  0   0   0   0
5  5  0 0.9072394 49  1 0.02492570 63588  7  0   1   0   0
6  6  0 0.2131787 74  0 0.37560697  3500  3  0   1   0   1
> str(t2)
'data.frame':   150000 obs. of  12 variables:
 $ X1 : int  1 2 3 4 5 6 7 8 9 10 ...
 $ X2 : int  1 0 0 0 0 0 0 0 0 0 ...
 $ X3 : num  0.766 0.957 0.658 0.234 0.907 ...
 $ X4 : int  45 40 38 30 49 74 57 39 27 57 ...
 $ X5 : int  2 0 1 0 1 0 0 0 0 0 ...
 $ X6 : num  0.803 0.1219 0.0851 0.036 0.0249 ...
 $ X7 : int  9120 2600 3042 3300 63588 3500 NA 3500 NA 23684 ...
 $ X8 : int  13 4 2 5 7 3 8 8 2 9 ...
 $ X9 : int  0 0 1 0 0 0 0 0 0 0 ...
 $ X10: int  6 0 0 0 1 1 3 0 0 4 ...
 $ X11: int  0 0 0 0 0 0 0 0 0 0 ...
 $ X12: int  2 1 0 0 0 1 0 0 NA 2 ...

> cv1 <- cv.glmnet(as.matrix(t2[,-c(1,2,7,12)]), t2[,2], family="binomial")
Error in as.matrix(cbind2(1, newx) %*% nbeta) : 
  error in evaluating the argument 'x' in selecting a method for function 'as.matrix': Error in t(.Call(Csparse_dense_crossprod, y, t(x))) : 
  error in evaluating the argument 'x' in selecting a method for function 't': Error: invalid class 'NA' to dup_mMatrix_as_dgeMatrix
> cv1 <- cv.glmnet(as.matrix(t2[,-c(1,2,7,12)]), t2[,2], family="multinomial")
Error in t(.Call(Csparse_dense_crossprod, y, t(x))) : 
  error in evaluating the argument 'x' in selecting a method for function 't': Error: invalid class 'NA' to dup_mMatrix_as_dgeMatrix

Есть предложения?

Ответы [ 3 ]

21 голосов
/ 17 мая 2014

По какой-то причине glmnet предпочитает data.matrix() - as.matrix()

cv1 <- cv.glmnet(data.matrix(t2[,-c(1,2,7,12)]), t2[,2], family="multinomial")

.

6 голосов
/ 05 декабря 2017

У меня было похожее сообщение об ошибке при использовании cv.glmnet.cv.glmnet будет правильно работать в RStudio, но он не будет работать при использовании Rscript.Исправление для меня было добавить в начало моего скрипта:

require(methods)

Кажется, что пакет "glmnet" может использовать некоторые функции из пакета "методы", ноэтот пакет не загружается при запуске при использовании Rscript.Тем не менее, пакет «методы» обычно загружается по умолчанию в R.

Вот информация об этой функциональности Rscript:

Rscript не загружает пакет методов, R делает - почемуи каковы последствия?

Надеюсь, это поможет кому-то, кто сталкивается с той же проблемой, что и я.

5 голосов
/ 17 июля 2016

Я получил ту же ошибку Msg. и, к сожалению, это было не так просто, как использовать data.matrix () для меня.

Ошибка возникает в перекрестном продукте входной матрицы и коэффициентов модели.

В предикате.glmnet:

nfit = as.matrix (cbind2 (1, newx)% *% nbeta)

Что решило проблему для меня, так это принудительное использование x для dgCMatrix. Я серьезно не понимаю почему, но это работает для меня.

predict(object = lm, newx =  as(x, "dgCMatrix"), type = "response")

Поскольку я не видел это как ответ на один из многих вопросов, касающихся этой ошибки, я подумал, что опубликую это здесь.

...