本文又名《筛选 能让解释变量显著的 控制变量》
1、先是使用了gsreg
这个方法之前计量课没有学,是在b站找到的:【Stata】gsreg搭配reghdfe的高维固定效应筛选最优控制变量_哔哩哔哩_bilibili
基本格式是:gsreg 因变量 待筛选控制变量*n , fixvar( 解释变量) replace cmdest(回归函数) cmdoptions(回归函数的附加内容)
gsreg OFDI Return ROA Q PC Turnover Lev Size Analyst MV ROE SOE Age Cashratio MB , fixvar( financial institutional) replace cmdest(reghdfe) cmdoptions(absorb(i.year i.stkcd ) vce(cluster stkcd))
2、再使用了up“拿铁一定要加冰”自己开发的oneclick
具体可以看这个【Stata】一键显著OneClick4.0,兼容更多回归方式_哔哩哔哩_bilibili
视频的置顶评论有作者的公众号链接,解释原理和怎么用。
可惜也没跑出来,结果好像是没有筛选出来能用的
3、控制变量组合的筛选-tuples
最后看了连享会:Stata:控制变量组合的筛选-tuples| 连享会主页 (lianxh.cn)
——“ gsreg
难以配合 reghdfe
等命令进行使用 ” [摊手]
4、自己逐一尝试
最终还是得用这个老办法找,好处是可以满足自己的所有需求(包括系数符号、显著性)。得一个个试,可选择的控制变量多了之后,就需要排列组合好复制粘贴。
方法一:组合计算器【在线计算器: 组合生成器 (planetcalc.com)】
方法二:Python生成组合不可重复的排列组合【可重复、不可重复取组合生成器python代码 - 简书 (jianshu.com)】
def combinations(array,cSpace,index,m):
#不可重复取组合生成器
if(m==0):
for i in range(cSpace.__len__()):
print(cSpace[i],end='')
print(' ',end='')
return
for i in range(array.__len__()):
cSpace[index] = array[i];
if index==0:
combinations(array=array,cSpace=cSpace,index=index+1,m=m-1)
elif index>0:
cIndex=array.index(cSpace[index])
pIndex=array.index(cSpace[index-1])
if cIndex>pIndex:
combinations(array=array,cSpace=cSpace,index=index+1,m=m-1)
if __name__ == '__main__':
Tuple = ('Size','SOE','Lev','Return','Cashratio','MB','Age','ROA ','Q','PC','Turnover','Analyst','MV','ROE');
array=list(Tuple)#元素
m=3#所取元素个数
cSpace=list(range(m))
combinations(array=array,cSpace=cSpace,index=0,m=m)
print('')