在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,degra]是无效的语法。奇怪的是,Stata确实承认display X[1, precip]
。如果不是precip
我使用了precip
向量中出现X
的列号,Stata会知道我要做什么。如果我只是做了一次这个操作,没问题。但是我需要多次执行此操作(针对几种不同的模型规范)以及将一个模型中的位置从一个模型更改为下一个模型的几个变量,因此我不能只使用列号。
答案 0 :(得分:2)
我还不确定我到底知道你想做什么,但这是我尝试重现你正在做的事情:
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
的低级版本。将效果归因于变量只有在回归量正交时才有意义,这只有在经过精心设计和实施的实验中才会发生。