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

Matrix 在Stata中,如何按名称操作矩阵元素?,matrix,linear-algebra,matrix-multiplication,stata,Matrix,Linear Algebra,Matrix Multiplication,Stata,在Stata中,经过回归后,我知道可以按名称调用存储结果的元素。例如,如果我想操作变量precip上的系数,我只需键入\u b[precip]。我的问题是,在执行tabstat命令之后,如何执行相同的操作?例如,假设我想将precip上的系数乘以precip的样本平均值: reg --variables in regression-- tabstat --variables in regression-- mat X=r(StatTotal) mat Y=_b[p

在Stata中,经过回归后,我知道可以按名称调用存储结果的元素。例如,如果我想操作变量
precip
上的系数,我只需键入
\u 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]是无效语法。奇怪的是,Stata确实识别出
显示X[1,precip]
。如果我不使用
precip
而是使用
precip
出现在
X
向量中的列号,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 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内存中的(全局)矩阵进行操作;大多数时候,这是一个坏主意,因为程序应该只使用本地对象进行操作


我怀疑您想要做的是通过一种或另一种方式,通过全能的
边距
命令,或者通过适当的
预测
,或者通过
矩阵分数
(这是
预测
的低级版本)来解决。只有当你的回归系数是正交的时,将影响归因于变量才有意义,这只发生在精心设计和进行的实验中。

请用完整的变量名称发布你的问题,从
sysuse auto
开始,然后是类似
回归价格mpg外国重量
,这样每个人都在同一个波长上
tabstat
是一个非常肤浅的命令,尽管这可能是个人偏好的问题。