gpt4 book ai didi

loops - 在 Stata 中附加本地宏

转载 作者:行者123 更新时间:2023-12-04 03:12:31 27 4
gpt4 key购买 nike

在 Stata 中,我想探索具有不同因变量和自变量的多种组合的回归。

为此,我决定使用一个循环来完成所有这些回归,然后以简洁方便的形式将相关结果(系数、R2 等)保存在矩阵中。

对于这个矩阵,我想命名行和列以便于阅读。

到目前为止,这是我的代码:

clear
sysuse auto.dta
set more off

scalar i = 1

foreach v in price mpg {
foreach w in weight length {

quietly: reg `v' `w' foreign

local result_`v'_`w'_b = _b[`w']
local result_`v'_`w'_t = ( _b[`w'] / _se[`w'] )
local result_`v'_`w'_r2 = e(r2)

if scalar(i) == 1 {
mat A = `result_`v'_`w'_b', `result_`v'_`w'_t', `result_`v'_`w'_r2'
local rownms: var label `v'
}
if i > 1 {
mat A = A \ [`result_`v'_`w'_b', `result_`v'_`w'_t', `result_`v'_`w'_r2']
*local rownms: `rownms' "var label `v'"
}

scalar i = i+1

}
}

mat coln A = b t r2
mat rown A = `rownms'

matrix list A

它将给出如下所示的结果矩阵 A:

. matrix list A

A[4,3]
b t r2
Price 3.3207368 8.3882744 .4989396
Price 90.212391 5.6974982 .31538316
Price -.00658789 -10.340218 .66270291
Price -.22001836 -9.7510366 .63866239

显然,还有一些事情还没有完全完成。矩阵的行名称应该是“price, price, mpg, mpg”,因为这是四个回归中的因变量。

在上面的代码中,考虑现在被注释掉的行

*local rownms: `rownms' "var label `v'"

它被注释掉了,因为在当前的形式中,它给出了一个错误。

我希望在每次迭代时将变量的标签(或名称)附加到本地宏 rownms,生成 Price Price Mileage (MPG) Mileage (MPG) .

但我似乎无法正确地为宏附加当前变量的标签。

最佳答案

矩阵的行名和列名在它们可以容纳的范围内是有限的。一般来说,变量标签不是很合适。

这是一些更简单的代码。

sysuse auto.dta, clear 

matrix drop A
local rownms

foreach v in price mpg {
foreach w in weight length {
quietly: reg `v' `w' foreign
mat A = nullmat(A) \ (_b[`w'], _b[`w']/_se[`w'], e(r2))
local rownms `rownms' `v':`w'
}
}

mat coln A = b t r2
mat rown A = `rownms'

matrix list A

注意事项:

  1. nullmat() 技巧消除了在第一次和以后运行时对代码分支的需要。

  2. 不需要将结果放入local,然后再取出。要改掉这个习惯,请想想这个类比。你手里拿着一支笔。你把它放在一个盒子里。你再拿出来。现在你手里拿着一支笔。如果你不需要,为什么要做盒子的事情?

这适用于您的示例,但结果不是很好。

 local rownms `rownms' "`: var label `v''" 

关于loops - 在 Stata 中附加本地宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43914960/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com