去除 R 中的异常值适用于一个属性,但不适用于第二个属性

数据挖掘 r 数据挖掘 数据清理
2022-03-10 00:32:59

(注意:这是家庭作业的一部分。我不是要求解决分配的问题,我只是对 R 中的一些行为感到困惑。)

我有一个数据集作为数据框加载到 R 脚本中。在箱线图中显示三个属性后,我发现三个属性中的两个存在异常值。分配的下一步是删除所有异常值。我已经编写了代码来执行此操作,但它只将它们从两个属性中的第一个中删除;该过程的第二个应用程序不会从数据框中删除任何其他记录。

我正在使用以下代码,改编自阅读此 R-bloggers 帖子

# Get quantiles and IQR for each of the two attributes:
ar_quantiles <- quantile(leaf_data$aspect_ratio)
ar_iqr <- IQR(leaf_data$aspect_ratio)
s_quantiles <- quantile(leaf_data$solidity)
s_iqr <- IQR(leaf_data$solidity)

# Aspect Ratio cleanup.
leaf_data <- subset(
    leaf_data,
    leaf_data$aspect_ratio > (ar_quantiles[1] - 1.5 * ar_iqr) &
leaf_data$aspect_ratio < (ar_quantiles[2] + 1.5 * ar_iqr)
)

# Solidity cleanup.
leaf_data <- subset(
    leaf_data,
    leaf_data$solidity > (s_quantiles[1] - 1.5 * s_iqr) &
leaf_data$solidity < (s_quantiles[2] + 1.5 * s_iqr)
)

(博客文章中演示了一种不同的方法,但是当我切换到该方法时,它在aspect_ratio列中留下了一个异常值,并且仍然没有对列进行任何更改solidity。)

由于我对 R 的理解有限,我能够做的唯一真正的调试是转储boxplot(leaf_data$solidity, plot = FALSE)$out清理solidity列的行之前和之后的输出。但是该表达式返回的元素数量没有变化(元素本身也没有变化)。

这对任何人来说都是一个常见的错误/误解吗?

1个回答

默认分位数quantile为 0%、25%、50%、75%、100%。

这意味着四分位数 Q1 和 Q3 是您获得的两个向量中的第二个和第四个值。

由于索引从 1 开始,这意味着您可以获得 Q1ar_quantiles[2]和 Q3 ar_quantiles[4]目前您正在使用索引 1 和 2,这肯定是导致问题的原因。

[编辑] 另一种选择是仅指定调用时所需的分位数quantile

ar_quantiles <- quantile(leaf_data$aspect_ratio,probs=c(.25,.75))

这样,生成的向量仅包含位置 1 和 2,其余代码将起作用。

请注意,您可以像这样打印分位数向量:

print(ar_quantiles)

您可以访问任何函数的文档,如下所示:

?quantile