目录
一、写在前面
二、使用Python生成可变变量组合
三、Stata代码
四、更进一步-寻找中介效应的控制变量
一、写在前面
!!!!!!寻找让核心变量显著的控制变量组合!!!!!!!!!
①将控制变量分为固定变量与可变变量
②固定变量即每次迭代都存在的变量。
因为根据文献需要,通常有部分控制变量不可或缺;
以下图为例,贝塔、账面市值比 机构持股比例合计为固定变量,即固定变量每次必参与迭代
Beta_MC 账面市值比B 机构持股比例合计 托宾Q值C
Beta_MC 账面市值比B 机构持股比例合计 财务杠杆
Beta_MC 账面市值比B 机构持股比例合计 董事会规模
Beta_MC 账面市值比B 机构持股比例合计 ROA_A 前十大股东持股比例
Beta_MC 账面市值比B 机构持股比例合计 托宾Q值C 董事会规模
Beta_MC 账面市值比B 机构持股比例合计 财务杠杆 董事会规模
Beta_MC 账面市值比B 机构持股比例合计 董事会规模 公司规模
Beta_MC 账面市值比B 机构持股比例合计 ROA_A 前十大股东持股比例 财务杠杆
Beta_MC 账面市值比B 机构持股比例合计 ROA_A 前十大股东持股比例 董事会规模
Beta_MC 账面市值比B 机构持股比例合计 前十大股东持股比例 董事会规模 公司规模
③对可变变量进行随机组合。
n个可变变量就有2**n-1个组合,此时若将部分变量有依据的放至固定变量,也可以大大减少组合数
假如可变控制变量为"ROA_A","前十大股东持股比例","托宾Q值C","年换手率流通股数_log"
则可变变量组合有16种情况
//one
ROA_A
前十大股东持股比例
托宾Q值C
年换手率流通股数_log
//two
ROA_A,前十大股东持股比例
ROA_A,托宾Q值C
ROA_A,年换手率流通股数_log
前十大股东持股比例,托宾Q值C
前十大股东持股比例,年换手率流通股数_log
托宾Q值C,年换手率流通股数_log
//three
ROA_A,前十大股东持股比例,托宾Q值C
ROA_A,前十大股东持股比例,年换手率流通股数_log
ROA_A,托宾Q值C,年换手率流通股数_log
前十大股东持股比例,托宾Q值C,年换手率流通股数_log
//four
ROA_A,前十大股东持股比例,托宾Q值C,年换手率流通股数_log
二、使用Python生成可变变量组合
将print(result.replace(",/"," "))打印出来的内容复制到后面Stata代码里
import itertools
from itertools import combinationss = ["Beta_MC","账面市值比B","ROA_A","前十大股东持股比例","托宾Q值C","年换手率流通股数_log","财务杠杆","董事会规模","公司规模","机构持股比例合计","ANALYST"]result = ""
for myLen in range(len(s)):for eachTuple in list(combinations(s, myLen+1)):for each in eachTuple:result += eachresult += ","result += "/"print(result.replace(",/"," "))
三、Stata代码
Stata代码需要根据自己的模型来调整呀,被解释变量和解释变量得换成自己的,而且可能并不是使用双向固定效应模型,大家需要结合自己的实际情况修改一下Stata代码
此处以双向固定效应模型为例,被解释变量为股权融资成本GLS、核心解释变量为xApply
xtreg r_gls_1 xApply `varFixed' `eachVarList' i.year,fe r
Stata代码如下:
①varCombination粘贴Python代码生成的可变列表组合
②qui后按所需模型命令输入即可,
③各显著水准下T值为:1.65 10%、1.96 5%、2.76 1%
④if(_se[xApply] != 0 & abs(_b[xApply]/_se[xApply]) > 1.96 ) 记得修改!
clear
import excel "C:\Users\zsllsz\Desktop\实证\汇总-合并表格\panel.xlsx", sheet("Sheet1") firstrow
xtset stkcd year
winsor2 机构持股比例合计 ANALYST r_gls_1 Beta_MC Beta_TMV ROAResset ROA_A ROA_B ROEResset ROE_A ROE_B SYN分市场总市值平均法 SYN分市场流通市值平均法 SYN分市场等权平均法 SYN综合市场总市值平均法 SYN综合市场流通市值平均法 SYN综合市场等权平均法 r_oj_003 r_oj_005 r_oj_007 r_peg 公司规模 分市场年Beta值 前十大股东持股比例 年换手率流通股数_log 托宾Q值A 托宾Q值B 托宾Q值C 托宾Q值D 投资者情绪指数标准化剔除宏观经济因素 独立董事占比 第一大股东持股比率 综合市场年Beta值 董事会规模 董事长与总经理兼任情况 财务杠杆 账面市值比A 账面市值比B , replace cuts(1 99) trimlocal varFixed "Beta_MC 账面市值比B 机构持股比例合计 "
local varCombination "此处粘贴Python代码生成的可变列表组合"foreach eachVarList of local varCombination{local eachVarList:subinstr local eachVarList "," " ",allqui xtreg r_gls_1 xApply `varFixed' `eachVarList' i.year,fe rif(_se[xApply] != 0 & abs(_b[xApply]/_se[xApply]) > 1.96 ){display "`varFixed'" "`eachVarList'"}
}
结果:代码运行结束后会在Stata窗口显示符合条件的控制变量组合
四、更进一步-寻找中介效应的控制变量
参考《资产质量影响企业权益资本成本吗? - 中国知网》与温忠麟的中介效应的三步检验模型
此处:
股权融资成本GLS为被解释变量
xApply为核心解释变量
SYN分市场总市值平均法为中介变量
代码如下(运行后同样会把符合条件的控制变量打印出来):
clear
import excel "C:\Users\zsllsz\Desktop\实证\汇总-合并表格\panel.xlsx", sheet("Sheet1") firstrow
xtset stkcd year
winsor2 机构持股比例合计 ANALYST r_gls_1 Beta_MC Beta_TMV ROAResset ROA_A ROA_B ROEResset ROE_A ROE_B SYN分市场总市值平均法 SYN分市场流通市值平均法 SYN分市场等权平均法 SYN综合市场总市值平均法 SYN综合市场流通市值平均法 SYN综合市场等权平均法 r_oj_003 r_oj_005 r_oj_007 r_peg 公司规模 分市场年Beta值 前十大股东持股比例 年换手率流通股数_log 托宾Q值A 托宾Q值B 托宾Q值C 托宾Q值D 投资者情绪指数标准化剔除宏观经济因素 独立董事占比 第一大股东持股比率 综合市场年Beta值 董事会规模 董事长与总经理兼任情况 财务杠杆 账面市值比A 账面市值比B , replace cuts(1 99) trimlocal varFixed "Beta_MC 账面市值比B 机构持股比例合计 "
local varCombination "此处粘贴Python代码生成的可变列表组合"foreach eachVarList of local varCombination{local eachVarList:subinstr local eachVarList "," " ",allqui xtreg r_gls_1 xApply `varFixed' `eachVarList' i.year,fe rif(_se[xApply] != 0 & abs(_b[xApply]/_se[xApply]) > 1.96 ){qui xtreg SYN分市场总市值平均法 xApply `varFixed' `eachVarList' i.year,fe rif(_se[xApply] != 0 & abs(_b[xApply]/_se[xApply]) > 1.96){qui xtreg r_gls_1 SYN分市场总市值平均法 xApply `varFixed' `eachVarList' i.year,fe rif(_se[xApply] != 0 & abs(_b[xApply]/_se[xApply]) > 1.96 & abs(_b[SYN分市场总市值平均法]/_se[SYN分市场总市值平均法]) > 1.96){display in r "`varFixed'" "`eachVarList'"}}}
}