1.数据处理
连续变量:缩尾处理(1%,99%) from scipy.stats.mstats import winsorize
win_ESG = winsorize(ESG, limits=[0.01, 0.01]) 虚拟变量:如处理年份2012-2020 nominal_year = pd.get_dummies(year)
nominal_year.drop(columns=[2020], axis=1, inplace=True)
nominal_year.columns = ['2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019'] 描述性统计 # 打乱顺序
shuffle_data = data.sample(frac=1)
print(shuffle_data.describe()) 相关性分析 # 皮尔逊相关性分析
data_corr = data.corr(method='pearson')
print(data_corr)
# 显著性检验
for i in range(0, len(data)):
for j in range(0, i + 1):
print('{}和{}的pearson系数和p值为:{}'.format(data.columns[i], data.columns[j], scipy.stats.pearsonr(data.iloc[:, i], data.iloc[:, j])))
j += 1
i += 1
2.多元回归分析
定义OLS模型 import statsmodels.formula.api as sm
# 因变量 ~ 自变量 + 控制变量
formulation = 'ESG_R ~ INS+Size+Age+Lev+Growth+ROA+PE+Radio+Balance+DR+MKTB+SGROW'
# 控制年份
for i in range(len(list(nominal_year.columns))):
formulation += '+Q("{}")'.format(nominal_year.columns[i])
# 控制行业
nominal_industry = pd.get_dummies(industry)
nominal_industry.drop(columns=[nominal_industry.columns[-1]], axis=1, inplace=True)
for i in range(len(list(nominal_industry.columns))):
formulation += '+Q("{}")'.format(nominal_industry.columns[i])
# OLS
lm = sm.ols(formulation, data=data)
model = lm.fit()
print(model.summary())
3.稳健性检验
替换因变量固定效应模型内生性检验:滞后因变量/PSM/Heckman两阶段法/工具变量法 # PSM
待补充
# Heckman两阶段法
model = ‘自变量 ~ 工具变量 + 控制变量’
# 第一步
probit_model = sm.probit(model, data)
print(result.summary())
result = probit_model.fit()
coef = result.params
# coef 为按照model中工具变量-控制变量的顺序对应的系数
# 计算imr=coef[0]+coef[1]*工具变量+coef[2]*控制变量+...
略
imr = pd.Dataframe(imr)
imr.columns = ['IMR']
data = pd.concat(objs=[data, imr], axis='columns')
# 第二步
model = ‘因变量 ~ 自变量+ IMR + 控制变量’
需要注意的是,在Heckman中,如果自变量是连续变量而非0-1变量,在进行第一步probit模型时,需要额外进行转换,例如可以根据中位数以上/以下转换为1/0。
4.中介机制研究
第一步:中介机制 ~ 自变量 + 控制变量
第二步:因变量 ~ 中介机制 + 自变量 + 控制变量
好文链接
发表评论