我有一些美丽与年龄的多元数据.年龄范围为20-40,间隔为2(20,22,24 ...... 40),并且对于每个数据记录,它们的年龄和美容等级为1-5.当我对这些数据进行箱形图(横跨X轴的年龄,Y轴上的美观评级)时,在每个框的胡须外面都会绘制一些异常值.
我想从数据框本身中删除这些异常值,但我不确定R如何计算其箱形图的异常值.下面是我的数据可能是什么样子的示例.

我正在寻找有效的方法来删除数据中的异常值。我尝试了在 StackOverflow 和其他地方找到的几种解决方案,但没有一个对我有用(应该在样本数据中检测并删除 1993 年 6 月、1994 年 8 月和 1995 年 3 月的 4 个高值 21637、19590、21659 和 200000发布在这篇文章的末尾)。任何建议将不胜感激!
这是我到目前为止测试过的:
数据概览

3 个异常值仍然存在,并且时间序列末尾的许多合法高值已被删除。
y <- dat$Value
y_filter <- y[!y %in% boxplot.stats(y)$out]
plot(y_filter)
Run Code Online (Sandbox Code Playgroud)

与第一种方法类似的问题
FindOutliers <- function(data) {
data <- data[!is.na(data)]
lowerq = quantile(data)[2]
upperq = quantile(data)[4]
iqr = upperq - lowerq #Or use IQR(data)
# we identify extreme outliers
extreme.threshold.upper = (iqr * 1.5) + upperq
extreme.threshold.lower = lowerq - (iqr * 1.5)
result <- which(data …Run Code Online (Sandbox Code Playgroud) X
Team Date Score
A 1-1-2012 80
A 1-2-2012 90
A 1-3-2012 50
A 1-4-2012 40
B 1-1-2012 100
B 1-2-2012 60
B 1-3-2012 30
B 1-4-2012 70
etc
Run Code Online (Sandbox Code Playgroud)
我需要并且可以将此数据框转换为每个团队的一行宽数据框,并将所有观察和日期作为标题:
XX
Team 1-1-2012 1-2-2012 1-3-2012 1-4-2012
A 80 90 50 40
B 100 60 30 70
Run Code Online (Sandbox Code Playgroud)
我需要计算每行的均值和sd,我可以这样做:
XX
Team 1-1-2012 1-2-2012 1-3-2012 1-4-2012 mean sd
A 80 90 50 40 75 20
B 100 60 30 70 55 10
Run Code Online (Sandbox Code Playgroud)
考虑到我在数据帧xx中有数千行.我想对每个单元格进行计算,如下所示:
如果abs(xx-Mean)> 3*SD,则创建计数器列名称并递增该值.这个想法是将每个观察值与平均值和sd进行比较,如果给定团队的每个观察值与此匹配 - abs(xx-Mean)> 3*SD,则递增计数器.在检查每个单元格之后,我想查看每个团队的每个计数器,并获得具有最高计数器值的前十名高级团队.基本上我试图检测最多的异常值.一旦我获得前10名团队名称,我想在数据框x上绘制他们的时间序列数据.
我希望我不会让它变得比它应该更复杂.不确定,R已经具有对每个单元格进行计算的功能.如何实现这一点的任何想法表示赞赏?
我目前正在尝试根据选定变量的子集排除异常值,目的是执行敏感性分析。我已经调整了此处可用的函数:计算 R 中的异常值),但到目前为止尚未成功(我仍然是 R 新手用户)。如果您有任何建议,请告诉我!
df <- data.frame(ID = c(1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011),
measure1 = rnorm(11, mean = 8, sd = 4),
measure2 = rnorm(11, mean = 40, sd = 5),
measure3 = rnorm(11, mean = 20, sd = 2),
measure4 = rnorm(11, mean = 9, sd = 3))
vars_of_interest <- c("measure1", "measure3", "measure4")
# define a function to remove outliers
FindOutliers <- function(data) {
lowerq = quantile(data)[2]
upperq = quantile(data)[4] …Run Code Online (Sandbox Code Playgroud)