如何解决从 Stata 中的 e(b) 和 e(V) 中删除省略变量的参数 未省略系数的结果非遗漏方差/协方差的结果
我想从 e(b)
和 e(V)
矩阵中删除省略变量的参数(等于 0),但要以编程方式删除,因为这个小例程位于更大的程序中。您可以在 Statalist here 的交叉发布问题中查看为什么我想要这样做的完整说明。
例如,想象以下情况。
clear all
sysuse auto,replace
version 12
tempvar constant
gen `constant' = 1
reg price mp mp `constant',nocons
matrix V = e(V)
mat li V
symmetric V[3,3]
o.
mpg mpg __000000
mpg 2817.1347
o.mpg 0 0
__000000 -59997.356 0 1370802.5
下面你会看到我想要的输出。无论变量的名称或省略的变量数量如何,该解决方案都应该有效。
symmetric V_non_omitted[2,2]
mpg __000000
mpg 2817.1347
__000000 -59997.356 1370802.5
谢谢
解决方法
嗯……这令人惊讶地乏味。无论如何,这是一个解决方案。-
开始于:
def ipconversion4to6(ipv4_address):
hex_number = ["{:02x}".format(int(_)) for _ in address.split(".")]
ipv4 = "".join(hex_number)
ipv6 = "2002:"+ipv4[:4]+":"+ipv4[4:]+"::"
return ipv6
第一:clear all
sysuse auto,replace
version 12
tempvar constant
gen `constant' = 1
reg price mp mp mp `constant',nocons
的解决方案。
e(b)
未省略系数的结果。
*First for e(b)
mat b = e(b)
mat li e(b)
*Extracting the full_name of the columns
local colfullnames_b: colnames b
di "`colfullnames_b'"
* Keeping only coefficients of non-omitted variables
foreach i in `colfullnames_b' {
local first_two = substr("`i'",1,2)
if "`first_two'" != "o."{
local non_omitted `non_omitted' `i'
}
}
di "`non_omitted'"
*Getting the row name of the e(b) object
local rownames_b: rownames b
di "`rownames_b'"
* Getting the number of non-omitted variables
local n_non_omitted : word count `non_omitted'
di "`n_non_omitted'"
* Getting the column equations
local coleq: coleq b
di "`coleq'"
* setting counter for indexing purposes
local counter = 1
*generating a matrix to store the parameters
matrix b_non_omitted = J(1,`n_non_omitted',.)
foreach i in `non_omitted' {
local col_var_i = colnumb(b,"`i'")
di "`col_var_i'"
matrix b_non_omitted[1,`counter'] = b[1,`col_var_i']
local counter=`counter'+1
}
matrix colnames b_non_omitted = `non_omitted'
matrix rownames b_non_omitted = `rownames_b'
mat li b_non_omitted
第二:mat li b
#b[1,4]
# o. o.
# mpg mpg mpg __000000
#y1 -238.89435 0 0 11253.061
# b_non_omitted[1,2]
# mpg __000000
# y1 -238.89435 11253.061
的解决方案。
e(V)
非遗漏方差/协方差的结果。
*Second for e(V)
mat V = e(V)
mat li V
matrix V_non_omitted = J(`n_non_omitted',.)
* Here I am recoverin all the var-covar of the non-omitted variables
loc counter_i = 1
foreach i in `non_omitted' {
loc counter_j = 1
foreach j in `non_omitted' {
local col_var_j = colnumb(V,"`j'")
local row_var_i = rownumb(V,"`i'")
di "`col_var_j'"
matrix V_non_omitted[`counter_i',`counter_j'] = V[`row_var_i',`col_var_j']
local counter_j = `counter_j' + 1
}
local counter_i=`counter_i' + 1
}
*Column and row names are the same as e(b)
matrix colnames V_non_omitted = `non_omitted'
matrix rownames V_non_omitted = `non_omitted'
mat li V
Ps:仍然愿意接受更好(更短)的答案。也许是这种风格:
#symmetric V[4,4]
# o. o.
# mpg mpg mpg __000000
# mpg 2817.1347
# o.mpg 0 0
# o.mpg 0 0 0
#__000000 -59997.356 0 0 1370802.5
mat li V_non_omitted
#symmetric V_non_omitted[2,2]
# mpg __000000
# mpg 2817.1347
#__000000 -59997.356 1370802.5
左右...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。