2011-12-10 2 views
12

데이터 세트에서 glmnet 패키지를 사용하려고합니다. glmnet()에 대한 람다 값을 얻으려면 cv.glmnet()을 사용하고 있습니다. 나는 열 1,2,7,12를 다음과 같이 제외합니다. id 열, 응답 열, NA 포함, NA 포함.R glmnet as.matrix() 오류 메시지

> 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 

어떤 제안 :

다음은 데이터 세트 및 오류 메시지인가? 어떤 이유로 glmnet를 들어

+8

혼자서 알아 냈어. as.matrix() 대신 data.matrix()를 사용해야했습니다. – screechOwl

+0

이 패키지에 익숙하지는 않지만 방정식의 양변에 이항 응답을 제공하는 것처럼 보입니다 ... x = t [, c (1,2,7,12)] AND y = t [, 2] ... 모델이 너무 좋아서 사실 일 것으로 판단되면 이는 아마도 이유 일 것입니다. –

+0

그래픽 오류가 있는지는 모르지만 입력 벡터는 x = t [, - c (1,2,7,12)]입니다. c() 앞에있는 '-'는 해당 열을 제외하고 나머지는 모두 유지한다는 것을 의미하므로 응답은 방정식의 한쪽에만 있어야합니다. – screechOwl

답변

15

은 일을해야 data.matrix()

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

as.matrix()에 좋아한다.

4

동일한 오류 메시지가 표시됩니다. 불행히도 나를 위해 data.matrix()를 사용하는 것만 큼 쉽지는 않았습니다.

입력 행렬과 모델 계수의 교차 곱에서 오류가 발생합니다. predict.glmnet에서

: 저 문제를 어떻게 해결

nfit = as.matrix (cbind2 (1이 newX) %의 *의 %의 nbeta)

는 dgCMatrix X를 강요했다 . 나는 진지하게 이해하지 못한다. 그러나 그것은 나를 위해 일한다.

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

나는이 오류에 관한 많은 질문 중 하나에서이 답변을 보지 못했기 때문에 여기에 게시하겠다고 생각했습니다.

+1

미래의 사람들을 위해이 문제를 추가하기 위해 같은 문제가 발생하여 as.vector (분류)와 함께 (x, "dgCMatrix")를 사용하여 트릭을 수행하는 것처럼 보였습니다. 예제 코드 : cvfit = cv.glmnet (x = (데이터, "dgCMatrix"), y = as.vector (분류), family = "binomial") –

3

cv.glmnet을 사용할 때 비슷한 오류 메시지가 나타납니다. cv.glmnet은 RStudio에서 올바르게 작동하지만 Rscript를 사용하면 작동하지 않습니다.

require(methods)

"glmnet"패키지는 "방법"패키지에서 일부 기능을 사용할 수 있다는 것, 그러나이 패키지는로드되지 않은 : 나에 대한 수정 제 스크립트의 상단에 추가했다 Rscript를 사용할 때 시작합니다.

Rscript does not load methods package, R does -- why, and what are the consequences?

나는 이것이 내가했던 것과 같은 문제로 실행하는 사람을 도움이되기를 바랍니다 : 그러나, "방법"패키지가 정상적으로 R.

에서 기본적으로로드 여기

이 RSCRIPT 기능에 대한 정보는 .

+0

이것은 최대의 가치가 있습니다. 문제. –