ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OLS回归分析入门:从变量选取到结果解读的完整实践指南

OLS回归分析入门:从变量选取到结果解读的完整实践指南 写在前面的几句心里话我第一次接触OLS普通最小二乘法Ordinary Least Squares的时候心里想的是这玩意儿到底有什么用教材上全是公式推导老师上课推黑板推得满头大汗我坐在底下连“最小二乘”这四个字为什么要凑在一起都搞不明白。后来自己动手做研究、跑数据、写论文回头再看才发现OLS其实一点都不神秘——它本质上就是“找一条最合适的线让所有点到这条线的距离平方之和最小”。就这么简单但围绕它展开的门道却不少。这篇东西我想写给那些刚入门计量、或者准备写实证论文的朋友。标题里的“傻瓜”不是说谁笨而是说我会尽量避免堆公式、避免术语轰炸用大白话把变量选取、模型设定、回归结果解读这些环节拆开揉碎讲清楚。文章会比较长但每一段都有实操价值。读完你至少能回答三个问题变量该怎么选模型该怎么设定Stata或Python跑出来的那一大张回归表到底哪些数字值得看、该怎么写进论文里。1. 为什么人人都说“先学OLS”它到底在解决什么问题先解决一个最基础的问题OLS是干嘛的计量经济学的核心任务是用数据来验证经济理论或回答因果问题。比如“受教育年限每增加一年工资到底能涨多少”这是一个典型的政策相关问题。理论上说教育提升人力资本工资应该更高但光靠理论不能精确告诉你是1%还是10%。你需要拿真实的数据去做估计而OLS就是做这件事的最基础工具。它的数学逻辑其实不复杂假设你有一个因变量y比如月工资一个或多个自变量x比如受教育年限、工作年限、性别你假定它们之间的关系大致是线性的y β₀ β₁x₁ β₂x₂ ... βₖxₖ u其中u是误差项代表那些你没想到的、或者无法观测的影响因素。OLS要做的就是寻找一组系数β使得所有样本点上“实际观测值y”与“模型预测值ŷ”之间的差距平方和最小。为什么是“平方”而不是绝对值两个原因。第一平方放大了大误差的影响让模型更在意那些偏离很远的点第二平方和是数学上最容易优化求解的目标函数能推导出漂亮的闭式解。这一点在数学上很方便也决定了后续一堆统计性质的成立。从本质上讲OLS就是在回答“变量x和y之间是否存在系统性的线性关联关联强度有多大”。请注意这个词关联不是因果。除非你在样本选择和研究设计上做了足够多的工作工具变量、随机实验、面板数据固定效应等否则OLS跑出来的系数只能说明“相关”不能直接说“因为”。很多人学OLS最困惑的地方是把“估计”和“真实值”搞混。β₁这个符号在上面的方程里代表真实世界的参数是一个未知的固定值而你用数据跑出来、回归表里显示的那个系数是对β₁的一次估计。因为抽样有随机性这次估计不一定等于真实值所以才有标准误、t值、p值这一整套统计推断工具它们用来回答“这次估计到底可不可信”。一句话总结OLS是计量经济学的起点是理解几乎所有更复杂模型工具变量、面板回归、Logit/Probit的坐标原点。把OLS吃透后面学什么东西都顺OLS没学好看什么实证论文都是囫囵吞枣。2. 变量选取从“拍脑袋”到“有依据”的完整思考路径很多新手拿到数据的第一反应是把所有变量一股脑丢进回归里看看谁显著。这是大忌。变量选取不是数据操作问题而是研究设计问题每一步都该有逻辑支撑。我按“因变量—核心解释变量—控制变量”的顺序讲三种变量的选取逻辑。2.1 因变量被解释变量怎么定从研究问题出发因变量是你最终想解释的那个东西。选定因变量的唯一依据是研究问题。举例来说如果你的研究问题是“教育对收入有没有影响”因变量显然是收入如果你的问题是“房价上涨是否抑制了生育意愿”因变量可能是生育数量也可能是是否生育这时候通常会用Probit或Logit而不是OLS但初学者可以先从线性概率模型入手理解。常见的研究主题与因变量对应关系大致如下劳动经济学工资、工作时长、就业状态教育经济学学习成绩、受教育年限、升学概率健康经济学体重指数、就医次数、自评健康城市经济学房价、租金、通勤时间选定因变量之后要考虑度量方式。同样一个收入变量可以用月收入、年收入、对数收入。用绝对水平值和用对数值模型的解释含义和适用场景都不一样后面第三节再说。还要注意这个变量的数据分布——如果严重右偏少数超高收入者拉高均值直接当因变量会让估计对极端值极其敏感通常取对数是一个好选择。2.2 核心解释变量理论基础决定方向方程系数有预期核心解释变量是你最关心、想重点验证的那个变量通常是研究假设的核心。它应该直接对应你的理论机制而不是随机从数据里挑出来的。教育学领域最经典的例子Mincer工资方程。这个方程的形式是log(工资) β₀ β₁·受教育年限 β₂·工作年限 β₃·工作年限² u这里核心解释变量就是受教育年限education系数β₁的含义是“在其他条件不变的情况下受教育年限每多一年工资变化的百分比”。理论上对这个系数的符号和大致范围是有预期的应该为正通常在5%~15%之间不同国家、不同时期会有差异。如果跑出来的符号为负或者大得离谱比如800%第一反应不是欢呼“发现了重大发现”而是该反思是不是样本选错了变量度量错了是不是遗漏了重要的控制变量这就是理论基础的作用它不是束缚而是帮你建立一个“合理区间”的参照系超出这个区间多半是设定有问题。2.3 控制变量宁缺毋滥坏控制比不控制更可怕控制变量的作用是尽量排除“因为其他因素的干扰让你误以为x和y有关系”这种情况。举个例子如果只把教育和工作年限放进方程教育系数可能偏高因为能力强的人往往既受更多教育、又能拿到更高工资。你控制不了“能力”这个变量但可以用高考成绩、大学排名、IQ测试分数如果数据里有作为近似控制。但控制变量绝不是越多越好有三类变量千万不能加第一类对撞因子Collider。如果Z同时受x和y影响再把Z放进回归会打开一条本不存在的虚假路径制造出荒谬的关联。比如你想研究锻炼时长x对健康y的关系控制变量里加了“体检次数Z”——体检次数既受锻炼习惯影响爱锻炼的人更常体检也受健康状况影响身体差的人更频繁就医这就是对撞因子。加了它锻炼和健康的关系会严重扭曲。第二类中介变量Mediator。如果你关心“教育→技能→工资”这条因果链想知道教育的总效应就不该把“技能水平”作为控制变量加进去否则你估计的只是教育不通过技能影响工资的那部分直接效应总效应反而被拆散了。具体来说想估计教育的总效应时控制变量应该只放那些不受教育影响、但会影响工资的因素如年龄、性别、地区而不能放技能证书等中介变量。第三类内生变量。控制变量本身也和误差项相关比如研究工资时控制“所在行业”——行业确实影响工资但个人选择进入哪个行业很大程度上受不可观测的能力影响这就把内生性问题引进了模型。实操建议控制变量选取完全可以借鉴已有高质量文献的做法比如你的题目参照了某篇AER或《经济研究》文章就把人家用了什么控制变量列出来结合你数据的可得性做增删。对每个控制变量你都要能回答一个“为什么要控制它”。2.4 数据的基础检查描述性统计与缺失值处理变量选完之后跑回归之前的第一个工作是看描述性统计表均值、标准差、最小值、最大值、样本量。这一步可以帮你发现三类问题一是异常值。比如某人的受教育年限是50工作时长是每天24小时明显是录入错误或口径问题要么剔除要么设为缺失。处理异常值更标准的做法是缩尾winsorize把低于1%分位数的值替换为1%分位数高于99%分位数的替换为99%分位数降低极端值对回归系数的过度影响。二是大量缺失。如果一个控制变量缺失了30%以上的样本简单地直接扔掉的代价是样本量缩水、还可能带来样本选择性偏差。这时候可以先看看缺失是否系统性的缺失者是不是集中在某个群体再决定用缺失值哑变量法、多重插补还是干脆不控制这个变量。三是样本量太小。社会科学领域少于几百个观察值的OLS回归即便结果显著也几乎没有说服力。审稿人看到N50的回归表第一反应就是怀疑结果的稳健性。我的一个习惯是在正式回归之前把核心变量之间的相关矩阵也打出来看一眼。如果有两个相关系数超过0.8说明潜在的多重共线性风险较高需要警惕。这一步能帮你预判后面回归时可能出现的问题。3. 模型设定细节不只是y对x回归这么简单模型设定是新手最容易“自己以为没问题、其实埋了大雷”的环节。表面上都是“被解释变量 ~ 一堆解释变量”的格式但细节上的选择会直接影响系数含义和显著性。3.1 线性还是非线性什么时候该用对数真正的“线性”不是指x和y必须是直线关系而是指参数线性——β乘以变量变量本身怎么变换都行。因此在实证中大量使用的“取对数”依然是线性回归。为什么要取对数有三个非常实际的理由第一经济变量往往呈右偏分布比如收入、房价、企业规模少数大值能把均值拉得很高。取对数后分布更接近正态极端值影响被压缩模型拟合更好。第二对数模型系数的解释更自然被解释变量取对数时系数×100就是x每增加一个单位y变化的百分数严格来说是半弹性解释变量也取对数时系数就是弹性——x每增加1%y变化β%。第三很多经济关系本质上是倍率关系而非绝对量关系。一个人月薪从5000涨到6000对生活的影响远比从20000涨到21000大工资和受教育年限之间更可能是“每多上一年学工资乘以某个比例”而不是“工资加上一个固定常数”。对数形式正好匹配这种乘法关系。常见函数形式及解释口径见下表模型形式系数β的解释y β₀ β₁x ux每增加1个单位y平均变化β₁个单位ln(y) β₀ β₁x ux每增加1个单位y变化约β₁×100%y β₀ β₁ln(x) ux每增加1%y变化约β₁/100个单位ln(y) β₀ β₁ln(x) ux每增加1%y变化β₁%有一点要提醒只有变量取值严格为正时才取对数如果存在0或负值一般先加1再取对数或者改用反双曲正弦变换。常见处理方式是加1取对数ln(1x)。3.2 虚拟变量分类变量的正确打开方式性别、婚姻状态、行业、地区这类分类变量不能直接当数值放进去。你不能让“行业1代表制造业、2代表服务业、3代表农业”除非这些数字有自然顺序和固定间距。正确做法是生成虚拟变量哑变量把一个k类别的变量变成k−1个0/1变量基准组作为参照。比如行业有三个类设置两个哑变量制造业哑变量是制造业1不是0、服务业哑变量是服务业1不是0农业作为基准组。两个系数的解释分别是相比农业组制造业的平均y高多少相比农业组服务业的平均y高多少。实际操作中的坑千万别把k个全部生成抛进模型否则会出现完美的多重共线性“虚拟变量陷阱”Stata会自动帮你删一个但如果你手动用Python的statsmodels就会报错或出现奇异矩阵。连续变量也可以选择离散化为虚拟变量。比如教育程度用“受教育年限”这一个连续变量只能得到一个线性斜率但如果你怀疑本科和研究生相对于高中的回报率不是线性递增的可以设“高中1”“本科1”“研究生1”的虚拟变量分别估计每个阶段相对于“初中及以下”基准组的增量效应。在解释结果和向决策者汇报时离散化的结果往往更直观。3.3 变量的量纲与系数大小用标准化系数做比较当不同解释变量的量纲相差悬殊——比如“年龄”在30~60之间而“收入”在5000~50000之间——回归系数的绝对值大小没有直接可比性。这时候可以用标准化系数Beta把所有变量先减去均值、除以标准差再回归得到的系数就是标准差单位的变化量。举个例子如果教育年限的标准化系数是0.25工作年限的标准化系数是0.15说明教育年限每增加一个标准差对工资的影响大于工作年限每增加一个标准差的影响。这在做变量重要性比较时非常有用。不过标准化系数也有局限——标准差本身受样本分布影响跨研究比较时要小心。论文主回归里一般报告原始系数便于解释经济含义标准化系数可以放在稳健性检验或补充说明里。3.4 模型形式的检验怎么知道你的形式对不对确定函数形式最好有理论或文献依据但仍然可以做统计检验来验证设定是否严重偏离数据。最有名的是拉姆齐RESET检验Regression Equation Specification Error Test把原回归的拟合值平方、立方作为额外变量加回方程如果这些额外变量的系数联合显著说明模型存在非线性遗漏或函数形式错误需要修改设定。实操方式跑完回归后用estat ovtestStata查看结果如果p值小于0.05说明模型形式可能有问题。但不代表整个研究报废——通常是提示你该考虑加入平方项、交互项或者该用其他函数形式。还需要注意Hausman检验在面板数据中比较固定效应与随机效应不过在基础的OLS语境下这个检验属于扩展内容初学者可以先放一放。4. 回归结果深度解读每个数字背后的统计逻辑与常见误读跑回归只是点一下按钮真正的功夫全在读表上。老手看一眼回归结果就能基本判断这篇论文靠谱不靠谱。下面我把一张典型回归表里的每个核心数字拆开来讲。先假设我用模拟数据跑了一个这么模型ln(月薪) β₀ β₁·受教育年限 β₂·工作年限 β₃·性别男1 u回归结果如下为便于讲解这是我造的示例数据数字本身不需要对应真实世界变量系数估计值标准误t值p值95%置信区间受教育年限0.0830.0126.920.000[0.059, 0.107]工作年限0.0150.0043.750.000[0.007, 0.023]性别男10.2120.0356.060.000[0.143, 0.281]常数项7.5600.08094.500.000[7.403, 7.717]样本量N1,500R²0.268F统计量45.324.1 系数估计值从符号、大小到经济含义第一列“系数估计值”是OLS的最终成果它告诉你在控制其他变量的情况下该解释变量对因变量的平均影响。看受教育年限的系数0.083。因为因变量是log(月薪)解释变量是受教育年限的水平值所以系数×100表示“受教育年限每增加一年月薪平均增加8.3%”。这个数字在你的预期范围内5%~15%左右符号为正说明教育确实和工资正相关。工作年限的系数0.015解释为“工作年限每增加一年月薪平均增加1.5%”。注意这里我没有在工作年限旁放平方项如果放的话工作年限的系数本身就不能单独解读了得和平方项系数联合起来求边际效应。性别虚拟变量的系数0.212含义是“在控制教育和工龄后男性的月薪平均比女性高21.2%”。这里特别强调是“控制其他变量后”——不是说所有男性一定比所有女性工资高而是说在可观测特征相近的情况下仍存在约21%的平均差异。关于常数项截距β₀它的意义是所有解释变量等于0时的预测值在很多模型里没有实际经济含义受教育年限为0、工作年限为0、女性、月薪e^7.56≈1920元这些条件组合在现实中也有实际对应。常数项是否显著一般不需要专门去解释。4.2 标准误与t值如何判断“估计得准不准”标准误衡量的是系数估计值的不确定性。由于我们只有样本不是整个总体所以β̂₁和真实β₁之间存在抽样误差。标准误越大说明这个估计越不稳定换个样本结果可能就差得很远。t值的计算非常简单t 系数估计值 / 标准误它是用来检验“真实β是否等于0”的统计量。在原假设β0的前提下t值服从t分布大样本下近似正态。当|t|大于约1.96时样本数据与原假设不一致的程度足够大我们就有95%以上的把握拒绝“该变量对y没有影响”的假设。具体到这个例子里教育的t 0.083 / 0.012 ≈ 6.92。这个数值远远超过1.96的临界值所以结果高度显著。4.3 p值的正确理解不是“概率有多真”而是“出错率有多低”p值是初学者最容易误读的数字。p0.000的正确理解是在原假设β0为真的情况下随机抽样得到当前这么大或更大t值的概率不到0.001。它回答的是“如果真实效应为零当前数据出现的可能性有多大”而不是“这个效应真的存在的概率是99.9%”。假设检验的p值就像“击鼓传花”游戏——鼓停了花在谁手里如果你说“是假的”判错的概率是p。它衡量的是把你判成“错误地拒绝原假设”的风险有多大。Stata或Python通常报告的是双尾p值。社会学科常用的显著性水平是5%即p0.05判为显著。不过这几年统计学界也在反思“唯p值论”建议不仅看p值还要看系数大小、置信区间和实际重要性。4.4 R平方越高越好错要看场景R²0.268表示受教育年限、工作年限、性别这三个变量一共解释了月薪对数变异的26.8%。对这个结果怎么看看你和谁比。在横截面微观数据比如调查问卷数据、人口普查数据中R²达到0.2~0.3已经算相当不错因为人的行为太复杂个体差异巨大。但在宏观经济时间序列里R²动辄0.9以上国内生产总值、消费、投资这些宏观序列本身有很强的趋势互相之间的协同运动非常强。所以R²高低的判断标准取决于学科和数据性质。更要紧的是R²高不代表因果关系成立R²低也不代表模型没价值。如果研究问题是重大民生议题即使解释力只有10%只要系数估计可信也有政策价值。反过来一个R²达到0.95的模型可能纯粹是因为两边都受了同一趋势影响属于伪回归。在结果汇报时我更推荐同时报告“修正R²”Adjusted R²它惩罚了解释变量过多的问题方便在不同模型之间做比较。4.5 F统计量检验“所有解释变量联合起来是否有用”F检验的零假设是除常数项外所有系数同时为0。如果F值对应的p值小于0.05说明这个模型作为一个整体至少有一个变量的系数显著不为零“这个模型不是一堆垃圾”的概率较高。在本例中F统计量45.32相应p值也小于0.000结论是方程整体非常显著。实操中一个模型可能每个变量t值都不显著但F值显著这时通常说明变量之间存在多重共线性整体信息有但无法归因于某一个特定变量。4.6 置信区间比p值更有信息量的区间判断95%置信区间给出的是一个区间范围在这个例子中受教育年限的区间是[0.059, 0.107]意思是如果我们反复抽样并计算置信区间大约有95%的区间会包含真实β。它比单独的点估计值更有用因为它同时告诉你效应可能的最小值和最大值。政策含义方面尤其重要如果一项政策干预的效应置信区间从−0.02跨到0.15即便点估计是正的且p0.05也应谨慎下结论因为区间的下端可能包含0附近或负值。审稿人要求“不仅报告系数和星号还要报告置信区间”本质上就是要让读者直观看到不确定性。4.7 显著性标记与报告规范星号的正确读法实证论文里最常见的表达是受教育年限 0.083****** p0.01, ** p0.05, * p0.1三颗星表示在1%水平上显著。但注意星号个数只说明统计显著性不代表经济重要性。一个系数为0.0001、但标准误只有0.00001的变量可以有三颗星而它实际上对y的影响微乎其微。我在阅读文献时的习惯是三步走先看系数符号是否符合预期和理论再看置信区间是否完全为正或完全为负如果置信区间横跨0则说明不显著最后才看星号和p值。4.8 常见误读汇总这些坑我年轻时都踩过第一p值小≠效应大。p值同时受效应大小和样本量影响。样本量足够大时任何微小差异都可能显著样本量太小效应很大也可能不显著。所以我在看结果时更关注系数估计值的实际大小“统计显著性”和“经济显著性”是两回事。第二不显著≠没关系。可能只是标准误太大样本量不足、变量测度误差大。一个不显著的估计值如果置信区间很宽说明信息不足不能轻易下“无效应”的结论。第三显著≠可发表。如果10个控制变量里有4个显著大概率是碰运气。好的研究需要整个模型符合理论逻辑而不是单个变量孤立地看。第四不要搞“显著性筛选”。有些初学者看到预期变量不显著就开始删控制变量、换函数形式直到显著为止。这种做法叫 p-hackingp值操纵在顶刊审稿人眼里属于学术不端。要区分“稳健性检验”和“数据挖掘”前者是有理论理由地多角度验证后者是纯粹为了凑显著性而无逻辑地试。5. 四个最容易翻车的技术细节与排查方法OLS看起来简单但真正跑起来各种诊断问题层出不穷。这一部分挑四个我实际中遇到最多的坑给出排查思路和处理手段。5.1 多重共线性当自变量之间“你中有我”多重共线性是自变量之间存在高度相关关系。极端情况下比如把一个变量和它乘以2后的线性组合同时放入模型软件会直接报错或提示“singular matrix”奇异矩阵。更常见的是“程度”问题相关度不够高让你无法察觉但已经足以让标准误膨胀导致t值偏小看起来不显著。诊断方法计算方差膨胀因子VIF经验规则是VIF大于10说明共线性严重VIF在5~10之间需要警惕。运行命令回归后用vif查看。处理方法按顺序尝试一是如果两个变量度量的是同一概念删除其中一个二是做中心化处理把变量减掉均值后再构造交互项能大幅降低交互项与原始变量之间的共线性三是主成分分析降维但代价是系数失去直观解释四是增加样本量共线性问题很多时候是“信息太少”的问题。5.2 异方差性为什么你的标准误可能全是错的OLS的一个关键假设是误差项拥有相同的方差同方差性。当这个假设被违背——比如收入水平高的人收入波动也更大——即使系数估计值本身无偏标准误却可能被低估进而让t值虚高、p值偏小得到虚假的显著性结论。这也是为什么我反复强调现在做实证几乎不用普通标准误替代方案是稳健标准误Robust Standard Errors。在Stata里是reg y x, robust在Python的statsmodels里是HC1或HC3选项。诊断方法最容易的途径是BP检验Breusch-Pagan或怀特检验White test。但对大样本来说检验几乎总是“显著”的因为真实数据很难百分之百同方差。所以实务上的主流做法是不纠结是否检测到异方差直接默认使用稳健标准误因为稳健标准误在存在异方差时依然正确同方差时也渐近合理。尤其是在横截面大样本中异方差几乎是常态而非例外。5.3 遗漏变量偏误回归结果中最难察觉的问题遗漏变量偏误是OLS最核心、最隐蔽的问题。当一个同时影响x和y的变量z未被纳入模型时x的系数估计不仅包含x的直接影响还混入了z通过x传递的间接影响。经典案例是“上大学会不会提高收入”的研究。能力强的学生更可能上大学能力强也直接导致收入高能力就是那个同时影响教育和收入的遗漏变量。如果无法控制能力OLS估计的受教育年限系数就混杂了“教育回报”和“能力回报”两部分偏离真实因果效应。怎么应对呢一是寻找工具变量IV——这是另一个复杂话题需要找到只通过x影响y的外生变量二是找面板数据做固定效应模型利用同一主体重复观测来消除不随时间变化的个体特征三是做随机实验但社会科学经常做不到四是做敏感性分析看看需要多大的遗漏变量才能翻转结论。对我个人来说面对遗漏变量问题第一步是先想清楚如果这篇论文被审稿人质疑遗漏变量最可能被点名的变量是什么提前在文中讨论这个变量和数据情况即使无法控制也会显得你思考更周全学术态度更严谨。5.4 离群值一个极端样本值如何扭曲你的结论离群值是指严重偏离大多数数据的观察值。一个人的年收入为10亿元显然不是大多数样本的正常形态。这类观察值对OLS影响尤其大——因为OLS最小化的是平方和而离群值的平方误差会占很大的权重导致回归线被拉向它。处理方式有两种一是缩尾winsorize二是截尾trim。缩尾是把尾部的极端值替换为相应的分位数如1%和99%保留所有样本但限制极端影响截尾是直接把尾部样本删除。我更推荐缩尾因为不损失样本量也保留了样本在“尾部分布”上的信息。实际操作建议对连续型核心变量收入、房价、资产做1%双侧缩尾是实证分析中的默认操作在论文里报告“连续变量在1%水平缩尾处理”即可。如果做完缩尾后核心系数变化巨大方向翻转或显著变不显著说明结果对极端值非常敏感需要在论文里讨论。6. 从零到一一篇文章完工的完整OLS实证流程前面把所有概念拆开讲了一遍这一节把它们串成一条完整的可操作路线。即使你现在手头还没有具体选题也可以按照这个流程去构思自己的第一篇OLS实证分析。第一步明确研究问题和理论假说。这一步不在电脑前而在于阅读文献。至少精读5~10篇与你想做话题相关的实证文献记录每篇的核心变量选取、数据来源、模型设定和主要结论。研究问题要具体到一个可检验的关系比如“移动支付使用频率是否影响家庭消费支出”而不是宽泛的“数字经济的影响”。第二步数据获取与变量构造。根据研究问题明确数据需求整理样本。把原始数据中的变量清洗成待入模的形式处理缺失值缺失比例、缺失机制、异常值逻辑检验、量纲取对数还是水平值、构造虚拟变量。建一个data dictionary记录每个变量的含义、来源、观测值数和取值范围。第三步描述性统计与可视化。输出核心变量的均值、标准差和分位数表格。画散点图看原始关系如果散点在低端聚集成一个曲线带提示你该思考函数形式问题。这个阶段的目标不是急着跑回归而是充分理解数据长什么样。第四步基准回归。严格按照第2、3节的方法选定变量与形式跑出你的基准模型。Stata代码示例跑一个最简单的Mincer方程use wage_data.dta, clear gen lnwage ln(wage) gen exp_sq experience^2 reg lnwage educ experience exp_sq female, robustPythonstatsmodels等价代码如下import statsmodels.api as sm df[lnwage] np.log(df[wage]) df[exp_sq] df[experience] ** 2 X df[[educ, experience, exp_sq, female]] X sm.add_constant(X) model sm.OLS(df[lnwage], X).fit(cov_typeHC1) print(model.summary())第五步诊断检验与稳健性检验。这是论文中最能体现研究态度严谨的部分。至少做以下几件事替换核心解释变量度量方式比如用最高学历代替受教育年限替换因变量度量方式比如用周薪代替月薪缩尾或剔除特定样本加入或剔除某些控制变量看核心系数是否稳定换用不同的函数形式取对数换成水平值使用聚类稳健标准误如果数据存在分组结构记录每次改动后的核心系数变化做成一个“稳健性检验”表格见下表格式变量设定系数标准误样本量控制变量基准模型0.083***0.0121,500含控制变量替换因变量0.079***0.0111,500含控制变量缩尾1%0.081***0.0121,500含控制变量删除直辖市样本0.086***0.0131,200含控制变量第六步结果解释与论文呈现。准备一张Stata看结果的规范化表格左边变量名右边用不同列放不同模型比如(1)只有核心解释变量(2)加入控制变量(3)加入更多控制变量这样一步步展示你的结果不因控制变量的加入而剧烈变化。这比丢一大张回归表更专业。关于结果陈述我建议采用如下结构也是论文写作中很常见的方式“表3报告了基准回归结果。第(1)列仅纳入核心解释变量受教育年限的系数为0.102在1%水平显著第(2)列加入工作年限及性别等控制变量后系数降为0.083仍在1%水平显著说明遗漏个体特征的偏差在一定程度上存在但在控制可观测特征后效应依然稳健。经济含义上受教育年限每增加一年月收入平均上升8.3%这与已有文献的估计范围一致。”最后是致谢与可复现性记录你的数据处理代码和回归代码用do文件或者Python脚本整理成可复现流程。现在很多期刊都要求投稿时附数据与代码养成这个习惯对你的学术生涯百利无一害。关于“傻瓜”这个说法的最后两句话很多人看到“傻瓜”两个字会皱眉觉得是在嘲笑初学者。我的真实想法恰恰相反越难的东西越值得用朴素的语言讲清楚。OLS作为计量经济学的地基它的思想精髓并不复杂——用数学的办法拟合数据用统计的办法判断可信度用经济理论指导变量选择。真正复杂的从来不是公式而是怎么在具体研究问题中一步一步做出合理的选择。这些选择的能力只有靠你亲手跑数据、踩坑、纠错才能慢慢练出来。如果这篇文章能帮你少走一点弯路那就值了。后面有机会我再接着写OLS的进阶话题异方差与聚类稳健标准误、交互项和异质性分析、以及从OLS到工具变量的那一跳。
返回列表