手把手教你用Stata的OP方法计算上市公司TFP(附2003-2022年完整数据与代码)

张开发
2026/4/17 10:48:54 15 分钟阅读

分享文章

手把手教你用Stata的OP方法计算上市公司TFP(附2003-2022年完整数据与代码)
手把手教你用Stata的OP方法计算上市公司TFP附2003-2022年完整数据与代码在实证经济学研究中全要素生产率TFP作为衡量企业生产效率的核心指标一直是学术界和业界关注的焦点。Olley-PakesOP方法因其能够有效解决传统生产函数估计中的内生性问题成为当前主流的半参数估计技术。但对于刚接触Stata软件的研究生或分析师而言从理论理解到完整实现OP方法的全流程仍存在较高门槛。本文将用最直观的方式带你一步步完成从数据清洗到结果输出的完整过程。1. 环境准备与数据导入工欲善其事必先利其器。在开始正式分析前需要确保工作环境配置正确。建议使用Stata 15或以上版本内存分配不少于4GB以处理上市公司面板数据。首先创建项目文件夹建议采用以下结构TFP_Project/ ├── raw_data/ # 存放原始CSV/Excel文件 ├── cleaned_data/ # 处理后的.dta文件 ├── do_files/ # 分析脚本 └── results/ # 输出图表关键操作步骤将下载的2003-2022年上市公司数据通常为CSV格式放入raw_data文件夹启动Stata后首先设置工作路径cd /path/to/TFP_Project导入原始数据并转换为.dta格式import delimited raw_data/listed_companies.csv, clear save cleaned_data/base_data.dta, replace特别注意原始数据中常存在编码问题特别是中文字符的处理。若遇到乱码可尝试unicode encoding set gb18030 unicode translate raw_data/listed_companies.csv2. 数据清洗与变量构建高质量的数据处理是TFP计算的基础。我们需要按照经济学逻辑构建OP方法所需的各类变量同时处理现实数据中的常见问题。2.1 样本筛选标准参照证监会行业分类标准首先剔除金融类上市公司行业代码J开头的企业drop if substr(industry,1,1)J对于同时发行A股和B股的公司需执行排除bysort stkcd: egen has_b max(issuance_typeB) drop if has_b 1提示实际分析中还应检查是否存在关键变量缺失超过30%的观测值这类样本建议直接剔除以保证估计质量。2.2 核心变量构建OP方法需要明确定义以下变量类型产出变量(Y)用营业收入替代工业增加值劳动投入(L)员工人数或支付给职工的现金资本投入(K)固定资产净值投资变量(I)购建固定资产等支付的现金具体构建命令示例gen Y revenue / 10000 // 转换为万元单位 gen L employee_num gen K fixed_assets_net / 10000 gen I invest_cash / 10000经验分享资本存量计算存在多种方法对于上市公司数据固定资产净值是较稳妥的选择。若研究制造业企业也可考虑使用永续盘存法重构资本存量。2.3 虚拟变量生成OP方法需要控制行业、年份、地区等固定效应tabulate year, gen(year_) tabulate province, gen(reg_) tabulate industry, gen(ind_)出口状态虚拟变量构建逻辑gen EX (export_revenue 0 !missing(export_revenue))3. OP方法的三阶段实现理解OP方法的经济学原理至关重要。该方法通过投资函数反演生产率冲击解决了传统方法中的同时性偏差问题。下面分步骤展示Stata实现细节。3.1 第一阶段多项式逼近此阶段通过投资与资本的关系识别生产率冲击gen lnY ln(Y) gen lnL ln(L) gen lnK ln(K) gen lnI ln(I 1) // 加1处理零投资 polyserial lnI lnK age, degree(3) nointeract predict phi, xb常见报错处理若出现no observations错误检查是否有缺失值missings report lnY lnL lnK lnI多项式阶数选择可通过BIC准则确定通常3阶已足够3.2 第二阶段生存概率估计构建企业退出变量后用Probit模型估计生存概率gen exit (statusST | status*ST | statusPT) probit exit L.K phi predict survival_p, pr注意退出标准可根据研究需要调整比如加入退市判断条件3.3 第三阶段非线性最小二乘最终的生产函数估计需要编写自定义程序nl (lnY {b0} {bl}*lnL {bk}*lnK {g}*phi {h}*survival_p), /// initial(b0 0.5 bl 0.6 bk 0.4 g 0.8 h -0.2)调试技巧初始值设置对收敛至关重要。可先用OLS估计获得近似值reg lnY lnL lnK phi survival_p4. 结果解读与稳健性检验完成估计后需要系统评估结果的经济意义和统计可靠性。4.1 关键参数分析生产函数系数应满足以下经济学合理性劳动弹性(βₗ)通常在0.4-0.7之间资本弹性(βₖ)一般低于劳动弹性两者之和反映规模报酬特性查看估计结果的命令estat vce nlcom (returns_to_scale: _b[lnL] _b[lnK])4.2 稳健性检验策略为确保结果可靠建议进行以下检验检验类型实施方法预期结果变量替代用支付职工现金替代员工人数系数方向一致样本筛选剔除ST公司核心系数变化15%多项式阶数调整尝试2阶和4阶多项式生产率排序高度相关4.3 TFP计算与导出最终TFP通过残差计算predict tfp_op, residuals label variable tfp_op OP方法估计的TFP结果保存与可视化outsheet stkcd year tfp_op using results/tfp_results.csv, comma replace twoway (line tfp_op year if stkcd000001), title(平安银行TFP趋势)5. 实战中的疑难解答在实际操作中研究者常遇到以下典型问题问题1投资变量存在大量零值解决方案采用ln(I c)变换其中c为最小非零投资的1%经济解释反映企业存在投资调整成本问题2非线性估计不收敛检查步骤确认初始值合理性增加迭代次数nl ..., iterate(100)尝试其他算法technique(bhhh)问题3行业虚拟变量过多处理方案recode industry (1/51)(6/102)(11/153)(else4), gen(ind4) tabulate ind4, gen(ind_)个人经验在运行大规模样本时建议分行业进行估计后再合并结果既能提高效率又能观察行业异质性。记得在do文件中使用preserve/restore保存中间状态。

更多文章