【问题标题】:Regression loop and store coefficients回归循环和存储系数
【发布时间】:2015-11-24 00:31:56
【问题描述】:

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

【问题讨论】:

    标签: loops regression stata coefficients


    【解决方案1】:

    正如@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(一个命令,而不是一个函数)根本就不是为这个问题设计的,所以这不是它是否有效的问题。

    【讨论】:

    • 非常感谢,尼克。有用。真正帮助我扩展我对使用 Stata 的理解。
    • 嗨,@尼克考克斯!我最近遇到了一个与您的回答有关的新情况。如果回归模型包含因子变量(例如上例中的外来变量)。如果我不使用 xi 但在模型中指示 i.foreign 。你知道怎么在postcommon中指定foreign factor变量的系数吗?我尝试使用 (=_b[i.foreign]) 、 (=_b[foreign]) 等。一切都不好。谢谢
    • 记录于 [U] 13.5.3。
    【解决方案2】:

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

    【讨论】:

    • 谢谢你,托德。我认为这两个变量的相互作用导致了另一个方面的问题。我需要提取这些系数的原因是我需要将它们绘制出来并可视化趋势。我将在这个问题上进行更多探索。不过还是谢谢。
    猜你喜欢
    • 2016-04-15
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多