2014-06-16 3 views
1

누락 된 값을 대체하기 위해 Random Forest 메서드를 사용하고 싶습니다. 나는 MICE 랜덤 포레스트가 파라 메트릭 마우스보다 잘 수행한다고 주장하는 논문을 읽었습니다.imputation 동안 임의의 포리스트 (MICE 패키지)를 사용하는 중 오류가 발생했습니다.

필자는 이미 기본 마우스에 대한 모델을 실행하고 결과를 얻었고 재생했습니다. 그러나 임의의 포리스트 메서드에 대한 옵션이있을 때 오류가 발생했으며 이유가 확실하지 않습니다. 나는 무작위로 숲과 쥐에 대한 오류와 관련된 몇 가지 질문을 보았다. 그러나 그것들은 나의 사례가 아니다. 내 변수에는 하나 이상의 NA가 있습니다.

imp <- mice(data1, m=70, pred=quickpred(data1), method="pmm", seed=71152, printFlag=TRUE) 
impRF <- mice(data1, m=70, pred=quickpred(data1), method="rf", seed=71152, printFlag=TRUE) 

iter imp variable 
1 1 Vac 
Error in if (n == 0) stop("data (x) has 0 rows") : argument is of length zero 

이 오류가 발생하는 이유는 무엇입니까?

EDIT

는 I 대신 가변 수있는의 숫자에 대한 모든 변수를 변경하려고하고 반환 동일한 오류 일부 경고()

impRF <- mice(data, m=70, pred=quickpred(data), method="rf", seed=71152, printFlag=TRUE) 

iter imp variable 
    1 1 Vac CliForm 
Error in if (n == 0) stop("data (x) has 0 rows") : argument is of length zero 
In addition: There were 50 or more warnings (use warnings() to see the first 50) 

50: In randomForest.default(x = xobs, y = yobs, ntree = 1, ... : 
    The response has five or fewer unique values. Are you sure you want to do regression? 

EDIT1

I 5 개의 입력과 데이터의 하위 집합 인 2000 개의 행만 사용하여 시도했지만 몇 가지 오류가 발생했습니다 :

> imp <- mice(data2, m=5, pred=quickpred(data2), method="rf", seed=71152, printFlag=TRUE) 

iter imp variable 
1 1 Vac Radio Origin Job Alc Smk Drugs Prison Commu Hmless Symp 
Error in randomForest.default(x = xobs, y = yobs, ntree = 1, ...) : NAs in foreign 
function call (arg 11) 
In addition: Warning messages: 
1: In randomForest.default(x = xobs, y = yobs, ntree = 1, ...) : invalid mtry: reset to within valid range 
2: In max(ncat) : no non-missing arguments to max; returning -Inf 
3: In randomForest.default(x = xobs, y = yobs, ntree = 1, ...) : NAs introduced by coercion 

답변

2

나는 완전히 하나의 관찰 된 변수가있을 때이 오류가 발생했습니다. 귀하의 경우에도 그 원인을 추측합니다. 내 동료 Anoop Shah가 나에게 수정 사항 (아래)을 제공했으며 Prof van Buuren (쥐 작성자)은 패키지의 다음 업데이트에이를 포함시킬 것이라고 말했습니다.

rf 입력 기능을 재정의하려면 다음을 입력하십시오. fixInNamespace ("mice.impute.rf", "마우스")

에 붙여 보정 함수는이다

mice.impute.rf <- function (y, ry, x, ntree = 100, ...){ 
ntree <- max(1, ntree) 
xobs <- as.matrix(x[ry, ]) 
xmis <- as.matrix(x[!ry, ]) 
yobs <- y[ry] 
onetree <- function(xobs, xmis, yobs, ...) { 
    fit <- randomForest(x = xobs, y = yobs, ntree = 1, ...) 
    leafnr <- predict(object = fit, newdata = xobs, nodes = TRUE) 
    nodes <- predict(object = fit, newdata = xmis, nodes = TRUE) 
    donor <- lapply(nodes, function(s) yobs[leafnr == s]) 
    return(donor) 
} 
forest <- sapply(1:ntree, FUN = function(s) onetree(xobs, 
    xmis, yobs, ...)) 
impute <- apply(forest, MARGIN = 1, FUN = function(s) sample(unlist(s), 
    1)) 
return(impute) 
} 
+0

@ 조나단 안녕! 나는 당신이 언급했던 것과 똑같은 명령을 사용했다 : fit <- randomForest (x = xobs, y = yobs, ntree = 1, ...). 그러나 오류가 발생합니다 : "onetree (xobs, xmis, yobs, ...) 오류 : 함수"randomForest ""을 (를) 찾을 수 없습니다. 왜 그런가? 원인은 다음과 같습니다. fit <- randomForest (x = xobs, y = yobs, ntree = 1, ...) – pavid

+1

미안하지만, Pavid는 어떤 이유로 든 정의 된 randomForest 함수가없는 것처럼 보입니다. . Steve Van Buuren이 MICE를 6 월 11 일에 업데이트 한 것을 보았습니다. 따라서 패키지 설치를 업데이트하고 문제가 해결되는지 확인해보십시오. –

+0

오우! 지금 실행 중! 나는 패키지 업데이트 아이디어가 내 마음을 넘어선 적이 없다고 고백해야한다. 고마워요! :) – pavid