It looks like you will need a short function to do what you want:
library(outliers) library(ggplot2) X <- c(152.36,130.38,101.54,96.26,88.03,85.66,83.62,76.53, 74.36,73.87,73.36,73.35,68.26,65.25,63.68,63.05,57.53) grubbs.flag <- function(x) { outliers <- NULL test <- x grubbs.result <- grubbs.test(test) pv <- grubbs.result$p.value while(pv < 0.05) { outliers <- c(outliers,as.numeric(strsplit(grubbs.result$alternative," ")[[1]][3])) test <- x[!x %in% outliers] grubbs.result <- grubbs.test(test) pv <- grubbs.result$p.value } return(data.frame(X=x,Outlier=(x %in% outliers))) }
Here's the conclusion:
grubbs.flag(X) X Outlier 1 152.36 TRUE 2 130.38 TRUE 3 101.54 FALSE 4 96.26 FALSE 5 88.03 FALSE 6 85.66 FALSE 7 83.62 FALSE 8 76.53 FALSE 9 74.36 FALSE 10 73.87 FALSE 11 73.36 FALSE 12 73.35 FALSE 13 68.26 FALSE 14 65.25 FALSE 15 63.68 FALSE 16 63.05 FALSE 17 57.53 FALSE
And if you need a histogram with different colors, you can use the following:
ggplot(grubbs.flag(X),aes(x=X,color=Outlier,fill=Outlier))+ geom_histogram(binwidth=diff(range(X))/30)+ theme_bw()

source share