我在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中。
我很感激任何提示!
答案 0 :(得分:3)
您的代码存在的问题是Stata不知道e(rsta)
是什么(我也不知道),因此它会创建一个缺失,Stata认为这是一个非常大的正数。所有缺失都大于3,因此您的约束不会受到约束。
忽略这样做的统计优点,这是一种方式:
sysuse auto, clear
reg price mpg
predict ehat, rstandard
reg price mpg if abs(ehat)<3
请注意,我使用残差的绝对值,我认为这在这里更有意义。
答案 1 :(得分:2)
首先,提供MCVE始终是一个很好的第一步(鉴于Stata的sysuse
和webuse
命令,相当容易)。现在,关于这个问题。
请参阅help regress postestimation
和help predict
,了解使用残差等生成新变量的正确语法。语法与gen
命令稍有不同,如下所示。< / p>
另请注意,您的drop if
条件格式不正确,现在被解释为drop if st_res1 != 0 | st_res2 > 3.0
。 (我还假设您要删除标准化残差&lt; -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
,具体取决于您是否希望将子样本回归的结果推断到整个样本并评估所有残差,或者您是否只希望根据样本内标准化残差丢弃观测值。