2016-03-24 30 views
1

Kutu çizimini özelleştirmeye çalışıyorum ve bir nokta dışında oldukça başarılı oldum. Anlayamadığım nokta, aykırı değerleri göstermek için stat_summary'ı nasıl kullanabileceğim. Büyük bir arsada farklı kutu çizimleri var ve aykırı değerler çıktıda gösterilmiyor. Ancak, veriyi değiştirirsem ve sadece R'yi tek bir veri türü ile beslediysem (sadece tek kutu arsası için) kodum iyi çalışıyor ve çıktılarımızda kristallerin net olduğunu görebiliyorum. Herhangi bir yardım için minnettarım.ggplot kullanarak Kutu çizimindeki outlier hesaplamasını değiştirin R

Çok teşekkürler,

f <- function(x) {r <- c( quantile(x,probs=c(0.25))-(1.5*(quantile(x,probs=c(0.75))-quantile(x,probs=c(0.25))))  ,quantile(x, probs = c(0.25)), quantile(x, probs = c(0.5)), quantile(x, probs = c(0.75)),  quantile(x,probs=c(0.75))+(1.5*(quantile(x,probs=c(0.75))-quantile(x,probs=c(0.25)))));names(r) <- c('ymin', 'lower', 'middle', 'upper', 'ymax'); r} 
o <-function(x) { print(x); if (length(x) > 7) { pp = subset(x, x < (quantile(x, probs = c(0.25)) - (1.5 * (quantile(x, probs = c(0.75)) - quantile(x, probs = c(0.25))))) | x > (quantile(x, probs = c(0.75)) + (1.5 * (quantile(x, probs = c(0.75)) - quantile(x, probs = c(0.25)))))); return (pp)} else { return (NA)} } 

dt=read.table("C:/...../test.txt",header=TRUE,sep=",") 
data<-data.frame(x=dt$x,day=dt$day) 
dev.new();ggplot(data, aes(x,day)) + stat_summary(fun.data=f, geom='boxplot')+stat_summary(fun.data =o, geom='point', col='red')#+ stat_summary(fun.y = o2, geom='point', col='red') 

cevap

3

anahtar aynı sütunda tüm verilerinizi tutmak ve değişkenleri ayırmak için etiket sütunu eklemektir. Veri çerçevesi içindeki aykırı değerleri algılamak için özel bir işlev kullanırsanız, stat_summary işlevini tamamen ortadan kaldırabilirsiniz.

Labeling Outliers of Boxplots in R'dan uyarlanmıştır. Sadece grup tanımlayıcısı ile farklı örnek veri aynı sütunda değişkenleri A ve B içerir nasıl

library(ggplot2) 
library(data.table) 

# Generate sample 
set.seed(123) 
n <- 500 
dat <- data.table(group=c(rep("A", n/2) , rep("B", n/2)), value=rnorm(n)) 

Bildirim.

# Create outlier function 
check_outlier <- function(v, coef=1.5){ 
    quantiles <- quantile(v, probs=c(0.25,0.75)) 
    IQR <- quantiles[2] - quantiles[1] 
    res <- (v < (quantiles[1]- coef*IQR)) | (v > (quantiles[2]+ coef*IQR)) 
    return(res) 
} 

# Apply with data.table "by" method 
dat[, outlier:=check_outlier(value), by=group] 

Bu fonksiyon

yaygın değildir ve data.table paketin bir parçası, ancak ana nokta, aykırı değer etiketi DOĞRU sahip veri çerçevesi bir sütun ekler olmasıdır.

# Plot 
ggplot(dat, aes(x=group,y=value)) + 
    geom_boxplot() 

Arşivi oradan özelleştirin.

+0

Merhaba Chris, Cevabınız için teşekkür ederim. Takdir. Ne ayıp, sadece gördüm, neden bir bildirim almadım. –

+0

@mohsenhs sorun değil, yardımcı olmaktan memnun. –

0

Yardımlarınız için teşekkürler Chris.

sorun benim o fonksiyonu ile ilişkili olduğu,

o <-function(x) { pp= subset(x, x <(quantile(x, probs = c(0.25)) - (1.5 * (quantile(x, probs = c(0.75)) - quantile(x, probs = c(0.25))))) | x > (quantile(x, probs = c(0.75)) + (1.5 * (quantile(x, probs = c(0.75)) - quantile(x, probs = c(0.25))))));if(length(pp)<1){pp=c(1);return(pp)}else { return (NA)}}