1

我将(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功能在这里似乎无法正常工作。

4

2 回答 2

2

正如@Todd 已经建议的那样,您可以选择您关心的特定结果postfile并将它们作为新变量存储在新数据集中。请注意,forval循环比您的while代码更直接,而xi:在最新版本的 Stata 中使用被因子变量表示法取代。(我没有改变这一点,以防万一您使用的是旧版本。)请注意对保存结果的评估,例如_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(一个命令,而不是一个函数)根本不是为这个问题设计的,所以这不是它是否有效的问题。

于 2015-11-24T08:36:20.297 回答
1

我建议您查看help postfile如何汇总结果的示例。我同意这statsby可能不是最好的方法。mpg评估两者之间weight的相互作用price可能有助于解决看似经典的相互作用问题。

于 2015-11-24T02:46:26.713 回答