2016-06-28 4 views
1

Rstudio를 사용하고 있고 rocpROC부터 boot까지 부트 스트랩에 사용하려고합니다. 나는 this link에 부호를 따르고있다. 해당 링크의 코드는 boot과 함께 다른 함수를 사용하며 정상적으로 작동합니다. 하지만 roc을 시도하면 오류가 발생합니다.R : 로크로 부팅 할 때 "매트릭스의 잘못된 첨자 수"오류가 발생했습니다.

아래 코드는 다음과 같습니다. (출력에서 재 샘플링이 몇 번 수행되었는지보기 위해 샘플의 크기를 인쇄합니다. 여기 R=5, 샘플링이 6 번 수행 된 후 오류가 발생 함).

library(boot) 

roc_boot <- function(D, d) { 
    E=D[d,] 
    print(dim(E)) 
    return(roc(E$x,E$y)) 
} 

x = round(runif(100)) 
y = runif(100) 
D = data.frame(x, y) 

b = boot(D, roc_boot, R=5) 

출력 :

[1] 100 2 
[1] 100 2 
[1] 100 2 
[1] 100 2 
[1] 100 2 
[1] 100 2 
Error in boot(D, roc_boot, R = 5) : 
    incorrect number of subscripts on matrix 

문제가 여기에 무엇입니까?

과 같은 다른 기능으로 바꾸면 오류없이 6 개의 줄이 출력됩니다. 또한 여러 번 부팅 할 때 다른 대답을 제공합니다 (D은 동일 함).

모든 재 샘플링을 완료 한 후에 오류가 발생 함을 확인하십시오. 이 특정 오류의 원인을 찾을 수 없습니다. this과 같은 다른 답변을 보았지만 제 경우에는 적용되지 않습니다. 누군가이 오류가 발생하는 이유와 그것이 일반적으로 의미하는 바를 설명 할 수 있습니까?

EDIT : 난 함수 다음하여 곡선 아래의 전용 영역을 반환

roc_boot <- function(D, d) { 
    E=D[d,] 
    objectROC <- roc(E$x,E$y) 
    return(objectROC$auc) 
} 

이것은 곡선 아래 영역의 응답을 제공하지만, 더 개선이없는 즉, 부트 스트래핑이없는 응답과 동일하다. 부트 스트랩으로 인해 전체 roc 오브젝트를 개선해야합니다.

+0

roc 객체를 반환하거나 roc 아래 영역을 계산 하시겠습니까? 부트가 통계 인수에서 리턴되는 단일 값을 찾으므로 오류가 발생합니다. –

+0

@ 짐므. 나는 그 물건을 돌려주고 싶다. 그게 가능하니? 나는 roc 객체의'$ auc'를 사용하여 곡선 아래의 영역을 반환했습니다. 그러나이 경우 영역은 부트 스트랩없이 영역과 동일합니다. 부트 스트래핑 (bootstrapping)으로 인해'roc' 객체를 약간의 개선이 필요하다고 생각합니다. 이 질문을 편집하여 추가 할 것입니다. –

+0

코드 개선으로, 데이터 변동성에 따라 1000 근처의 부트 스트랩 수를 늘리는 것이 좋습니다. roc 객체를 부트 스트래핑하는 것만으로는 auc 통계를 반환하는 것보다 개선 (더 높은 auc?)으로 이어지지 않습니다. 부팅 객체'b'를 보면 부팅 스트랩의 평균과 원본 데이터 세트에서 계산 된 auc (aka bias)의 차이를 알 수 있습니다. –

답변

2

밝혀지면 statisticroc 개체를 boot에 반환 할 수 없습니다. 숫자 값이어야합니다. @Calimo에 의해 제안 따라서 다음과 같은 수정,

roc_boot <- function(D, d) { 
    E=D[d,] 
    objectROC <- roc(E$x,E$y) 
    return(objectROC$auc) 
} 

또한 (질문에서 편집으로) 오류를 제거한다, boot 만 신뢰 구간이 아닌 실제 답을 향상시킨다. 필자의 경우에는 신뢰 구간이 약간 개선되었습니다.