在 Stata 中,如何按名称操作矩阵元素



在 Stata 中,经过回归,我知道可以按名称调用存储结果的元素。 例如,如果我想操纵变量precip上的系数,我只需键入 _b[precip] 。 我的问题是如何在tabstat命令后执行相同的操作? 例如,假设我想将precip系数乘以precip的样本均值:

    reg --variables in regression--
    tabstat --variables in regression--
    mat X=r(StatTotal)
    mat Y=_b[precip]*X[1,precip]

啊,要是这么简单就好了。 但可惜的是,在最后一行 X[1, precip] 是无效的语法。 奇怪的是,斯塔塔确实认出了display X[1, precip]。 如果我使用precip出现在X向量中的列号而不是precip,Stata 就会知道我在做什么。 如果我只做一次此操作,没问题。 但是我需要多次执行此操作(对于几个不同的模型规范)以及从一个模型到下一个模型更改向量中位置的几个变量,所以我不能只使用列号。

我还不确定我是否确切地理解你想做什么,但这是我重现你正在做的事情的尝试:

    sysuse auto, clear
    regress price mpg foreign weight
    tabstat mpg foreign weight, save
    matrix X = r(StatTotal)
    matrix Y = _b[mpg]*X[1, colnumb(X, "mpg") ]

如果你需要把它放到一个循环中,这也是可行的:

    matrix bb = e(b)
    local explvar : colnames bb
    foreach x in `explvar' {
      if "`x'" != "_cons" {
        matrix Y_`x' = _b[`x'] * X[1, colnumb(X, "`x'")]
      }
      else {
        matrix Y_`x' = _b[`x']
      }
    }

您可能希望将其放入每次回归模型估计调用后调用的program中,例如:

    program define reg2mat , prefix( name )
      if "`e(cmd)'" != "regress" {
        // this will intentionally produce an error
        regress
      }
      tempname bb
      matrix `bb' = e(b)
      local explvar : colnames `bb'
      foreach x in `explvar' {
        if "`x'" != "_cons" {
          matrix `prefix'_`x' = _b[`x'] * X[1, colnumb(X, "`x'")]
        }
        else {
          matrix `prefix'_`x' = _b[`x']
        }
      }
    end // of reg2mat

在许多层面上,它并不理想,因为它使用Stata内存中的(全局)矩阵进行操作;大多数时候,这是一个坏主意,因为程序应该只对它们本地的对象进行操作。

我怀疑你想做的事情以一种或另一种方式解决,要么通过全能的margins命令,要么通过适当的predict,要么通过matrix score(这是predict的低级版本)。仅当回归量正交时,将效应归因于变量才有意义,这仅在精心设计和进行的实验中发生。

相关内容

  • 没有找到相关文章

最新更新