这是一种随时间变化的河流水位测量方法,由每五分钟测量一次水位的仪器测量。然而,由于一些干扰等因素的影响,水位数据中往往存在一些异常值。由于水位随时间的变化而不断变化,从水-时间散点图中可以明显地发现异常值。通常,异常值是异常值,但有时上升的水会突然改变水位。由于时间数据是精确到分钟,如何将分钟作为R中的自变量?R如何自动识别和消除这些异常值?
一些数据和数字显示为below.The,用红色选择的数据和数字是异常值。

发布于 2022-09-25 04:30:20
单变量异常值
您没有提供您的数据供我们查看,所以我将使用R中的mpg数据集,该数据集测量汽车度量中的许多变量。这里我只使用displ、hwy和cty变量来演示。
由于您可能在寻找一个R解决方案,一个简单的方法是在is_outlier包中使用rstatix函数。如果您关心多元异常值,也可以考虑使用mahalanobis_distance检查mahalanobis距离。要快速检查,可以使用is_outlier进行泛型检测(您可以修改设置以设置“异常值”的标准),也可以使用is_extreme来处理极端异常值。
#### Load Libraries ####
library(tidyverse)
library(rstatix)
#### Check Outliers ####
is_outlier(mpg$hwy) %>%
table()在这里,您可以从列表的结果中看到有三个异常值:
FALSE TRUE
231 3我们可以通过在我们刚刚加载的ggplot包中的tidyverse包中着色这个因子来绘制它们:
#### Plot Outliers on Scatter Plot ####
mpg %>%
ggplot(aes(x=hwy,
y=displ))+
geom_point(aes(color=is_outlier(hwy)))+
geom_smooth(se=F,
color="lightblue")+
labs(color="Outlier",
x="Highway MPG",
y="Engine Displacement",
title="MPG x Displacement With Outlier Detection")+
theme_bw()+
scale_color_manual(values = c("darkblue",
"red"))这给了我们这个阴谋。请注意,上面的注释在这里是高调的,因为well...using geom_smooth允许我们看到黄土线在这幅图的末尾已经向离群点移动。

您提到要过滤掉这些值。我们可以清楚地看到,高速公路MPG值超过40现在是异常值。因此,我们只需使用filter切换到绘图代码即可。
mpg %>%
filter(!hwy > 40) %>%
ggplot(aes(x=hwy,
y=displ))+
geom_point(aes(color=is_outlier(hwy)))+
geom_smooth(se=F,
color="lightblue")+
labs(color="Outlier",
x="Highway MPG",
y="Engine Displacement",
title="MPG x Displacement With Outlier Detection")+
theme_bw()+
scale_color_manual(values = c("darkblue",
"red"))那么我们的情节就不再显示价值了:

如果希望保存数据以不存在这些异常值,只需使用以下代码即可。这里的!操作符简单地说:“不要给我这个。”
mpg.no.outliers <- mpg %>%
filter(!hwy > 40)多元异常值
您的数据中的多元异常值可以以相同的方式处理,在这方面,您的两个变量没有什么不同。我们可以试着把它们列成这样:
#### Find MVN Outliers ####
mpg %>%
select(cty,hwy) %>%
mahalanobis_distance() %>%
filter(is.outlier == "TRUE")因此,我们在城市和公路MPG变量之间发现了三个异常值:
# A tibble: 3 × 4
cty hwy mahal.dist is.outlier
<int> <int> <dbl> <lgl>
1 28 33 16.2 TRUE
2 33 44 14.7 TRUE
3 35 44 22.7 TRUE 为了绘制它们,我们使用了一个非常类似的方法:
#### Plot Them ####
mpg %>%
select(cty,hwy) %>%
mahalanobis_distance() %>%
ggplot(aes(x=hwy,
y=cty,
color=is.outlier))+
geom_point()+
geom_smooth(color="lightblue",
se=F)+
labs(x="Highway MPG",
y="City MPG",
title="Highway x City Mileage with MVN Outliers",
color="MVN Outlier?")+
theme_bw()+
scale_color_manual(values = c("darkblue",
"red"))这给了我们这样的结果:

在这种情况下,你可以看到黄土函数由于离群点而没有根性位移。这是因为与其他数据点相比,数值是极端的,但它们的线性度仍然与其他数据点相似。
正如另一个已经说过的,一个更详细的讨论什么时候和如何离群点可以在交叉验证。
https://stackoverflow.com/questions/73802759
复制相似问题