是否有一种简单的方法可以通过它们在Stata中产生的影响来对回归量进行排序?

时间:2013-11-21 21:44:48

标签: output regression stata

我希望得到一个包含两列A和B的表,而不是传统的回归输出。列A包含一个回归列表,列B包含它们相同的影响:

b_hat(x) / sigma(x)

其中b_hat(x)是由于x中的1个单位变化而对因变量的边际效应,而sigma(x)是x的标准偏差。

如果列表按影响排序,那就太棒了。

2 个答案:

答案 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