如何使用标量检查异常值

时间:2016-06-24 16:12:30

标签: stata

我按年份,科目和年级检查考试分数的分布。我想确保没有任何异常值,这将超过平均值4个标准偏差。这是我的代码:

bys year subject tested_grade: summarize test_score

但是当我试图获得标量时,我只能获得与去年相对应的标量,subject,tested_grade。我试过创建一个循环,但它会导致同样的问题。

我找到了Nick Cox的extremes命令,但它并没有告诉我极值与平均值有多少标准偏差。

如果有人对如何检查异常值有一些想法,这可以通过远离平均值的标准偏差来确定,那将是非常有帮助的。

修改

这段代码让我(大部分)得到了我想要的东西。

bys year subject tested_grade: summarize test_score
gen std_test_score = (test_score > 4*r(sd)) if test_score < .
list test_score std_test_score if std_test_score==1

唯一的问题是去年,主题和tests_grade是r(sd)的来源。我想为每年,主题和tests_grade创建一个变量std_test_score1-20。

1 个答案:

答案 0 :(得分:2)

可以通过

一次为多个组生成平均值和标准差
bysort year subject tested_grade : egen mean_test_score = mean(test_score) 
by year subject tested_grade: egen sd_test_score = sd(test_score) 
gen std_test_score = (test_score - mean_test_score) / sd_test_score 

确实,egen有一个功能std()可以一步完成,但从更基本的原则重新创建基础通常是一个好主意。

您的代码省略了减法。

然而,正如评论中强调的那样,(值 - 均值)/ SD是异常值的不良标准,因为异常值本身会影响均值和标准差。这就是为什么,例如,箱形图基于中位数,四分位数和(通常)点,而不是距离较近四分位数的那么多四分位数范围。