gpt4 book ai didi

r - 如何重复 Grubbs 测试并标记异常值

转载 作者:行者123 更新时间:2023-12-04 02:39:46 26 4
gpt4 key购买 nike

我想重复地将 Grubbs 测试应用于一组数据,直到它不再发现异常值。我希望标记异常值而不是删除异常值,以便我可以将数据绘制为具有不同颜色的异常值的直方图。我已经使用 outliers 包中的 grubbs.test 手动识别异常值,但无法弄清楚如何循环它们并成功标记它们。我的目标输出类型如下:

X   Outlier
152.36 Yes
130.38 Yes
101.54 No
96.26 No
88.03 No
85.66 No
83.62 No
76.53 No
74.36 No
73.87 No
73.36 No
73.35 No
68.26 No
65.25 No
63.68 No
63.05 No
57.53 No

最佳答案

看起来你需要一个简短的函数来做你想做的事:

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)))
}

这是输出:
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

如果您想要具有不同颜色的直方图,您可以使用以下内容:
ggplot(grubbs.flag(X),aes(x=X,color=Outlier,fill=Outlier))+
geom_histogram(binwidth=diff(range(X))/30)+
theme_bw()

Outlier Histogram

关于r - 如何重复 Grubbs 测试并标记异常值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22837099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com