【发布时间】:2014-04-15 10:17:25
【问题描述】:
我有家庭身份证及其各自的销售额。事实证明,这些 HH ID 中很少有人拥有极高的总销售额。各位大侠能否推荐一个处理异常值的好方法。 如果您在 SAS 中提出建议,那就太好了。
问候, 酒糟
【问题讨论】:
-
欢迎来到 StackOverflow。如果您有一些可以轻松复制的示例代码,您将获得更好的响应。
我有家庭身份证及其各自的销售额。事实证明,这些 HH ID 中很少有人拥有极高的总销售额。各位大侠能否推荐一个处理异常值的好方法。 如果您在 SAS 中提出建议,那就太好了。
问候, 酒糟
【问题讨论】:
以下是一个基本的,相当粗略的方法。它涉及从平均值中删除超过 3 个标准差的值:-
** Standardise data;
proc standard data=sales_data mean=0 std=1 out=sales_data_std;
var sales;
run;
** Remove values more than 3 std devs from mean;
data sales_data_no_outliers;
set sales_data_std;
where sales < -3 or sales > 3;
run;
在Wikipedia 中有对这种方法的引用。
不过,还是很粗糙;它依赖于你的变量是正态分布的,并且几乎总是会找到异常值(如果 n > 100),即使在所有合理的情况下,这些值并不是真正的异常值。
异常值的主题冗长而详细,但对该主题进行粗略的概述可能会很有用。不幸的是,我真的想不出任何介绍性的资源。
【讨论】: