回归循环和存储系数

Regression loop and store coefficients

我打算 (1) 多次循环回归某个标准; (2) 存储每个回归的某个系数。这是一个例子:

clear
sysuse auto.dta
local x = 2000
while `x' < 5000 {
      xi: regress price mpg length gear_ratio i.foreign if weight < `x'
      est sto model_`x'
      local x = `x' + 100
}
est dir

我只关心一个预测变量,在这里说mpg。我想从每个结果中提取 mpg 的系数到一个独立的文件中(任何文件都可以, .dta 会很棒)看是否有随着 weight 阈值增加的趋势.我现在做的是使用estout导出结果,比如:

esttab * using test.rtf, replace se stats(r2_a N,  labels(R-squared)) starl(* 0.10 ** 0.05 *** 0.01) nogap onecell title(regression tables)

estout 将导出所有内容,我需要编辑结果。这适用于预测变量很少的回归,但我的真实数据集有 30 多个变量,回归将至少循环 100 次(我有一个变量 Distance,范围从 0 到 30,000:它具有 weight 在示例中)。因此,我真的很难不出错地编辑结果。

还有其他有效的方法可以解决我的问题吗?由于我的案例不是循环遍历组变量,而是循环遍历某个标准。 statsby 函数在这里似乎不能正常工作。

我建议您查看 help postfile 以了解如何汇总结果的示例。我同意 statsby 可能不是最好的方法。在 price 上评估 mpgweight 之间的交互可能有助于解决看似经典的交互问题。

正如@Todd 已经建议的那样,您可以只选择您关心的特定结果并使用 postfile 将它们作为新变量存储在新数据集中。请注意,forval 循环比您的 while 代码更直接,而在最新版本的 Stata 中,使用 xi: 已被因子变量表示法取代。 (我没有改变它,以防万一你使用的是一些旧版本。)注意对保存的结果的评估,例如 _b[_cons] 的动态和使用括号 () 来停止评估负号。其他地方的一些代码示例将结果临时存储在本地宏或标量中,这是完全没有必要的。

sysuse auto.dta, clear 
tempname myresults 
postfile `myresults' threshold intercept gradient se using myresults.dta 
quietly forval x = 2000(200)4800 {
    xi: regress price mpg length gear_ratio i.foreign if weight < `x'
    post `myresults' (`x') (`=_b[_cons]') (`=_b[mpg]') (`=_se[mpg]') 
}
postclose `myresults' 
use myresults 
list 

     +---------------------------------------------+
     | thresh~d   intercept    gradient         se |
     |---------------------------------------------|
  1. |     2000    -3699.55   -296.8218   215.0348 |
  2. |     2200   -4175.722   -53.19774   54.51251 |
  3. |     2400   -3918.388   -58.83933   42.19707 |
  4. |     2600   -6143.622   -58.20153   38.28178 |
  5. |     2800   -11159.67   -49.21381   44.82019 |
     |---------------------------------------------|
  6. |     3000   -6636.524   -51.28141   52.96473 |
  7. |     3200   -7410.392   -58.14692   60.55182 |
  8. |     3400   -2193.125   -57.89508   52.78178 |
  9. |     3600   -1824.281   -103.4387   56.49762 |
 10. |     3800   -1192.767   -110.9302    51.6335 |
     |---------------------------------------------|
 11. |     4000     5649.41   -173.9975   74.51212 |
 12. |     4200    5784.363   -147.4454   71.89362 |
 13. |     4400     6494.47   -93.81158   80.81586 |
 14. |     4600     6494.47   -93.81158   80.81586 |
 15. |     4800    5373.041   -95.25342   82.60246 |
     +---------------------------------------------+

statsby(一个命令,不是一个函数)根本就不是为这个问题设计的,所以不是能不能用的问题。