我希望得到一个包含两列A和B的表,而不是传统的回归输出。列A包含一个回归列表,列B包含它们相同的影响:
b_hat(x) / sigma(x)
其中b_hat(x)是由于x中的1个单位变化而对因变量的边际效应,而sigma(x)是x的标准偏差。
如果列表按影响排序,那就太棒了。
答案 0 :(得分:0)
这是一种做你想做的事情的直率方式。你可以得到这个想法&用它来编写某种自定义程序来做这样的事情。这真的非常粗糙,所以我将欣赏评论,使其更清洁或更强大。现在它对相当小的事情非常敏感。
tempfile temp
sysuse auto, clear
local set "headroom trunk length turn displacement "
foreach var of varlist `set' {
egen `var'_std=std(`var')
}
local set "headroom_std trunk_std length_std turn_std displacement_std "
reg mpg `set'
preserve
mat A=e(b)
clear
set obs 1
g name = "`set'"+"cons"
split name,p(" ")
drop name
g index=_n
reshape long name,i(index) j(num) string
save `temp'
clear
svmat A
g index=_n
reshape long A,i(index) j(num)
tostring num, replace
merge 1:1 num using `temp', nogen assert(3)
drop if name=="cons"
gsort -A
replace num=string(_n)
keep num name index
reshape wide name,i(index) j(num) string
egen ordered=concat(name1-name5),p(" ")
local set2 =ordered[1]
dis "`set'"
dis "`set2'"
restore
reg mpg `set2'
答案 1 :(得分:0)
这是一种只输入一次变量名称的方法。它使用来自SSC的Ben Jann的MOREMATA包中的-mm_ranks-命令,并将排序后的结果放入新的Stata数据集中。
sysuse auto, clear
local lhs turn
local rhs length foreign weight
putmata a = (`rhs'), view replace
mata: st_matrix("sd",sqrt(diagonal(variance(a))))
reg `lhs' `rhs'
matrix b = r(table)'
matrix b = b[1..rowsof(b)-1,1]
mata: c = abs(st_matrix("b"):/st_matrix("sd"))
mata: rank = rows(c):-mm_ranks(c):+1 /* SSC package MOREMATA */
mata: st_matrix("n",(c,rank))
mat n = (b, sd, n)
mat colnames n = beta sd impact rank
clear
svmat n , names(col)
tempfile t1
save `t1'
clear
mat np = n'
svmat np, names(col)
keep in 1
xpose, varname clear
keep _varname
qui merge 1:1 _n using `t1'
drop _merge
sort rank
list