本期解答人:王群勇 赵梦阳 吴松彬
问:Stata中系统GMM模型的稳健性检验和Stata命令 答: 模型的稳健性检验可以分为两种,一种是计量方法的稳健性检验,一种是计量数据的稳健性检验。 前者通常适用于所使用的计量方法比较新颖的研究,通常做法就是换计量方法,换一种相对可靠的计量方法。如果是面板数据的话,可用GMM进行稳健性检验(因为GMM不需要满足经典计量假设)。 后者通常适用于一般性地研究,通常的做法就是换数据。主要有以下几种方法换数据:1.蒙特卡洛或者拔靴(Bootstrapping),生成新数据或重复取样;2.把原来的样本分组,比如按地区东南西北中分组、按发达国家发展中国家分组、按大中小分组,分别回归;3.重新取样。 稳健性检验最起码需要保证的是:稳健性检验回归系数的正负号要和原研究回归系数的正负号相同。
问:工企库中邮编的位置是红色字体,经过sort ,drop 等命令后,去掉了一些异常值,但destring时仍显示“zipcode contains nonnumeric characters; no replace”,因为有200万+条数据 答:
net install asciiplot, from(http://fmwww.bc.edu/RePEc/bocode/a) replace
asciiplot
gen tempvar = postcode
forvalues i = 0/47 {
local char=uchar(`i")
replace tempvar = subinstr(tempvar,`"`char""","",.)
}
forvalues i = 58/255 {
local char=uchar(`i")
replace tempvar = subinstr(tempvar,"`char"","",.)
}
这个问题我需要两个命令即可完成,即 subinstr和 asciiplot。
subinstr用于删除0-9以外的字符。
asciiplot是ASCII编码表,其中48-57为0-9的编码。这里需要特别注意的是,Stata15中需要使用 uchar()才能显示128-255的字符。同时,引号 "的编码为34,所以在 subinstr命令中使用 `""""才可以剔除引号。
问:上市公司的数据,以每年每行业进行分组,求各组在剔除掉本企业的其他企业的标准差 答:
webuse "grunfeld.dta", clear
egen id=group(year)
*egen id=group(industry year)
gen tempvar=.
gen invest_sd=.
qui forvalues i=1/200 {
replace tempvar=invest
replace tempvar=. in `i"
sum tempvar if id==id[`i"]
replace invest_sd=r(sd) in `i"
}
drop tempvar id
第一步,生成分组变量id。 第二步,生成临时变量tempvar和标准差变量investsd。 第三步,执行循环。首先,替换掉第i行数据;其次,用sum进行本企业所在分组的统计;最后,用r(sd)替换investsd变量第i行的数据。 第四步,删除多余变量。
问:在数据筛选的时候很多论文会剔除样本期间新上市和退市的公司,这样做是为了保持面板数据的平衡么?还有不这样做的话结果影响很大么?
答:退市是财务不行,影响实证结果;新上市是可能存在财务美化,使得部分指标过高