删除 Stata 中具有较大标准化残差的异常值

Remove outliers with large standardized residuals in Stata

我 运行 在 Stata 中对两个子样本进行简单回归,之后我想排除所有标准化残差大于 3.0 的观测值。我试过了:

regress y x if subsample_criteria==1
gen st_res1=e(rsta)
regress y x if subsample_criteria==0
gen st_res2=e(rsta)
drop if st_res1 | st_res2 > 3.0

但是,新变量充满了缺失值和支架值。残差不存储在变量 st_res1 和 st_res2 中。

感谢任何提示!

你的代码的问题是 Stata 不知道 e(rsta) 是什么(我也不知道),所以它造成了一个缺失,Stata 认为这是一个非常大的正数。所有缺失均大于 3,因此您的约束不绑定。

忽略这样做的统计优点,这是一种方法:

sysuse auto, clear
reg price mpg 
predict ehat, rstandard
reg price mpg if abs(ehat)<3

请注意,我使用的是残差的绝对值,我认为这里更有意义。

首先,提供 MCVE 始终是良好的第一步(考虑到 Stata 的 sysusewebuse 命令,这相当容易)。现在,进入正题。

请参阅 help regress postestimationhelp predict 以了解使用残差等生成新变量的正确语法。该语法与 gen 命令有点不同,如下所示.

另请注意,您的 drop if 条件格式不正确,现在被解释为 drop if st_res1 != 0 | st_res2 > 3.0。 (我还假设您想删除小于 -3.0 的标准化残差,但如果这不正确,您可以删除 abs() 函数。)

sysuse auto , clear
replace mpg = 10000 in 1/2
replace mpg = 0.0001 in 70

reg mpg weight if foreign
predict rst_for , rstandard

reg mpg weight if !foreign
predict rst_dom , rstandard

drop if abs(rst_for) > 3.0 | abs(rst_dom) > 3.0

后记: 请注意,您还可以考虑将 if e(sample) 添加到 predict 命令中,具体取决于您是否希望推断子样本的结果对整个样本进行回归并评估 所有 残差,或者您是否只想删除基于样本内标准化残差的观察值。