【OP方法实战】从数据清洗到结果解读:上市公司TFP的OP方法Stata实现全流程

发布时间:2026/6/26 17:09:32

【OP方法实战】从数据清洗到结果解读:上市公司TFP的OP方法Stata实现全流程 1. 数据准备与清洗构建高质量分析基础做TFP分析就像盖房子地基不牢地动山摇。我处理过上百家上市公司数据第一步永远是数据清洗。很多新手直接套用代码结果跑出来的TFP值离谱得能吓死人——不是负数就是天文数字原因八成出在原始数据上。先说说样本筛选。A股市场有个特点金融类公司的报表结构和其他行业完全不同ROE能差出十倍不止。我习惯用证监会行业分类标准直接剔除代码为J开头的公司银行、保险、证券等。还有个坑是AB股并存的公司这类企业常有汇率折算问题最好也剔除。实际操作时用Stata写个条件筛选就行drop if substr(industry,1,1)J // 剔除金融业 drop if B_shares1 // 剔除B股上市公司异常值处理我推荐三步法先看缺失值比例超过30%的变量直接放弃然后1%缩尾处理winsor2命令超好用最后人工核查极端值。有次我发现某公司固定资产净值居然是营收的1000倍查原始报表才发现是数据录入少了个小数点。2. 核心变量构造关键指标的标准化处理变量定义是OP方法的灵魂但教科书往往不说人话。我用最直白的语言解释Y产出理论上应该用工业增加值但上市公司不披露。实测发现用营业收入替代效果不错记得单位统一用万元。有个细节——营收要扣掉增值税否则会高估。L劳动投入员工人数是最常用指标但存在季节性波动。我更喜欢用支付给职工的现金除以行业平均工资这样能反映实际劳动成本。代码示例gen L employee_payment / industry_avg_wageK资本存量固定资产净值要永续盘存法调整。我常用的折旧率是9.6%参照张军等学者的参数具体公式gen K net_fixed_assets * (1 - 0.096)^(current_year - establish_year)代理变量投资额(I)的计算最易出错。很多人直接用现金流量表的购建固定资产支出其实还要加上无形资产和长期资产投资。更严谨的写法gen I fixed_asset_invest intangible_invest longterm_asset_invest replace I 0 if missing(I) // 缺失值补零3. OP方法实现Stata代码逐行解析OP方法本质是个黑箱但拆开看就三部分3.1 第一步生存概率估计这步要预测企业存活概率用probit模型。关键在exit变量的定义——我建议综合ST状态和退市标志gen exit (ST_status1 | delist_flag1) probit exit L.lnK L.age i.year i.reg i.ind predict survival_prob, pr3.2 第二步投资方程估计代理变量和状态变量的交互是重点。我习惯加入行业时间趋势项控制技术冲击reg lnI c.lnK##c.age i.year##i.ind EX predict fitted_I, xb3.3 第三步生产函数估计最后用非线性最小二乘法(NLS)估计系数。注意这里要包含第一步的生存概率nl (lnY {_b[lnL]}*lnL {_b[lnK]}*lnK {_b[age]}*age /// {_b[EX]}*EX {phi}*fitted_I {rho}*survival_prob), /// initial(_b[lnL] 0.6 _b[lnK] 0.4 _b[age] 0.01 _b[EX] 0.02 phi 0.1 rho 0.05)跑完这三步TFP就是残差项。建议保存结果时标注清楚predict tfp_op, residuals label variable tfp_op TFP estimated by OP method4. 结果验证与解读从数字到经济含义算出TFP值只是开始验证合理性更重要。我常用的诊断方法描述性统计检查正常TFP均值在0附近标准差0.3-0.8。如果出现均值-5、标准差10肯定是哪里出错了。行业对比制造业TFP通常低于高科技行业。可以用简单分组统计验证tabstat tfp_op, by(ind) stat(mean sd)时间趋势正常情况下TFP应该缓慢上升。如果某年突然暴跌可能是数据问题或需要加入特殊年份虚拟变量。解读TFP差异时别忘了控制企业特征。比如出口企业TFP平均高15%-20%这符合自我选择效应理论。国有企业可能比民营企业低10%左右反映了效率差异。最后提醒不要过度解读小数点后三位的差异。TFP本质是个相对指标重点看排名和变化趋势。我见过有人纠结0.001的差异其实标准误可能都有0.01。

相关新闻