在 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
的低级版本)。仅当回归量正交时,将效应归因于变量才有意义,这仅在精心设计和进行的实验中发生。