2014-05-16 13 views
0

ggplot의 boxplot은 [Q1 - 1.5 * IQR, Q3 + 1.5 * IQR] 범위를 벗어나는 모든 점을 이상 치로 렌더링합니다. R blog에서 논의했듯이, 이것은 항상 좋은 생각이 아닙니다. 비대칭 배포로 인해 잘못된 아웃 라이어가보고 될 수 있습니다. 이 경우 robustbase R 패키지의 adjbox가 제안됩니다. 그러나 플롯의 품질 은 ggplot2만큼 좋지 않습니다.ggplot의 boxplot에서 medcouple 결합

내 질문은 : 이상한 사람을 감지했을 때 ggplot에 의해 사용되는 adjbox에서 사용 된 지수 모델을 결합하는 방법을 아는 사람이 있습니까?

답변

2

아마 값을 직접 입력해야 할 것입니다.

coald <- data.frame(coaldiff = diff(coal$date)) #$ 
adjboxStats(coald$coaldiff)$stats 
# [1] 0.0000000 0.1013005 0.3107461 0.7529090 3.7180014 
: 그런 다음 adjbox() 함수가 사용 된 값 얻을 수

enter image description here

:이 다음 상자 그림을 생산

library(robustbase) 
if(require("boot")) { 
    ### Hubert and Vandervieren (2006), p. 10, Fig. 4. 
    data(coal, package = "boot") 
    coaldiff <- diff(coal$date) 
    op <- par(mfrow = c(1,2)) 
    boxplot(coaldiff, main = "Original Boxplot") 
    adjbox(coaldiff, main = "Adjusted Boxplot") 
    par(op) 
} 

다음 adjbox() 도움말 파일에 사용 된 예를 참조

조정 된 상자 플롯을 그리는 데 사용되는 값입니다. 이 정보를 ggplot()에 제공 한 다음 자신의 상자 그림을 계산할 수 있습니다. 이이 일을 더 나은 방법은 아마도,하지만 난이 일을 생각 제일 먼저 조정 상자 그림 값을 포함한 새로운 데이터 세트를 만드는 것이 었습니다 :

library(ggplot2) 
library(plyr) 
d <- ddply(coald, .(coaldiff), transform, 
    ymin = adjboxStats(coald$coaldiff)$stats[1], 
    ymax = adjboxStats(coald$coaldiff)$stats[5], 
    middle = adjboxStats(coald$coaldiff)$stats[3], 
    lower = adjboxStats(coald$coaldiff)$stats[2], 
    upper = adjboxStats(coald$coaldiff)$stats[4]) 

# Boxplot with unadjusted values: 
p <- ggplot(d, aes(factor(1), coaldiff)) 
p + geom_boxplot() 

# Boxplot with adjusted values (note that you have to add the outliers back in): 
p + geom_boxplot(aes(ymin=ymin, ymax=ymax, middle=middle, upper=upper, lower=lower), 
    stat="identity") + 
    geom_point(data=subset(d, coaldiff < ymin | coaldiff > ymax)) 

이 당신에게 위의 플롯의 ggplot2 버전을 줄 것이다 :

enter image description here

또한 해들리 위컴이 비슷한 질문에 response에 "생각을 많이하지 않고"이에 대해 조언 있습니다.