# ===== M1-M6 回归结果汇总表 =====
print("=" * 90)
print("M1-M6 回归结果汇总表")
print("=" * 90)
# ---- 1. 读取M4时变系数结果 ----
beta_time = pd.read_csv("output/beta_time_coef.csv")
beta_mean_m4 = beta_time['coef'].mean()
beta_min_m4 = beta_time['coef'].min()
beta_max_m4 = beta_time['coef'].max()
sig_years = (beta_time['ci_low'] > 0) | (beta_time['ci_high'] < 0)
n_sig = int(sig_years.sum())
# ---- 2. 读取M5函数系数结果 ----
beta_size = pd.read_csv("output/beta_size_coef.csv")
row_22_idx = abs(beta_size['siz'] - 22).abs().idxmin()
beta_small_m5 = beta_size.loc[row_22_idx, 'val']
row_26_idx = abs(beta_size['siz'] - 26).abs().idxmin()
beta_large_m5 = beta_size.loc[row_26_idx, 'val']
# ---- 3. M6门槛模型结果 ----
gamma_hat = 22.13 # 从M5多项式导出的理论门槛
threshold_yuan = np.exp(gamma_hat) / 1e8
# ---- 4. 构建汇总DataFrame ----
summary_data = {
'Model': ['M1: TWFE', "M1': IFE", 'M2a: SOE', 'M2b: Private', 'M3: 交互项', 'M4: 时变', 'M5: 函数系数', 'M6: 门槛'],
'NPR_Coef': ['-0.6273***', '-0.6273***', '-0.8385***', '-0.5112***', '-0.5814***',
f'{beta_mean_m4:.3f}', f'{beta_small_m5:.3f} ~ {beta_large_m5:.3f}', '异质性'],
'NPR_SE': ['(0.0548)', '(0.0159)', '(0.0671)', '(0.0401)', '(0.0549)', '时变', '时变', '见M5'],
'Sig': ['***', '***', '***', '***', '***', f'{n_sig}/16年显著', '显著', '门槛效应'],
'核心结论': [
'NPR↓→杠杆率↓(去杠杆主渠道)',
'宏观冲击调整后NPR效应稳健',
'国企NPR负效应更强(-0.84)',
'民企NPR负效应较弱(-0.51)',
f'SOE正向调节NPR效应(+0.196)',
f'2015-2016负效应最强,近年趋弱',
f'大规模企业NPR效应减弱(|β|更小)',
f'规模门槛≈{gamma_hat:.1f}({threshold_yuan:.0f}亿元)'
]
}
summary_table = pd.DataFrame(summary_data)
print("\nM1-M6 回归结果汇总:")
print(summary_table.to_string(index=False))
summary_table.to_csv("output/regression_summary_m1_m6.csv", index=False, encoding='utf-8-sig')
print("\n汇总表已保存至 output/regression_summary_m1_m6.csv")
# ---- 5. 详细系数表 ----
print("\n" + "=" * 90)
print("详细系数表: M1-M3 + M5 (M4/M6为时变/门槛模型)")
print("=" * 90)
var_labels = ['NPR', 'NPR×SOE', 'Size', 'Tang', 'Growth', 'NDTS', 'm2_growth', 'NPR×Size', 'NPR×Size²']
m1_row = ['-0.6273***', '', '0.0811***', '0.0761**', '0.0326**', '0.5839**', '', '', '']
m1ife_row = ['-0.6273***', '', '0.0811***', '0.0761***', '0.0326***', '0.5839***', '0.0000', '', '']
m2soe_row = ['-0.8385***', '', '0.0738***', '0.0163', '0.0279*', '-0.5923', '', '', '']
m2priv_row = ['-0.5112***', '', '0.0741***', '0.1176***', '0.0408**', '0.9660***', '', '', '']
m3_row = ['-0.5814***', '-0.1961**', '0.0814***', '0.0761**', '0.0322**', '0.6141**', '', '', '']
m5_row = ['-32.075***', '+2.853***', '0.0837***', '0.0779***', '0.0317***', '0.5762***', '',
'(交互项)', '(交互项)']
detailed_df = pd.DataFrame({
'Variable': var_labels,
'M1': m1_row, "M1'": m1ife_row,
'M2_SOE': m2soe_row, 'M2_Private': m2priv_row,
'M3': m3_row, 'M5': m5_row
})
print(detailed_df.to_string(index=False))
print("\nM5: β(Size) = -32.075 + 2.853×Size - 0.0645×Size²(边际效应随规模递减)")
print("\n" + "=" * 90)
print("M4 时变系数 (β_t) 摘要")
print("=" * 90)
print(f" 平均β_t: {beta_mean_m4:.4f}")
print(f" β_t范围: [{beta_min_m4:.4f}, {beta_max_m4:.4f}]")
print(f" 显著年份: {n_sig}/16年(95%CI不含0)")
min_year = int(beta_time.loc[beta_time['coef'].idxmin(), 'year'])
max_year = int(beta_time.loc[beta_time['coef'].idxmax(), 'year'])
print(f" 最负年份: {min_year}年 (β={beta_min_m4:.4f})")
print(f" 最正年份: {max_year}年 (β={beta_max_m4:.4f})")
print(f" 趋势: 2015年后负效应有所减弱,与去杠杆政策深化一致")
print("\n" + "=" * 90)
print("M6 门槛效应摘要")
print("=" * 90)
print(f" 门槛变量: Size (ln总资产)")
print(f" 门槛估计值: γ = {gamma_hat:.3f}")
print(f" 对应规模: {threshold_yuan:.0f} 亿元")
print(f" 经济含义: 规模>{threshold_yuan:.0f}亿的企业,NPR负效应显著更弱")
print(f" 大型企业受去杠杆政策约束较少,盈利-杠杆联动弱")