2017-05-02 2 views
1

변수 '크기'에 대해 Shapiro Wilks 테스트를 실행하려고합니다. 'ddply'로 서브 셋팅 한 데이터 세트를 사용합니다 (변수 'Site' 및 'Category') 오류 메시지가 계속 표시됩니다.Shapiro.test & plyr : 모든 'x'값이 동일합니다.

다음은 내 데이터 세트 (d)의 샘플입니다. 나는 9 개 범주 4237 명 관찰과 13 개 사이트를 가지고, 내가 ddply 사용하여 내 데이터의 하위 집합에 기능을 적용하려고 그런

shap.w <- function(input){ #shapiro wilk test function 
    if(sum(!is.na(input$Size)) > 3 & sum(!is.na(input$Size)) < 5000){ 
     p <- shapiro.test(input$Size)$p.value 
     return(p)}else{return(NA)} } 

:

내가 샤피로 윌크스하는 기능을 만들어
Site Genus Size Category 
Arn01 ACR  4  ACR 
Arn01 ACR  7  ACR 
Arn02 ACR  3  ACR 

Error in shapiro.test(input$Size) : all 'x' values are identical 
을 : 내가 할 때
sw_test <- ddply(d, .(Site, Category), .fun = shap.w) 

는, 나는라는 오류 메시지가

분명히 분명하지 않지만. 어떤 도움이나 조언을 주시면 감사하겠습니다.

dput(d[1:20,]):

> dput(d[1:20,]) 
structure(list(Site = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Arn01n", 
"Arn02n", "Arn03n", "Arn04n", "Arn05n", "Arn06n", "Arn07n", "Arn08n", 
"Arn09n", "Arn10n", "Arn11n", "Arn12n", "Arn13n"), class = "factor"), 
Genus = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 30L, 30L, 30L, 30L), .Label = c("ACA", 
"ACR", "AST", "COS", "CYP", "ECH", "FUN", "FVA", "FVT", "GAR", 
"GON", "HEL", "HYD", "ISO", "LEA", "LEO", "LEP", "LOB", "MER", 
"MNT", "MST", "MYC", "PAV", "PBR", "PLA", "PLAT", "POC", 
"POD", "PRE", "PRM", "PRS", "PSA", "SAR", "STY"), class = "factor"), 
Size = c(4, 2, 4, 4, 3, 5, 5, 4, 4, 4, 4, 3, 6, 3, 4, 5, 
2, 3, 3, 6), Category = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 8L, 8L, 8L, 8L), .Label = c("ACR", 
"FAV", "FUN", "HEL", "ISO", "MNT", "POC", "PRM", "PRS"), class = "factor")), 
.Names = c("Site", 
"Genus", "Size", "Category"), row.names = c(NA, 20L), class = "data.frame")` 

ETA 출력 table(d$Size)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 22 23 24 25 26 27 28 29 30 31 33 35 36 37 38 39 14 271 525 548 521 424 201 206 50 357 23 95 36 7 171 11 14 30 4 145 11 21 5 46 4 1 5 1 95 1 2 31 3 1 2 1 40 41 42 43 44 45 46 48 50 51 53 55 56 57 60 62 63 65 66 70 72 75 76 80 82 83 85 88 90 94 95 100 105 110 120 125 80 1 9 3 4 22 1 4 42 1 1 4 1 3 64 3 5 9 4 13 1 2 1 20 2 2 2 1 5 1 2 17 1 2 6 2 128 130 143 150 155 160 180 200 230 300 890 920 1 1 1 1 1 1 1 2 1 1 1 1

+0

설명은 확장 토론이 아닙니다. 이 대화는 [채팅으로 옮겼습니다] (http://chat.stackoverflow.com/rooms/143360/discussion-on-question-by-ecologist-shapiro-test-plyr-all-x-values-are-iden) . –

답변

0

내가 의견에 도움을 주심 덕분에,이 문제를 해결할 수있었습니다. 함수에 대한 코드를 읽을 수 있습니다 : (나는이 데이터 집합에 어떤 이상 5,000이 없습니다 있지만)이 5000보다 작 3/큰 조합을 제거

shap.w <- function(input){   #shapiro-wilks test function 
if(length(unique((input$Size[!is.na(input)]))) > 3 
& length(unique((input$Size[!is.na(input)])))< 5000){ 
p <- shapiro.test(input$Size)$p.value 
return(p)}else{return(NA)} } 

. 일단 내가 이것을 업데이트하면 다음 줄이 아무런 문제없이 달렸다. 도와 주셔서 감사합니다!

1

참고 t의


ETA 출력 당신이 NA를 돌려 준다면, is.numericFALSE을 줄 것입니다 : 이것을 보시려면 is.numeric(NA)을 시도하십시오.

당신은 NA_real_ 대신

is.numeric(NA) 
[1] FALSE 
is.numeric(NA_real_) 
[1] TRUE 

그것은하지만 여전히 NA의 반환 수 :

is.na(NA_real_) 
[1] TRUE 

그러나, as.numeric는 주어진 함수에 의해 ddply에 반환되는 무엇이 그 문제 (아마도 한 번 확인을 수정해야 입력)

+0

감사합니다. @ Glen_b! 원래 코드에서 잘못된 함수를 사용하고있었습니다. 함수를 업데이트 할 때 'shapiro.test (input $ Size)의 오류 : 모든'x '값이 동일합니다'라는 새로운 오류 메시지가 나타납니다. 사이트에서 비슷한 질문을했지만 내 문제를 해결하는 데 도움이되지는 않습니다. 네가 가진 어떤 생각이라도 나는 고맙다. – ecologist