我想绘制一些数据的直方图。数据包含一些极端值或离群值,因此我想从绘图中排除这些极端值或离群值,以获取大量数据的有意义的图片。这是一些示例数据:
x <- c(seq(0, 1, 0.05)^2, 5)
hist(x)
由于一个异常,您看不到任何有关分布的信息。我可以手动排除异常值。
hist(x[x<2])
这本质上是我想要的,但是它要求我定义确切的截止值,如果数据不仅是x而是一些复杂的表达式,那么会带来不便。我宁愿告诉hist修整最大和最小百分之几的数据,类似于函数均值中的trim选项。
我还可以手动设置xlim和中断,但这更加尴尬。
在绘制之前是否有一种很好的内在方法来去除最极端的值?
答案 0 :(得分:1)
也许编写修剪功能。此函数删除离群值,离群值被定义为大于均值的四分位数范围的1.5倍。 (这是Tukey箱形图使用的异常值的定义。)
trim <- function(x){
x[(x > mean(x)-1.5*IQR(x)) & (x < mean(x)+1.5*IQR(x))]
}
hist(trim(x))
或者,按百分比修整。
trim_q <- function(x, lb, ub){
x[(x > quantile(x, lb)) & (x < quantile(x, ub))]
}
hist(trim_q(x, 0.01, 0.99))
这会将数据修整到第一个百分点至第九十九个百分点之间。
第一个修整功能不太正确。我认为Tukey将其定义为第一和第三四分位数上下的四分位间距的1.5倍,而不是像我在此处所做的那样。它应该如下所示:
trim_t <- function(x){
x[(x > quantile(x, 0.25)-1.5*IQR(x)) & (x < quantile(x, 0.75)+1.5*IQR(x))]
}
hist(trim_t(x))
答案 1 :(得分:0)