第 08 章 非线性回归函数
学习目标
读完本章,你应当能够:
- 判断一个回归函数何时是非线性的,并用「两个 \(X\) 取值处的预测值之差」(Key Concept 8.1)计算任意非线性模型中 \(X\) 变化的效应及其标准误。
- 用多项式回归刻画单变量的非线性,用 t 检验和 F 检验判断是否需要非线性、选几次多项式。
- 熟练解释线性-对数、对数-线性、对数-对数三种模型的系数(百分比变化与弹性),知道对数因变量的预测值需要做 \(E(e^u)\) 修正。
- 用交互项刻画「一个变量的效应依赖另一个变量」:二元×二元、连续×二元、连续×连续,并正确解释每个系数。
- 理解对参数非线性的模型和非线性最小二乘(NLLS),知道其推断方法。
- 把这些工具用到对数收益、冲击成本弹性、非线性因子效应和条件因子效应等量化问题上。
读前导读
这一章在解决什么问题
一句话:当「X 每变一单位,Y 变多少」不是一个固定数字时,怎么建模、怎么解释、怎么算标准误。
你在 CFA 二级学过的多元回归,默认斜率处处相同:市值多 1 亿,收益变化永远是同一个数。现实中很少这样。债券就是最熟悉的例子:价格对收益率不是直线,收益率从 2% 涨到 3% 和从 8% 涨到 9%,价格跌幅不同,所以才需要久期之外再加凸性。本章做的事情,相当于在回归里加入「凸性项」(平方、立方项),或者换一个让关系变直的坐标(取对数),或者让一个变量的斜率随另一个变量变化(交互项)。
关键好消息是:这些模型虽然对 \(X\) 是曲线,但对系数 \(\beta\) 仍然是线性的。你只要在数据表里多造几列(\(X^2\)、\(\ln X\)、\(X_1\times X_2\)),然后照样跑 OLS,前几章的 t 检验、F 检验、稳健标准误全部照用。真正的新东西只有两点:一是系数不能再单独解释,要算「两个 \(X\) 取值处预测值之差」;二是这个差是几个系数的组合,它的标准误要把系数之间的协方差算进去。最后 8.5 节处理对参数也非线性的模型,那时 OLS 不再适用,需要数值优化。
需要先想起来的数学
1. 导数与斜率。 函数 \(f(x)\) 在某点的导数 \(f'(x)\) 是「\(x\) 变一点点时 \(f\) 变多少」的比率,也就是切线斜率。常用:\((x^n)'=nx^{n-1}\),\((\ln x)'=1/x\),\((e^{x})'=e^{x}\)。例:\(f(x)=3x-0.04x^2\),\(f'(x)=3-0.08x\),在 \(x=10\) 处斜率 2.2,在 \(x=30\) 处斜率 0.6。斜率随 \(x\) 变,就是「非线性」的含义。久期就是价格对收益率的一阶导数(再除以价格),你其实已经在用导数。见 第 00 册第 02 章 导数与泰勒展开。
2. 偏导数。 多个变量时,只让其中一个变、其他固定,求出的导数叫偏导数,记作 \(\partial f/\partial x_1\)。例:\(f=2x_1+3x_2+0.5x_1x_2\),\(\partial f/\partial x_1=2+0.5x_2\),即 \(x_1\) 的斜率依赖 \(x_2\),这正是 8.3 节交互项的数学本质。见 第 00 册第 05 章 多元微积分与优化。
3. 指数与自然对数。 \(\ln\) 是 \(e^x\) 的反函数;\(\ln(ab)=\ln a+\ln b\),\(\ln(a^k)=k\ln a\)。最重要的一条近似:\(x\) 很小时 \(\ln(1+x)\approx x\)(来自泰勒展开 \(\ln(1+x)=x-x^2/2+\cdots\))。例:\(\ln(1.03)=0.02956\approx0.03\)。这就是对数收益约等于简单收益的原因,也是本章「对数差 ≈ 百分比变化」的依据。见 第 00 册第 04 章 级数与收敛。
4. 两个随机变量线性组合的方差。 \(\mathrm{Var}(aX+bY)=a^2\mathrm{Var}(X)+b^2\mathrm{Var}(Y)+2ab\,\mathrm{Cov}(X,Y)\)。这就是 CFA 里两资产组合方差的公式,只是把「资产收益」换成「系数估计量」。8.1.3 节的标准误全靠它。见 第 00 册第 07 章 概率中的分析工具。
5. 凸函数与 Jensen 不等式。 对凸函数 \(g\)(图形向上弯,如 \(e^x\)),\(E[g(X)]\ge g(E[X])\):先变换再平均,大于先平均再变换。期权就是例子:看涨期权收益是标的价格的凸函数,所以波动越大期权越值钱。8.2.2 节用它说明为什么对数模型直接取指数会低估。
怎么读这一章
核心必读是 8.1(Key Concept 8.1 的「预测值之差」算法和效应的标准误)、8.2.2(三种对数模型的解释,Key Concept 8.2)和 8.3(交互项,Key Concept 8.3–8.5)。这三块是以后读任何实证论文、做任何因子研究都会反复用到的。8.4 节是把前面方法放在一起的完整案例,可以先看 8.4.3 的结论,再回头对照表 8.3。8.5 节(NLLS)和 8.6 节(用导数算斜率和弹性)第一次可以只看结论,等用到 Nelson–Siegel 拟合或需要算弹性时再细读。原书方框(8.3.3、8.3.5)是很好的应用示范,建议读,尤其是期刊需求的例子,它把对数-对数与交互项结合,和「因子载荷随市值变化」的思路一模一样。
8.0 为什么需要非线性
第 04–07 章假定总体回归函数是线性的,即斜率处处相同。在因果语境下,这意味着 \(X\) 变化一单位对 \(Y\) 的效应,对所有回归元取值都一样。如果 \(X\) 对 \(Y\) 的效应依赖某些回归元的取值,总体回归函数就是非线性的。
本章介绍两组方法:
- 第一组(8.2 节):\(X_1\) 的效应依赖 \(X_1\) 自身。 例如,班级已经较小时,再少一名学生的效应,可能比班级大到老师只能维持纪律时更大。此时成绩是 STR 的非线性函数,在 STR 小的地方更陡。
- 第二组(8.3 节):\(X_1\) 的效应依赖另一个变量 \(X_2\)。 例如,英语学习者可能特别受益于一对一的关注,所以英语学习者多的学区降低师生比的效应更大。
这两组模型对 \(X\) 非线性,但对未知参数线性,所以它们仍然是第 06、07 章多元回归的变体,可以用 OLS 估计,用 t、F 统计量检验。如果回归函数对参数也是非线性的,就不能用 OLS,而要用非线性最小二乘(8.5 节)。
8.1–8.3 节为了简化,在实证例子中省略了其他回归元;但若目标是因果效应,仍然需要控制变量,8.4 节把非线性与控制变量结合起来。只要因果推断的最小二乘假设(针对非线性函数做相应修改)成立,非线性回归函数的斜率就可以解释为因果效应;这些方法同样适用于带控制变量(Key Concept 6.6)和预测(第 06 章 6.10 节)的情形。
8.1 非线性回归建模的一般策略
8.1.1 例:考试成绩与学区收入
第 07 章发现学生的经济背景很重要。一个更宽泛的度量是学区人均年收入(District income,千美元,1998 年价格):420 个学区的中位数为 13.7(即人均 13,700 美元),范围 5.3–55.3。
原书图 8.2 显示成绩与收入强正相关(相关系数 0.71),但线性 OLS 直线拟合不佳:收入很低(低于 1 万美元)或很高(高于 4 万美元)时,多数点落在直线下方;1.5 万–3 万美元之间,多数点落在直线上方。存在线性回归没有捕捉到的曲率。
非线性函数是斜率不恒定的函数:若 \(f(X)\) 的斜率对所有 \(X\) 相同,它是线性的;若斜率依赖 \(X\),它是非线性的。这里需要的曲线应在低收入时陡、高收入时平。一个简单的选择是二次函数:
称为二次回归模型(quadratic regression model)。它其实就是有两个回归元(Income 和 Income²)的多元回归:在数据表里新增一列「收入的平方」即可,所以可以用 OLS 估计和检验:
原书图 8.3 显示二次函数在低收入时陡、高收入时平,拟合优于直线。
正式检验线性。 如果关系是线性的,(8.1) 中 \(\beta_2=0\)。检验 \(H_0:\beta_2=0\) vs. \(H_1:\beta_2\ne0\):\(t=-0.0423/0.0048=-8.81\),p < 0.01%,在所有常规水平拒绝。二次模型优于线性模型。
8.1.2 非线性设定中 \(X\) 变化的效应
一般非线性总体回归函数。
\(f\) 是总体非线性回归函数,即 \(E(Y_i\mid X_{1i},\dots,X_{ki})=f(\cdot)\)。\(f\) 线性时就退化为 Key Concept 6.2。
效应的定义。 设想对 \(X_2,\dots,X_k\) 相同的个体随机分配处理水平 \(X_1=x_1\) 或 \(x_1+\Delta x_1\),两种处理的期望结果之差就是保持 \(X_2,\dots,X_k\) 不变时的因果效应。在预测语境下,它是两个 \(X_2,\dots,X_k\) 相同、\(X_1\) 不同的观测的预测值之差。
Key Concept 8.1(非线性回归中 \(X_1\) 变化的预期效应) 保持 \(X_2,\dots,X_k\) 不变时,与 \(\Delta X_1\) 对应的 \(Y\) 的期望变化为
\[\Delta Y=f(X_1+\Delta X_1,X_2,\dots,X_k)-f(X_1,X_2,\dots,X_k).\tag{8.4}\]其估计是预测值之差:\[\Delta\hat Y=\hat f(X_1+\Delta X_1,X_2,\dots,X_k)-\hat f(X_1,X_2,\dots,X_k).\tag{8.5}\]
这个算法总是适用,无论 \(\Delta X_1\) 大小、回归元连续还是离散。\(\Delta X_1\) 很小时,也可以用微积分求斜率(8.6 节)。
金融直觉:这和债券的「全价重估」(full revaluation) 是同一个思路。估算收益率上升 100bp 时债券跌多少,最稳妥的办法不是用久期乘以变化量,而是在新收益率下重新算一遍价格,再与原价格相减。Key Concept 8.1 就是回归版的全价重估:把 \(X_1\) 设成新值算一次预测值,设成旧值算一次,相减。用导数算斜率(8.6 节)则相当于用久期做线性近似,变化小时两者接近,变化大时以全价重估为准。
应用。 收入从 10 增到 11(千美元):
Income = 10 时预测值为 \(607.3+38.5-4.23=641.57\),Income = 11 时为 644.53,差 2.96 分。从 40 增到 41:\(694.04-693.62=0.42\) 分。同样多 1000 美元,初始收入 1 万美元时的效应(2.96 分)远大于 4 万美元时(0.42 分)。
8.1.3 效应的标准误
\(\hat f\) 随样本变化,\(\Delta\hat Y\) 也含有抽样误差,需要标准误来构造置信区间。线性模型中 \(SE(\Delta\hat Y)=SE(\hat\beta_1)\Delta X_1\)。非线性模型中,可以借用 7.3 节「涉及多个系数的单一约束」的工具。收入 10→11 时,
它是系数线性组合的标准误,必须考虑 \(\hat\beta_1\) 与 \(\hat\beta_2\) 的协方差。有的软件可以直接算(statsmodels 的 t_test);否则有两种方法:
- 方法 1(对应 7.3 节方法 1):计算检验 \(\beta_1+21\beta_2=0\) 的 F 统计量,则
\[SE(\Delta\hat Y)=\frac{|\Delta\hat Y|}{\sqrt F}.\tag{8.8}\]推导:\(q=1\) 时 \(F=t^2=[(\hat\beta_1+21\hat\beta_2)/SE(\hat\beta_1+21\hat\beta_2)]^2=[\Delta\hat Y/SE(\Delta\hat Y)]^2\),解出 SE 即可。应用:F = 299.94,\(SE=2.96/\sqrt{299.94}=0.17\),95% 置信区间为 \(2.96\pm1.96\times0.17=(2.63,3.29)\)。
- 方法 2(对应 7.3 节方法 2):变换回归元,使变换后某个系数正好是 \(\beta_1+21\beta_2\)。由 \(\beta_1X+\beta_2X^2=(\beta_1+21\beta_2)X+\beta_2(X^2-21X)\),把 \(Y\) 对 \(X\) 和 \(W=X^2-21X\) 回归,\(X\) 的系数及其 SE 就是所求(原书习题 8.9)。
推导拆解:为什么不能只用 \(SE(\hat\beta_1)\) 和 \(SE(\hat\beta_2)\) 拼出来? 第一步,\(\Delta\hat Y=\hat\beta_1+21\hat\beta_2\) 是两个随机变量的线性组合,用组合方差公式(和两资产组合方差同一个公式):
\[\mathrm{Var}(\hat\beta_1+21\hat\beta_2)=\mathrm{Var}(\hat\beta_1)+21^2\mathrm{Var}(\hat\beta_2)+2\times21\,\mathrm{Cov}(\hat\beta_1,\hat\beta_2).\]第二步,开平方得 SE。只有协方差项是软件主表里看不到的,它在系数的协方差矩阵(statsmodels 的cov_params())里。 第三步,看符号。\(Income\) 与 \(Income^2\) 高度正相关,导致 \(\hat\beta_1\) 与 \(\hat\beta_2\) 的估计误差负相关(一个估高了,另一个往往估低来抵消)。协方差为负,组合方差会比忽略协方差时小得多。本例若忽略协方差,SE 约为 \(\sqrt{0.27^2+21^2\times0.0048^2}\approx0.29\),而正确值只有 0.17。 方法 1 和方法 2 都是绕开「手算协方差」的技巧:方法 1 借 F 统计量反推,方法 2 重新参数化,让目标量直接变成某个回归系数。
8.1.4 非线性模型中系数的解释
线性多元回归中,\(\beta_1\) 有自然的解释:保持其他回归元不变时 \(X_1\) 变化的效应。非线性模型中一般不再如此:把 (8.1) 的 \(\beta_1\) 理解为「保持收入平方不变时收入变化的效应」毫无意义。非线性模型最好通过作图和计算一个或多个自变量变化的预测效应来解释。
8.1.5 用多元回归建模非线性的五个步骤
- 识别可能的非线性关系。 最好依靠经济理论和对应用的理解,在看数据之前就问:斜率是否可能依赖 \(X\) 或其他变量?为什么?暗示什么形状?例如,想想 11 岁孩子的课堂:班级从 18 人减到 17 人的效应,可能大于从 30 人减到 29 人。
- 设定非线性函数,用 OLS 估计参数(8.2、8.3 节的各种函数形式)。
- 判断非线性模型是否优于线性模型。 你认为是非线性的,不等于它真的是。要用 t、F 统计量检验「线性」这个零假设。
- 画出估计的非线性回归函数,看它是否很好地描述了数据。
- 估计 \(X\) 变化对 \(Y\) 的效应(Key Concept 8.1)。
8.2 单个自变量的非线性函数
两种方法:多项式(polynomials)与对数(logarithms),两者可以组合。
8.2.1 多项式回归
\(r\) 次多项式回归模型:
\(r=2\) 为二次,\(r=3\) 为三次回归模型(cubic regression model)。它与第 06 章的区别只在于回归元是同一变量的各次幂,所以 OLS 估计和推断方法全部适用。
检验线性。
这是 \(q=r-1\) 个约束的联合假设,用 F 统计量检验(7.2 节)。
选几次多项式。 这是灵活性与统计精度之间的权衡。\(r\) 越大越灵活,\(r\) 次多项式的图形最多可以有 \(r-1\) 个弯;但回归元越多,系数估计越不精确。「包含足以刻画非线性的项,但不要更多」这个原则在实践中帮助不大。实用的做法是序贯假设检验(sequential hypothesis testing):
- 选一个最大次数 \(r\),估计 \(r\) 次多项式;
- 用 t 检验 \(\beta_r=0\);若拒绝,\(X^r\) 应保留,用 \(r\) 次多项式;
- 若不拒绝,去掉 \(X^r\),估计 \(r-1\) 次多项式,检验 \(X^{r-1}\) 的系数;若拒绝,用 \(r-1\) 次;
- 如此继续,直到最高次项显著。
初始 \(r\) 怎么选?经济数据中的非线性函数通常是平滑的,没有尖峰或跳跃,所以宜从较小的最大次数开始,如 2、3 或 4。
白话解释:「\(r\) 次多项式最多 \(r-1\) 个弯」可以这样理解:弯就是斜率由正变负或由负变正的地方,即导数等于零的点。\(r\) 次多项式的导数是 \(r-1\) 次多项式,最多有 \(r-1\) 个根,所以最多 \(r-1\) 个弯。二次函数一个弯(抛物线顶点),三次函数最多两个弯(先升后降再升)。 序贯检验从高往低删,而不是从低往高加,是因为高次项不显著时把它删掉代价小;反过来从低往高加,低次模型若漏掉了真实的高次项,那时算出的 t 统计量本身就有偏,判断不可靠。
应用。
\(Income^3\) 的 t = 1.97,在 5% 水平拒绝「二次」而支持「三次」;检验 \(Income^2\) 与 \(Income^3\) 的系数都为零的 F = 37.7,p < 0.01%,拒绝线性。
多项式回归的系数没有简单的解释,最好作图,并计算若干 \(X\) 值处 \(X\) 变化的估计效应。
8.2.2 对数:把变化变成百分比
很多关系天然以百分比表达:第 3 章「社会阶层还是教育?」方框用英镑度量收入差距,但百分比更便于跨职业、跨时间比较;8.1 节中收入与成绩是非线性的,如果改用「收入变化 1%」而不是「收入增加 1000 美元」,效应是否在不同收入水平近似恒定?需求分析中常假设价格上升 1% 导致需求量下降某个百分比,即价格弹性(price elasticity)。
指数与自然对数。 指数函数 \(e^x=\exp(x)\),\(e=2.71828\ldots\);自然对数是其反函数,\(x=\ln(e^x)\)。本书的「对数」一律指自然对数。\(\ln(x)\) 只对 \(x>0\) 有定义,它先陡后平但持续增长,斜率为 \(1/x\)。常用性质:
对数差近似百分比变化。 \(\Delta x\) 相对 \(x\) 较小时,
即百分比变化除以 100。例:\(x=100\)、\(\Delta x=1\) 时 \(\Delta x/x=0.01\),而 \(\ln101-\ln100=0.00995\);\(\Delta x=5\) 时为 0.05 vs. 0.04879。变化越大,近似越差。这正是简单收益与对数收益的关系(见量化实战)。
推导拆解:(8.16) 从哪来? 第一步,用对数性质 (8.14) 把差写成一个对数:\(\ln(x+\Delta x)-\ln x=\ln\!\left(1+\frac{\Delta x}{x}\right)\)。 第二步,记 \(h=\Delta x/x\),对 \(\ln(1+h)\) 在 \(h=0\) 处做泰勒展开:\(\ln(1+h)=h-\frac{h^2}{2}+\frac{h^3}{3}-\cdots\)。 第三步,\(h\) 小时 \(h^2/2\) 远小于 \(h\),只保留一阶项,得 \(\ln(1+h)\approx h\)。 误差主要来自 \(-h^2/2\):\(h=0.05\) 时为 \(-0.00125\),与正文的 \(0.04879-0.05=-0.00121\) 吻合。它总是负的,所以对数变化总是略小于百分比变化(\(h>0\) 时)。这就是为什么年化后的对数收益总低于算术收益,差额约为方差的一半。
情形 I:线性-对数模型(linear-log model)。 \(X\) 取对数,\(Y\) 不取:
\(X\) 变化 1%,\(Y\) 变化 \(0.01\beta_1\) 个单位。推导:\([\beta_0+\beta_1\ln(X+\Delta X)]-[\beta_0+\beta_1\ln X]\cong\beta_1(\Delta X/X)\),\(\Delta X/X=0.01\) 时即为 \(0.01\beta_1\)。估计时先生成 \(\ln X\) 再做 OLS,t 检验和置信区间照常。
收入增加 1%,成绩上升 \(0.01\times36.42=0.36\) 分。换成原单位:收入从 10 增到 11 千美元,\(\Delta\hat Y=36.42\times(\ln11-\ln10)=3.47\);从 40 增到 41,\(36.42\times(\ln41-\ln40)=0.90\)。与二次设定一样,贫困学区多 1000 美元的效应更大。
情形 II:对数-线性模型(log-linear model)。 \(Y\) 取对数,\(X\) 不取:
\(X\) 变化一单位,\(Y\) 约变化 \(100\beta_1\%\)。推导:\(\ln(Y+\Delta Y)-\ln Y=\beta_1\Delta X\);当 \(\beta_1\Delta X\) 较小时,左边 \(\cong\Delta Y/Y\),于是 \(\Delta Y/Y\cong\beta_1\Delta X\)。若 \(\beta_1\Delta X\) 不小,精确的百分比变化是 \(100(e^{\beta_1\Delta X}-1)\%\)。
推导拆解:精确公式怎么来的。由 \(\ln(Y+\Delta Y)-\ln Y=\beta_1\Delta X\),左边用对数性质合成 \(\ln\frac{Y+\Delta Y}{Y}\);两边取指数得 \(\frac{Y+\Delta Y}{Y}=e^{\beta_1\Delta X}\),即 \(\frac{\Delta Y}{Y}=e^{\beta_1\Delta X}-1\)。这一步没有用任何近似。 数值感受:\(\beta_1\Delta X=0.0095\) 时精确值 0.954%,与近似 0.95% 几乎一样;若是二元变量系数 \(\beta_1=0.40\)(例如大学学位对对数收入的效应),精确值是 \(e^{0.40}-1=49.2\%\),而不是 40%,差别很大。读论文时看到对数因变量上的虚拟变量系数较大,要自己换算。
例:一些雇佣合同规定每多服务一年工资涨某个百分比,提示用对数-线性设定。2016 年 3 月 CPS 中 13,872 名大学毕业生:
年龄每增加一岁,收入预计增加 0.95%。
情形 III:对数-对数模型(log-log model)。 两者都取对数:
\(X\) 变化 1%,\(Y\) 变化 \(\beta_1\%\),\(\beta_1\) 就是 \(Y\) 对 \(X\) 的弹性(elasticity):
应用:
收入增加 1%,成绩增加 0.0554%。对比对数-线性设定:
原书图 8.6(纵轴为 ln 成绩)中,对数-线性是一条直线,对数-对数拟合更好(\(\bar R^2\) 0.557 vs. 0.497),但也不算很好:低收入处多数点在曲线下方,中等收入处多数在上方。
Key Concept 8.2(回归中的对数:三种情形) 被取对数的变量必须为正;取对数后用 OLS 估计。
情形 设定 \(\beta_1\) 的解释 I 线性-对数 \(Y_i=\beta_0+\beta_1\ln X_i+u_i\) \(X\) 变化 1% ↔ \(Y\) 变化 \(0.01\beta_1\) II 对数-线性 \(\ln Y_i=\beta_0+\beta_1X_i+u_i\) \(X\) 变化 1 单位 ↔ \(Y\) 变化 \(100\beta_1\%\) III 对数-对数 \(\ln Y_i=\beta_0+\beta_1\ln X_i+u_i\) \(X\) 变化 1% ↔ \(Y\) 变化 \(\beta_1\%\),\(\beta_1\) 为弹性
比较对数设定的困难。 因变量相同时可以用 \(\bar R^2\) 比较:对数-线性 vs. 对数-对数(后者更好);线性-对数(0.561)vs. 线性(0.508,前者更好)。但线性-对数与对数-对数的因变量不同(\(Y\) vs. \(\ln Y\)),\(\bar R^2\) 衡量的是各自因变量方差被解释的比例,不能直接比较。最好依据经济理论和专业知识决定 \(Y\) 是否取对数:劳动经济学家常对收入取对数,因为工资比较、合同涨薪天然以百分比讨论;考试成绩则更自然地以分数讨论,所以原书聚焦因变量为成绩本身的模型。
\(Y\) 取对数时如何预测 \(Y\)(进阶)。 对 (8.19) 两边取指数:
所以 \(E(Y_i\mid X_i)=e^{\beta_0+\beta_1X_i}E(e^{u_i}\mid X_i)\)。问题在于:即使 \(E(u_i\mid X_i)=0\),\(E(e^{u_i}\mid X_i)\) 一般也不等于 1;由 Jensen 不等式,\(E(e^{u})\ge e^{E(u)}=1\)。例如 \(u\sim N(0,\sigma^2)\) 时 \(E(e^u)=e^{\sigma^2/2}\)。因此直接用 \(\hat Y_i=e^{\hat\beta_0+\hat\beta_1X_i}\) 会系统性低估 \(E(Y\mid X)\)。一种解决办法是估计 \(E(e^{u_i}\mid X_i)\);若 \(u\) 与 \(X\) 独立,可以用残差的样本均值 \(\frac1n\sum e^{\hat u_i}\) 去乘(称为 Duan 的 smearing 估计),异方差时则更复杂(原书习题 17.12)。原书的做法是只计算 \(\ln Y\) 的预测值、不转换回原单位,因为 \(Y\) 取对数时通常本来就全程使用对数和百分比解释。
金融直觉:你在 CFA 里见过的对数正态股价就是同一回事。若 \(\ln S_T\sim N(\mu,\sigma^2)\),则 \(E(S_T)=e^{\mu+\sigma^2/2}\),而不是 \(e^{\mu}\);\(e^{\mu}\) 只是中位数。这里 \(e^{\hat\beta_0+\hat\beta_1X}\) 同样只估计了 \(Y\) 的条件中位数(在 \(u\) 对称时),要得到均值必须乘上 \(E(e^u)\)。 数值例子:对数回归残差标准差 0.6(量化实战代码中冲击成本模型就设了这个值),正态时修正因子为 \(e^{0.36/2}=e^{0.18}\approx1.20\)。不修正,平均冲击成本会低估约 17%(\(1-1/1.20\))。对估算交易成本预算而言,这不是小误差。 「Jensen 不等式」的直观:\(e^u\) 是凸函数,\(u\) 往上偏一点带来的增加,大于往下偏同样多带来的减少,正负误差相互抵消后平均值仍然被抬高。
8.2.3 多项式与对数模型的比较
真实的函数形式未知,需要决定哪种方法或组合最好。
- 多项式: 三次 (8.11) 中 \(Income^3\) 在 5% 水平显著,优于二次,选三次。
- 对数: 线性-对数 (8.18) 看起来拟合不错,但还没有正式检验。办法是加入 \(\ln(Income)\) 的高次幂:
\[\widehat{TestScore}=\underset{(79.4)}{486.1}+\underset{(87.9)}{113.4}\ln(Income)-\underset{(31.7)}{26.9}[\ln(Income)]^2+\underset{(3.74)}{3.06}[\ln(Income)]^3,\quad\bar R^2=0.560.\tag{8.26}\]三次项 t = 0.818,10% 水平不拒绝;二次与三次项联合为零的 F = 0.44,p = 0.64,不拒绝。所以对数三次模型相对 (8.18) 没有显著改进。
- 三次 vs. 线性-对数: 原书图 8.7 中两条估计曲线几乎重合;两者因变量相同,可以比较 \(\bar R^2\):0.561 vs. 0.555,而且对数设定不需要高次项,更简洁。最终采用线性-对数设定 (8.18)。
8.3 自变量之间的交互作用
动机:如果英语学习者特别受益于小班或小组教学,那么降低师生比的效应就依赖英语学习者比例,即两个自变量存在交互。下面分三种情形:两个二元变量、一个二元一个连续、两个连续。
8.3.1 两个二元变量的交互
令 \(Y_i=\ln(Earnings_i)\),\(D_{1i}\) 表示是否大学毕业,\(D_{2i}\) 表示是否女性:
\(\beta_1\) 是保持性别不变时大学学位的效应,\(\beta_2\) 是保持学历不变时的男女差异。局限在于:学位的效应对男女相同,没有理由必须如此。加入交互项(interaction term,或交互回归元 interacted regressor)\(D_{1i}\times D_{2i}\):
称为二元变量交互回归模型(binary variable interaction regression model)。用 Key Concept 8.1:\(E(Y\mid D_1=0,D_2=d_2)=\beta_0+\beta_2d_2\),\(E(Y\mid D_1=1,D_2=d_2)=\beta_0+\beta_1+\beta_2d_2+\beta_3d_2\),所以
男性(\(d_2=0\))的学位效应为 \(\beta_1\),女性为 \(\beta_1+\beta_3\);\(\beta_3\) 是女性与男性学位效应之差。
白话解释:把四个组的期望值排成 2×2 表就一目了然: 男·无学位 \(\beta_0\);男·有学位 \(\beta_0+\beta_1\);女·无学位 \(\beta_0+\beta_2\);女·有学位 \(\beta_0+\beta_1+\beta_2+\beta_3\)。 女性组内「有学位减无学位」是 \(\beta_1+\beta_3\),男性组内是 \(\beta_1\),两者再相减得 \(\beta_3\)。所以 \(\beta_3\) 是一个「差中之差」:先在每个性别内做差,再对两个差做差。这个结构在第 13 章会以「双重差分」(difference-in-differences) 的名字再次出现,那里的两个维度换成「处理组/对照组」和「政策前/政策后」。
Key Concept 8.3(含二元变量的回归如何解释系数) 先计算二元变量所有可能组合下 \(Y\) 的期望值,再比较这些期望值。每个系数都可以表示为某个期望值,或若干期望值之差。
应用。 \(HiSTR_i=1\) 若 STR ≥ 20;\(HiEL_i=1\) 若英语学习者比例 ≥ 10%。
从低师生比到高师生比的效应为 \(-1.9-3.5HiEL\):英语学习者少的学区降 1.9 分,多的学区降 5.4 分。四组的样本均值为:(HiSTR, HiEL) = (0,0) 时 664.1;(1,0) 时 662.2;(0,1) 时 645.9;(1,1) 时 640.5(= 664.1 − 1.9 − 18.2 − 3.5)。含全部交互的二元变量回归,其拟合值就是各组的样本均值。
8.3.2 连续变量与二元变量的交互
令 \(Y_i\) 为对数收入,\(X_i\) 为工作经验年数(连续),\(D_i\) 表示是否大学毕业。原书图 8.8 展示三种设定:
(a) 截距不同、斜率相同:
\(D=0\) 时回归线为 \(\beta_0+\beta_1X\),\(D=1\) 时为 \((\beta_0+\beta_2)+\beta_1X\);\(\beta_2\) 是截距差,经验的效应对两组相同。
(b) 截距与斜率都不同:
\(D=0\) 时为 \(\beta_0+\beta_1X\),\(D=1\) 时为 \((\beta_0+\beta_2)+(\beta_1+\beta_3)X\)。截距差为 \(\beta_2\),斜率差为 \(\beta_3\),即大学毕业生与非毕业生每多一年经验的效应之差。
(c) 截距相同、斜率不同:
它要求两组在零经验时期望对数收入相同,即入职工资相同,在这个应用中不太合理,实践中比 (b) 少用。
三者都是多元回归,生成 \(X_i\times D_i\) 后即可用 OLS。原书 Key Concept 8.4 汇总了这三种设定。
应用。
HiEL = 0 时回归线为 \(682.2-0.97STR\);HiEL = 1 时为 \(687.8-2.25STR\)。师生比降 1,英语学习者少的学区成绩提高 0.97 分,多的学区提高 2.25 分,差 1.28 分,正是交互项系数。
还可以评估更精细的政策:只在 HiEL = 1 的学区把师生比降 2,效应为 \(-2(\hat\beta_1+\hat\beta_3)=4.50\),SE \(=SE(-2\hat\beta_1-2\hat\beta_3)=1.53\)(用式 8.8 或 7.3 节的方法)。
四个检验:
- 两条线相同(HiEL 与交互项系数都为 0):F = 89.9,1% 水平显著。
- 斜率相同(交互项系数为 0):\(t=-1.28/0.97=-1.32\),10% 水平不能拒绝。
- 截距相同(HiEL 系数为 0):\(t=5.6/19.5=0.29\),5% 水平不能拒绝。
- STR 不进入模型(STR 与交互项系数都为 0):F = 5.64,p = 0.004,1% 水平联合显著。
看似矛盾: 联合 F 拒绝「斜率和截距都相同」,单个 t 却都不拒绝。原因是 HiEL 与 \(STR\times HiEL\) 高度相关,单个系数的 SE 很大。虽然无法判断哪个系数非零,但有强证据表明两者不全为零。这是交互项设计中常见的共线问题,与第 07 章「单个不显著、联合显著」是同一回事。
8.3.3 原书方框:老龄化对医疗支出的影响是「红鲱鱼」吗?
西欧的「婴儿潮」一代正步入退休,老龄人口比例上升。OECD 的初步估计很悲观:老年人平均医疗支出(healthcare expenditures,HCE)更高,老龄化将给公共财政带来上行压力。但如果人们更健康地老去呢?学术界的共识是:决定 HCE 的不是年龄本身,而是离死亡的时间(time-to-death,TTD)。80 岁或 85 岁去世的人,与 70 岁或 75 岁去世的人更相似,而不像另一个活到 100 岁的 80 岁老人。年龄因此被称为「红鲱鱼」(red herring,只是真实决定因素的代理),TTD 是以往回归的遗漏变量。
Howdon 与 Rice(2018)用英格兰约 40,000 人的两个样本(2005–06 至 2011–12),以 ln(HCE) 为因变量。表 8.1(男性):
| 回归元 | (1) | (2) | (3) |
|---|---|---|---|
| Age | −0.01459** (0.00654) | −0.01274* (0.00652) | −0.00518 (0.00526) |
| Age² | 0.00010** (0.00004) | 0.00009** (0.00004) | 0.00003 (0.00003) |
| ln(TTD) | −0.42375*** (0.01467) | −0.14454*** (0.01206) | |
| 患病情况(morbidities) | 纳入(联合 ***) |
由列 (1),80 岁到 81 岁 HCE 的平均百分比变化为 \(1\times(-0.01459)+(81^2-80^2)\times0.00010=0.00151\),即 0.151%(对数-线性加二次项)。加入 ln(TTD) 后,年龄系数的绝对值和显著性都下降,而 ln(TTD) 高度显著:离死亡的时间远 1%,HCE 平均下降约 0.42%(对数-对数,弹性)。但 TTD 本身也可能是「红鲱鱼」,只是在代理个人患病情况;列 (3) 纳入患病控制后,TTD 和年龄的系数大小与显著性都进一步下降。如果人们不仅更健康地变老,而且更健康地走向死亡,这对预测未来 HCE 很重要。启示:放哪些变量,取决于你要回答的确切问题。
8.3.4 两个连续变量的交互
令 \(Y_i\) 为对数收入,\(X_{1i}\) 为工作经验,\(X_{2i}\) 为受教育年数。线性模型中经验的效应不依赖教育;加入乘积交互项:
由 Key Concept 8.1,\(\Delta Y=(\beta_1+\beta_3X_2)\Delta X_1\),即
若 \(\beta_3>0\),工人每多受一年教育,额外一年经验对对数收入的效应就大 \(\beta_3\)。同理 \(\Delta Y/\Delta X_2=\beta_2+\beta_3X_1\)。两者同时变化时:
前两项分别是单独改变 \(X_1\)、\(X_2\) 的效应,最后一项 \(\beta_3\Delta X_1\Delta X_2\) 是同时变化带来的额外效应。
推导拆解:把新旧两个预测值直接相减。 新值:\(\beta_0+\beta_1(X_1+\Delta X_1)+\beta_2(X_2+\Delta X_2)+\beta_3(X_1+\Delta X_1)(X_2+\Delta X_2)\)。 乘积项展开:\((X_1+\Delta X_1)(X_2+\Delta X_2)=X_1X_2+X_2\Delta X_1+X_1\Delta X_2+\Delta X_1\Delta X_2\)。 减去旧值 \(\beta_0+\beta_1X_1+\beta_2X_2+\beta_3X_1X_2\) 后,剩下 \(\beta_1\Delta X_1+\beta_2\Delta X_2+\beta_3(X_2\Delta X_1+X_1\Delta X_2+\Delta X_1\Delta X_2)\),按 \(\Delta X_1\)、\(\Delta X_2\) 归类即得正文公式。 若只改 \(X_1\)(\(\Delta X_2=0\)),两边除以 \(\Delta X_1\) 就是 (8.36)。用导数的语言,(8.36) 就是 \(\partial E(Y\mid X_1,X_2)/\partial X_1\)。 一个实用提醒:此时 \(\beta_1\) 只是 \(X_2=0\) 时 \(X_1\) 的斜率。若 \(X_2=0\) 不在数据范围内(例如受教育年数为 0),\(\beta_1\) 本身没有实际意义,t 检验它也意义不大。常见做法是先把 \(X_2\) 减去均值再做交互,这样 \(\beta_1\) 就变成「\(X_2\) 处于平均水平时 \(X_1\) 的斜率」。
Key Concept 8.5(多元回归中的交互) \(X_1\) 与 \(X_2\) 的交互项是乘积 \(X_1\times X_2\)。纳入它,\(X_1\) 对 \(Y\) 的效应就依赖 \(X_2\),反之亦然。交互项的系数是 \(X_1\)、\(X_2\) 各增加一单位时,超出两者单独效应之和的部分。无论变量是连续还是二元,这一解释都成立。交互与对数结合,可以估计依赖商品特征的价格弹性。
8.3.5 原书方框:经济学期刊的需求
问题:美国图书馆对经济学期刊的需求弹性有多大?数据为 2000 年 180 种经济学期刊的美国图书馆订阅数 \(Y_i\) 和订阅价格。期刊卖的是思想,所以价格应以「每个思想多少钱」衡量;用被引次数间接度量思想,即「每次引用的价格」(price per citation)。它的范围极大:从约 0.5 美分(American Economic Review)到 20 美分以上。2017 年 Journal of Econometrics 的图书馆纸本订阅价为 5363 美元,而美国经济学会全部八种期刊(含 AER)的捆绑订阅只要 940 美元。
原书图 8.9:(a) 订阅量与每引用价格呈非线性的反向关系;(b) 取对数后近似线性;(c) 年轻期刊(Age = 5)的需求比老期刊(Age = 80)更有弹性。因为要估计弹性,用对数-对数设定;又因为一些最老、最有声望的期刊每引用价格最便宜,只做数量对价格的回归可能有遗漏变量偏差,所以控制 ln(Age) 和 ln(每年字符数/百万)。
表 8.2(因变量 ln 订阅数;\(n=180\);均含截距)
| 回归元 | (1) | (2) | (3) | (4) |
|---|---|---|---|---|
| ln(每引用价格) | −0.533 (0.034) | −0.408 (0.044) | −0.961 (0.160) | −0.899 (0.145) |
| [ln 价格]² | 0.017 (0.025) | |||
| [ln 价格]³ | 0.0037 (0.0055) | |||
| ln(Age) | 0.424 (0.119) | 0.373 (0.118) | 0.374 (0.118) | |
| ln(Age) × ln(价格) | 0.156 (0.052) | 0.141 (0.040) | ||
| ln(字符数/10⁶) | 0.206 (0.098) | 0.235 (0.098) | 0.229 (0.096) | |
| 二次、三次项 F (p) | 0.25 (0.779) | |||
| SER | 0.750 | 0.705 | 0.691 | 0.688 |
| \(\bar R^2\) | 0.555 | 0.607 | 0.622 | 0.626 |
结论:(1) 老期刊的需求弹性更小(交互项为正且显著);(2) 证据支持 ln 价格以线性而不是三次形式进入(F = 0.25,p = 0.779);(3) 保持价格和年龄不变,字符数越多需求越大。弹性随期刊年龄变化:由列 (4),弹性为 \(-0.899+0.141\ln(Age)\);80 岁的期刊约为 −0.28(SE 0.06),5 岁的期刊约为 −0.67(SE 0.08)。需求非常缺乏弹性,对图书馆而言最新研究是必需品而不是奢侈品。作为对比,香烟的需求弹性约为 −0.3 到 −0.5:经济学期刊和香烟一样「上瘾」,只是对健康好得多。
8.3.6 应用:STR 与连续 PctEL 的交互
PctEL 取中位数 8.85 时,STR 的斜率为 \(-1.12+0.0012\times8.85=-1.11\);取第 75 百分位 23.0 时为 −1.09,略平一点。但交互项的 \(t=0.0012/0.019=0.06\),在 10% 水平都不显著。8.1–8.3 节没有纳入经济背景等控制变量,结果可能有遗漏变量偏差,这正是下一节要做的事。
8.4 师生比对考试成绩的非线性效应
三个问题:(1) 控制学区经济特征后,降低师生比的效应是否依赖英语学习者比例?(2) 是否依赖师生比本身的取值?(3) 最重要的:考虑经济因素和非线性之后,师生比降 2 的效应估计是多少?
控制变量为午餐补贴资格比例和学区平均收入的对数(8.2 节表明对数形式能刻画收入与成绩的非线性)。与 7.6 节一样,不纳入生均支出,即考虑的是允许生均支出随之增加时降低师生比的效应。
表 8.3(因变量:学区平均成绩;\(n=420\);均含截距;Y/N 表示是否纳入该经济控制变量)
| 回归元 | (1) | (2) | (3) | (4) | (5) | (6) | (7) |
|---|---|---|---|---|---|---|---|
| STR | −1.00 (0.27) | −0.73 (0.26) | −0.97 (0.59) | −0.53 (0.34) | 64.33 (24.86) | 83.70 (28.50) | 65.29 (25.26) |
| STR² | −3.42 (1.25) | −4.38 (1.44) | −3.47 (1.27) | ||||
| STR³ | 0.059 (0.021) | 0.075 (0.024) | 0.060 (0.021) | ||||
| PctEL | −0.122 (0.033) | −0.176 (0.034) | −0.166 (0.034) | ||||
| HiEL | 5.64 (19.51) | 5.50 (9.80) | −5.47 (1.03) | 816.1 (327.7) | |||
| HiEL × STR | −1.28 (0.97) | −0.58 (0.50) | −123.3 (50.2) | ||||
| HiEL × STR² | 6.12 (2.54) | ||||||
| HiEL × STR³ | −0.101 (0.043) | ||||||
| 午餐资格 % | Y | Y | N | Y | Y | Y | Y |
| ln(学区收入) | N | Y | N | Y | Y | Y | Y |
| SER | 9.08 | 8.64 | 15.88 | 8.63 | 8.56 | 8.55 | 8.57 |
| \(\bar R^2\) | 0.773 | 0.794 | 0.305 | 0.795 | 0.798 | 0.799 | 0.798 |
师生比降 2 的效应的 95% 置信区间:
- 无交互的线性模型 (1)(2):[0.93, 3.06],[0.46, 2.48];
- 三次模型 (5)(7):22→20 为 [0.61, 3.25]、[0.54, 3.26];20→18 为 [1.64, 4.36]、[1.55, 4.30];
- 线性交互 (3)(4):HiEL = 0 时 [−0.38, 4.25]、[−0.28, 2.41];HiEL = 1 时 [1.48, 7.50]、[0.80, 3.63];
- 三次交互 (6):HiEL = 0 时 22→20 为 [0.40, 3.98]、20→18 为 [1.22, 4.99];HiEL = 1 时 22→20 为 [−0.98, 2.91]、20→18 为 [−0.72, 4.01]。
联合检验的 F(p 值): 所有 STR 变量及其交互为零:(3) 5.64 (0.004),(4) 5.92 (0.003),(5) 6.31 (<0.001),(6) 4.96 (<0.001),(7) 5.91 (0.001);STR²、STR³ 为零:(5) 6.17 (<0.001),(6) 5.81 (0.003),(7) 5.96 (0.003);HiEL×STR、HiEL×STR²、HiEL×STR³ 为零:(6) 2.69 (0.046)。
8.4.1 逐列讨论
- (1) 即表 7.1 的列 (3)。(2) 加入对数收入:它在 1% 水平显著,STR 的系数从 −1.00 变为 −0.73(仍在 1% 水平显著)。变化足够大,所以后续回归都控制对数收入,以防遗漏变量偏差。
- (3) 即 (8.34),没有经济控制;(4) 加入经济控制后,高/低英语学习者学区的班级规模效应都变小,但置信区间都很宽;「STR 效应在两组相同」在 5% 水平不能拒绝(\(t=-0.58/0.50=-1.16\))。
- (5) 加入 STR 的三次项(因为 (4) 中 HiEL×STR 在 10% 水平都不显著,所以不再纳入交互)。证据支持非线性:STR²、STR³ 都为零的 F = 6.17,p < 0.001,在 1% 水平拒绝线性;20→18 的效应大于 22→20。
- (6) 加入 HiEL 与 STR、STR²、STR³ 的交互,检验高/低英语学习者两组的三次函数是否不同:F = 2.69,p = 0.046,5% 水平显著但 1% 水平不显著,算是初步证据;但与 (4) 对比可知,差异来自二次、三次项,而且 (6) 的置信区间都很宽。
- (7) 用连续的 PctEL 代替 HiEL:其他系数变化不大,说明 (5) 的结果对英语学习者比例的度量方式不敏感。
- 所有设定中,「STR 不进入回归」都在 1% 水平被拒绝。
8.4.2 用图解读
非线性设定最容易用图解释。原书图 8.10 画出了线性 (2) 与三次 (5)(7) 的估计回归函数(除 STR 外,其他自变量都固定在样本均值,计算不同 STR 下的预测值):三条曲线很接近,三次回归在 STR 很大时变平;(5) 与 (7) 几乎重合,显示只有少量非线性。
原书图 8.11 画出回归 (6) 中 HiEL = 0 与 HiEL = 1 的两条三次函数:在 STR 为 17–23 之间(包含 88% 的观测),两条曲线相差约 10 分,但形状和斜率相似。英语学习者少的学区成绩更高,但师生比变化的效应两组基本相同。STR < 16.5 时两条函数不同,但这类学区只占 6%,差异只反映极少数观测,不应过度解读。结论:在数据最多的范围内,师生比的效应不依赖英语学习者比例。
8.4.3 结论
- 控制经济背景后,班级规模效应依赖英语学习者多寡的证据很弱。 高英语学习者学区的估计效应更大,但差异估计不精确,而且在数据集中的范围内,两条回归函数的斜率相似。
- 控制经济背景后,有证据表明 STR 对成绩有非线性效应。 中等规模的班级降低师生比的效应最大,很小或很大的班级效应较小;在 1% 水平拒绝线性。
- 回到督学的问题(师生比降 2)。 线性设定 (2) 中,效应与 STR 的取值无关,为 \(-0.73\times(-2)=1.46\) 分。非线性设定中,效应依赖当前的 STR:依据 (5),若当前为 20、降到 18,效应为 3.00 分,95% 置信区间 (1.64, 4.36);若当前为 22、降到 20,效应为 1.93 分,置信区间 (0.61, 3.25);(7) 的结果类似。非线性设定可以根据学区的具体情况给出更细致的回答。
8.5 对参数非线性的回归函数与非线性最小二乘(原书附录 8.1)
8.2、8.3 节的函数对 \(X\) 非线性、对参数线性,定义新的回归元后就能用 OLS,这一族函数既丰富又方便。但有时经济推理会导出对参数也非线性的函数,此时需要 OLS 的推广:非线性最小二乘(nonlinear least squares,NLLS)。
Logistic 曲线。 研究某项技术(如机器学习软件)在各行业的市场渗透,因变量是采纳企业的比例(0–1 之间)。线性模型的预测值可能超出 [0, 1],更适合用取值在 0–1 之间的函数:
它是一条拉长的 S 形曲线:\(X\) 小时接近 0 且平坦,中间陡,\(X\) 大时趋近 1 又变平。
负指数增长(negative exponential growth)。 8.2 节的模型各有缺陷:多项式可能在某些收入处出现负斜率,不合理;对数设定的斜率始终为正,但收入很大时预测值无界增长,可能超过考试的最高分。负指数增长模型斜率始终为正、在低收入处最陡、随收入递减,并且有上界:
\(\beta_0,\beta_1>0\) 时,低 \(X\) 处陡,\(X\) 增大时趋近渐近线 \(\beta_0\)。
一般形式。
\(k\) 个自变量、\(m+1\) 个参数,参数以非线性方式进入。参数已知时,可以用 8.1 节的方法计算预测效应;未知时需要从数据估计。
NLLS 估计。 回忆 OLS 原则上可以通过尝试许多参数值、选出使预测误差平方和最小者来求得。同理,对试验参数 \(b_0,\dots,b_m\) 构造
使之最小者即 NLLS 估计量。与线性回归不同,NLLS 一般没有显式公式,必须用计算机数值求解(Gauss–Newton、Levenberg–Marquardt 等算法,见第 04 册第 10 章「非线性最小二乘」)。在关于 \(f\) 和 \(X\) 的一般条件下,NLLS 与 OLS 共享两个关键性质:一致、大样本正态。软件通常报告参数的标准误,推断照常进行:t 统计量按 Key Concept 5.1 构造,95% 置信区间为估计值 ± 1.96 SE。与线性回归一样,误差可能异方差,应使用异方差稳健 SE;其形式是把 OLS 三明治公式中的 \(x_i\) 换成 \(f\) 对参数的梯度 \(\partial f(X_i;\hat b)/\partial b\)。
白话解释:「梯度」是把 \(f\) 对每个参数的偏导数排成一列向量,记作 \(\partial f/\partial b\) 或 \(\nabla_b f\),表示每个参数微调一点时预测值变多少。为什么它能替代 \(x_i\)?在线性回归 \(f=b_0+b_1x_i\) 中,\(\partial f/\partial b_0=1\)、\(\partial f/\partial b_1=x_i\),梯度恰好就是 \((1,x_i)\),即回归元本身。NLLS 在估计值附近把 \(f\) 对参数做一阶泰勒展开,局部看就是一个以梯度为「回归元」的线性回归,所以 OLS 的标准误公式可以照搬。 「数值求解」的含义:没有像 OLS 那样一步算出的公式,只能从一个初始猜测出发,反复调整参数让残差平方和下降,直到不再下降。初始值选得差,可能停在局部最小值,所以实际使用时要试几组初始值。
应用。 用负指数增长模型拟合收入与成绩:
即 \(\hat\beta_0=703.2\),\(\hat\beta_1=0.0552\),\(\hat\beta_2=-34.0\)(稳健 SE)。原书图 8.13 中,它与线性-对数函数非常接近,差别是负指数增长曲线在最高收入处变平,符合存在渐近线的设定。
8.6 非线性回归函数的斜率与弹性(原书附录 8.2)
用微积分计算连续回归元的斜率与弹性。模型 \(Y_i=f(X_i)+u_i\),\(E(u_i\mid X_i)=0\),在 \(X=x\) 处的斜率为 \(df(X)/dX|_{X=x}\);多个 \(X\) 时用偏导数。
多项式。 \(f(X)=\beta_0+\beta_1X+\cdots+\beta_rX^r\),斜率为 \(\beta_1+2\beta_2x+\cdots+r\beta_rx^{r-1}\)。估计斜率时把 \(\beta\) 换成 \(\hat\beta\);给定 \(x\) 时,它是回归系数的加权和,其 SE 可用 7.3 节的方法或式 (8.8) 计算。
弹性。 弹性是 \(X\) 的百分比变化趋于 0 时的极限:
推导拆解:为什么 \(\frac{dY}{dX}\cdot\frac{X}{Y}=\frac{d\ln Y}{d\ln X}\)? 用链式法则:\(d\ln Y=\frac{1}{Y}dY\),\(d\ln X=\frac{1}{X}dX\)(因为 \(\ln\) 的导数是倒数)。两式相除得 \(\frac{d\ln Y}{d\ln X}=\frac{dY/Y}{dX/X}=\frac{dY}{dX}\cdot\frac{X}{Y}\)。 含义:在对数坐标里画图,曲线的斜率就是弹性。对数-对数模型在对数坐标里是直线,斜率处处相同,所以弹性是常数 \(\beta_1\)。 与久期对照:修正久期是 \(-\frac{dP}{dy}\cdot\frac{1}{P}\),是「价格的百分比变化 / 收益率的绝对变化」,属于半弹性(对应对数-线性模型的 \(\beta_1\));弹性则是「百分比 / 百分比」。
回归模型中 \(Y\) 依赖 \(X\) 和 \(u\),惯例是计算预测部分 \(E(Y\mid X)\) 的弹性:\(\dfrac{dE(Y\mid X)}{dX}\times\dfrac{X}{E(Y\mid X)}=\dfrac{d\ln E(Y\mid X)}{d\ln X}\)。
| 情形 | 总体回归模型 | \(E(Y\mid X)\) 对 \(X\) 的弹性 |
|---|---|---|
| 线性 | \(Y=\beta_0+\beta_1X+u\) | \(\dfrac{\beta_1X}{\beta_0+\beta_1X}\) |
| 线性-对数 | \(Y=\beta_0+\beta_1\ln X+u\) | \(\dfrac{\beta_1}{\beta_0+\beta_1\ln X}\) |
| 对数-线性 | \(\ln Y=\beta_0+\beta_1X+u\) | \(\beta_1X\) |
| 对数-对数 | \(\ln Y=\beta_0+\beta_1\ln X+u\) | \(\beta_1\) |
只有对数-对数设定的弹性是常数,其他三种都依赖 \(X\)。推导示例:线性-对数中 \(dE(Y\mid X)/dX=\beta_1/X\),乘以 \(X/(\beta_0+\beta_1\ln X)\) 即得。对数-线性中,惯例再假设 \(u\) 与 \(X\) 独立,则 \(E(Y\mid X)=ce^{\beta_0+\beta_1X}\),\(c=E(e^u)\) 是与 \(X\) 无关的常数,\(dE(Y\mid X)/dX=ce^{\beta_0+\beta_1X}\beta_1\),弹性为 \(\beta_1X\)。
量化实战
本章方法在量化里的位置
对数收益与百分比近似。 \(\ln(1+r)\approx r\) 是式 (8.16) 的直接应用,误差随 \(r\) 增大而增大。对数收益可以跨期相加(复利),适合时间序列建模和多期累计;简单收益可以跨资产加权平均,适合组合收益计算与截面比较。日收益两者差别很小,月度或年度收益、尤其是小盘股和加密资产,差别不可忽略。
对数变换与弹性。 市值、成交额、价格等变量高度右偏,因子构造中几乎总是用 ln(市值)。交易成本模型中,冲击成本对参与率(\(Q/ADV\))的弹性正是对数-对数回归的系数;经验研究中这个弹性常在 0.5 左右,即所谓「平方根律」。用 ln 冲击成本做回归后再预测平均成本时,必须做 \(E(e^u)\) 修正,否则会系统性低估成本。同样的问题出现在预测波动率(对 ln 波动率建模)和成交量时。
多项式与非线性因子效应。 因子收益常常不是线性的:市值效应集中在小盘端,很多异象只在极端分位存在。可以用二次、三次项或分组虚拟变量(门槛效应,原书习题 8.3)建模,用 F 检验线性。高次多项式外推很危险,尾部数据稀少时(类似原书图 8.11 中 STR < 16.5 只占 6% 的观测)不要过度解读。
交互项 = 条件因子效应。 因子在不同市场状态(牛/熊、高/低波动)下、在不同股票特征(大/小盘、高/低流动性)下效应不同,可以用「因子 × 状态虚拟变量」或「因子 × 连续特征」的交互项建模,系数按 Key Concept 8.3–8.5 解释。期刊需求例中「弹性随年龄变化」的思路可以直接迁移为「因子载荷随市值或换手率变化」。交互项常与主效应高度共线,要看联合 F。
边际效应的标准误。 某一点的边际效应(例如某个流动性水平下的信号斜率)是系数的线性组合,SE 必须包含协方差项(式 8.7–8.8),不能只看单个系数的 SE。
Logistic 与 NLLS。 Logistic 曲线可以描述取值在 0–1 的量,如限价单成交概率、违约概率;NLLS 用于拟合 Nelson–Siegel 收益率曲线(对参数非线性)、隐含波动率曲面的参数化、冲击衰减曲线等,需要数值优化,并应使用稳健 SE。若因变量本身是 0/1 结果,更标准的做法是第 11 章的 logit/probit(极大似然),但 NLLS 同样一致。
先控制、再探索非线性。 8.4 节「先确定控制变量、再检验非线性或交互」的顺序,对应因子研究中「先做风格中性化,再检验非线性或条件效应」。
示例:对数收益、平方根律、非线性因子效应、条件效应与 NLLS
import numpy as np
import statsmodels.api as sm
from scipy.optimize import curve_fit
rng = np.random.default_rng(11)
# ---- 1. 对数收益近似:ln(1+r) ≈ r 的误差随 r 增大 ----
for r in (0.01, 0.05, 0.10, 0.30):
print(f"简单收益 {r:5.2f} -> 对数收益 {np.log1p(r):.4f} (差 {r-np.log1p(r):.4f})")
# ---- 2. 对数-对数回归:估计冲击成本的平方根律 ----
n = 5000
part = np.exp(rng.uniform(np.log(0.001), np.log(0.2), n)) # 参与率 Q/ADV
vol = np.exp(rng.normal(np.log(0.02), 0.3, n)) # 日波动率
u = rng.normal(0, 0.6, n) # 对数误差,sd=0.6
impact = 1e4 * 0.8 * vol * part**0.5 * np.exp(u) # 冲击成本(bp)
X = sm.add_constant(np.column_stack([np.log(part), np.log(vol)]))
fit = sm.OLS(np.log(impact), X).fit(cov_type="HC1")
b = fit.params
print(f"参与率弹性 = {b[1]:.3f} (SE {fit.bse[1]:.3f}), 检验 =0.5 的 t = {(b[1]-0.5)/fit.bse[1]:.2f}")
x0 = np.array([1, np.log(0.05), np.log(0.02)]) # 参与率 5%、波动率 2%
naive = np.exp(x0 @ b)
smear = naive * np.mean(np.exp(fit.resid)) # Duan smearing 修正 E(e^u)
true_mean = 1e4 * 0.8 * 0.02 * 0.05**0.5 * np.exp(0.6**2 / 2)
print(f"预测平均冲击:直接取指数 {naive:.1f} bp, smearing 修正 {smear:.1f} bp, 真值 {true_mean:.1f} bp")
# ---- 3. 多项式:收益与市值的非线性关系,序贯检验 ----
N = 4000
size = rng.uniform(-2, 2, N) # 标准化 ln(市值)
f_true = lambda s: 0.001 * (s - 2)**2 # 小盘端收益高、大盘端趋平
ret = f_true(size) + 0.03 * rng.standard_normal(N)
def poly(r):
return sm.add_constant(np.column_stack([size**j for j in range(1, r + 1)]))
r = 4 # 序贯检验:从 4 次往下
while r > 1:
f = sm.OLS(ret, poly(r)).fit(cov_type="HC1")
print(f"{r} 次多项式:最高次项 t = {f.tvalues[-1]:.2f}")
if abs(f.tvalues[-1]) > 1.96:
break
r -= 1
R = np.eye(r + 1)[2:] # 检验线性:2..r 次项系数全为 0
print(f"选定 {r} 次;检验线性的稳健 F = {f.f_test(R).fvalue:.1f} (q = {r-1})")
for s0 in (-1.5, 1.5): # 小盘端与大盘端 Δsize=0.5 的效应
w = np.r_[0, [(s0 + 0.5)**j - s0**j for j in range(1, r + 1)]] # ΔY 是系数的线性组合
tt = f.t_test(w)
print(f"size 从 {s0} 增到 {s0+0.5}: 收益变化 {tt.effect[0]*1e4:.1f} bp (SE {tt.sd[0][0]*1e4:.1f} bp), "
f"真值 {(f_true(s0+0.5)-f_true(s0))*1e4:.1f} bp")
# ---- 4. 交互项:信号效应随流动性变化 ----
sig = rng.standard_normal(N)
illiq = rng.standard_normal(N) # 标准化非流动性
r2 = 0.002 * sig + 0.0015 * sig * illiq + 0.001 * illiq + 0.03 * rng.standard_normal(N)
Xi = sm.add_constant(np.column_stack([sig, illiq, sig * illiq]))
fi = sm.OLS(r2, Xi).fit(cov_type="HC1")
print(f"交互项系数 = {fi.params[3]*1e4:.1f} bp (t = {fi.tvalues[3]:.2f})")
for lv in (-1.0, 0.0, 1.0):
tt = fi.t_test(np.array([0, 1, 0, lv])) # dY/dsig = b1 + b3*illiq
F = fi.f_test(np.array([[0, 1, 0, lv]])).fvalue
print(f"非流动性 = {lv:+.0f} 时信号斜率 {tt.effect[0]*1e4:.1f} bp, SE {tt.sd[0][0]*1e4:.1f} bp, "
f"|效应|/sqrt(F) = {abs(tt.effect[0])/np.sqrt(F)*1e4:.1f} bp")
# ---- 5. 非线性最小二乘:限价单成交概率的 logistic 曲线 + 稳健 SE ----
m = 2000
dist = rng.uniform(0, 10, m) # 挂单距中间价的 tick 数
p_true = 1 / (1 + np.exp(-(2.0 - 0.6 * dist)))
fill = (rng.uniform(size=m) < p_true).astype(float) # 是否成交
logistic = lambda x, b0, b1: 1 / (1 + np.exp(-(b0 + b1 * x)))
est, _ = curve_fit(logistic, dist, fill, p0=[0.0, -0.1])
p_hat = logistic(dist, *est)
J = np.column_stack([p_hat * (1 - p_hat), p_hat * (1 - p_hat) * dist]) # 对 (b0,b1) 的梯度
e = fill - p_hat
bread = np.linalg.inv(J.T @ J)
cov_rob = bread @ (J.T * e**2) @ J @ bread
print(f"NLLS: b0 = {est[0]:.3f} (稳健 SE {np.sqrt(cov_rob[0,0]):.3f}), "
f"b1 = {est[1]:.3f} (稳健 SE {np.sqrt(cov_rob[1,1]):.3f})")
关键输出:
简单收益 0.01 -> 对数收益 0.0100 (差 0.0000)
简单收益 0.05 -> 对数收益 0.0488 (差 0.0012)
简单收益 0.10 -> 对数收益 0.0953 (差 0.0047)
简单收益 0.30 -> 对数收益 0.2624 (差 0.0376)
参与率弹性 = 0.506 (SE 0.006), 检验 =0.5 的 t = 1.00
预测平均冲击:直接取指数 35.8 bp, smearing 修正 42.9 bp, 真值 42.8 bp
4 次多项式:最高次项 t = 0.23
3 次多项式:最高次项 t = 0.10
2 次多项式:最高次项 t = 3.08
选定 2 次;检验线性的稳健 F = 9.5 (q = 1)
size 从 -1.5 增到 -1.0: 收益变化 -33.4 bp (SE 5.5 bp), 真值 -32.5 bp
size 从 1.5 增到 2.0: 收益变化 3.8 bp (SE 7.2 bp), 真值 -2.5 bp
交互项系数 = 13.9 bp (t = 2.87)
非流动性 = -1 时信号斜率 5.4 bp, SE 6.6 bp, |效应|/sqrt(F) = 6.6 bp
非流动性 = +0 时信号斜率 19.3 bp, SE 4.8 bp, |效应|/sqrt(F) = 4.8 bp
非流动性 = +1 时信号斜率 33.2 bp, SE 7.1 bp, |效应|/sqrt(F) = 7.1 bp
NLLS: b0 = 2.177 (稳健 SE 0.136), b1 = -0.642 (稳健 SE 0.032)
怎么读这些结果。
- 1% 的收益,对数与简单收益几乎没有差别;30% 时相差 3.8 个百分点。
- 对数-对数回归把参与率弹性估计为 0.506,与真值 0.5 相差一个标准误,检验「平方根律」不能拒绝。预测平均冲击时,直接对拟合值取指数得到 35.8 bp,比真值 42.8 bp 低了约 16%,正好是 \(E(e^u)=e^{0.6^2/2}=1.197\) 这个因子;用残差做 smearing 修正后得到 42.9 bp。如果你的冲击成本模型漏了这一步,回测中的交易成本会被系统性低估。
- 序贯检验从 4 次往下,3 次、4 次项都不显著,二次项显著,选定二次(真实函数也是二次)。同样把市值提高 0.5 个标准差,小盘端收益下降 33 bp(显著),大盘端几乎没有变化(3.8 bp,SE 7.2),这就是「市值效应集中在小盘端」的非线性形态。每个效应都是系数的线性组合,SE 用
t_test计算,自动考虑了协方差。 - 交互项显著为正:信号在流动性差的股票上更有效。非流动性为 −1、0、+1 时信号斜率分别约为 5、19、33 bp(真值 5、20、35 bp)。式 (8.8) 的 \(|\Delta\hat Y|/\sqrt F\) 与直接计算的 SE 完全一致。在流动性好的股票上信号不显著,这对容量和组合构建有直接含义:信号最有效的地方,往往也是交易成本最高的地方。
- NLLS 拟合限价单成交概率曲线,参数与真值(2.0,−0.6)相差约 1.3 个标准误;稳健 SE 用梯度矩阵代替 OLS 中的回归元矩阵,按三明治公式计算。
本章小结
非线性回归中,总体回归函数的斜率依赖一个或多个自变量的取值。多项式、对数和交互项模型对 \(X\) 非线性但对参数线性,所以仍然可以用 OLS 估计、用 t 和 F 推断。\(X\) 变化的效应总可以用「两个 \(X\) 取值处的预测值之差」计算,它是系数的线性组合,标准误要包含协方差,可以用 \(|\Delta\hat Y|/\sqrt F\) 或重参数化求得;单个系数一般没有独立的解释,应当作图并计算效应。多项式的次数用序贯 t 检验从 2–4 次往下确定,用 F 检验线性。对数把变化变成百分比:线性-对数中 1% 的 \(X\) 对应 \(0.01\beta_1\) 单位的 \(Y\),对数-线性中 1 单位的 \(X\) 对应 \(100\beta_1\%\) 的 \(Y\),对数-对数中 \(\beta_1\) 是弹性;因变量不同的模型不能用 \(\bar R^2\) 比较,对数因变量的预测取指数需要乘以 \(E(e^u)\)。交互项让一个变量的效应依赖另一个变量,二元×二元用各组期望值解释,连续×二元有三种截距/斜率组合,连续×连续时 \(\partial Y/\partial X_1=\beta_1+\beta_3X_2\);交互项常与主效应高度相关,单个 t 不显著而联合 F 显著很常见。对参数非线性的模型用非线性最小二乘数值求解,大样本性质与 OLS 类似,应使用稳健 SE。建模的第一步永远是「动脑子」:看数据之前,先想清楚斜率为什么、以何种方式可能变化。加州数据的结论是:控制经济背景后,师生比的效应有显著的非线性(中等班级效应最大),但不随英语学习者比例显著变化。
| 概念 | 公式 / 要点 |
|---|---|
| 非线性效应 | \(\Delta\hat Y=\hat f(X_1+\Delta X_1,\dots)-\hat f(X_1,\dots)\) |
| 效应的 SE | \(SE(\Delta\hat Y)=\lvert\Delta\hat Y\rvert/\sqrt F\),或重参数化 |
| 多项式 | \(Y=\beta_0+\beta_1X+\cdots+\beta_rX^r+u\);序贯 t 选次数,F 检验线性 |
| 对数近似 | \(\ln(x+\Delta x)-\ln x\approx\Delta x/x\) |
| 线性-对数 | 1% \(X\) ↔ \(0.01\beta_1\) 单位 \(Y\) |
| 对数-线性 | 1 单位 \(X\) ↔ \(100\beta_1\%\) \(Y\)(精确:\(100(e^{\beta_1}-1)\%\)) |
| 对数-对数 | \(\beta_1\) = 弹性 |
| 对数预测修正 | \(E(Y\mid X)=e^{X\beta}E(e^u)\),正态时 \(E(e^u)=e^{\sigma^2/2}\) |
| 二元×二元 | \(\beta_3\) = 两组效应之差;用组均值解释 |
| 连续×二元 | \(\beta_2\) 截距差,\(\beta_3\) 斜率差 |
| 连续×连续 | \(\partial Y/\partial X_1=\beta_1+\beta_3X_2\) |
| NLLS | 最小化 \(\sum[Y_i-f(X_i;b)]^2\);一致、渐近正态;稳健 SE |
| 弹性 | 线性 \(\frac{\beta_1X}{\beta_0+\beta_1X}\);线性-对数 \(\frac{\beta_1}{\beta_0+\beta_1\ln X}\);对数-线性 \(\beta_1X\);对数-对数 \(\beta_1\) |
练习
基础
- (原书习题 8.1)某公司销售额从 2018 年的 2.43 亿美元增至 2019 年的 2.50 亿美元。分别计算精确百分比增长和对数差近似;若 2019 年改为 2.55、2.60、2.65 亿美元,结果如何? 答案要点:2.88% vs. 2.84%;4.94% vs. 4.82%;7.00% vs. 6.76%;9.05% vs. 8.67%。变化越大,近似越差。
- 用 (8.2) 计算收入从 10 增到 11 千美元时成绩的变化;已知检验 \(\beta_1+21\beta_2=0\) 的 F = 299.94,求该效应的 SE 和 95% 置信区间。 答案要点:2.96 分;SE = 0.17;(2.63, 3.29)。
- (原书习题 8.7 改编)高管薪酬回归 \(\widehat{\ln(Earnings)}=6.48-0.44Female\)。女性高管收入比男性低多少?给出近似值和精确值。这是否证明了性别歧视? 答案要点:近似 44%,精确 \(e^{-0.44}-1=-35.6\%\);不能证明,未控制公司规模等因素。原书加入 ln(市值) 等变量后系数变为 −0.28,因为女性高管更多在小公司(遗漏变量偏差)。
- (原书习题 8.4)用表 8.1 列 (1) 计算 60→61 岁和 70→71 岁时 ln(HCE) 的变化。为什么两者不同? 答案要点:\(-0.01459+121\times0.0001=-0.0025\)(−0.25%);\(-0.01459+141\times0.0001=-0.0005\)(−0.05%)。差异来自 Age² 项,其显著性决定两者差异是否显著。
- (原书复习题 8.4)用 \(LoSTR=1-HiSTR\)、\(LoEL=1-HiEL\) 重新估计 (8.30),各系数是多少? 答案要点:基准组变为 (HiSTR, HiEL) = (1,1),截距 640.5;LoSTR 系数 5.4;LoEL 系数 21.7;交互项 −3.5。由四组均值反推即可。
进阶
- (原书习题 8.10)证明在 (8.35) 中 \(\Delta Y=(\beta_1+\beta_3X_2)\Delta X_1+(\beta_2+\beta_3X_1)\Delta X_2+\beta_3\Delta X_1\Delta X_2\)。 提示:直接展开 \(f(X_1+\Delta X_1,X_2+\Delta X_2)-f(X_1,X_2)\)。
- (原书习题 8.5 改编)由表 8.2 列 (4),求 20 岁期刊的需求弹性。若要求它的 SE,需要哪些信息?给出用变换回归求 SE 的方法。 答案要点:\(-0.899+0.141\ln20=-0.48\);需要两系数的协方差;令 \(Z=\ln(Age)-\ln20\),把交互项改为 \(Z\times\ln(\text{价格})\) 重新回归,ln(价格) 的系数就是 20 岁期刊的弹性,其 SE 即为所求。
- (原书习题 8.3)教育者认为:班级小于 20 人时成绩好且不变,20–25 人之间成绩居中且不变,超过 25 人时成绩很差且不变。用虚拟变量写出这一「门槛效应」模型。若同时放入三个虚拟变量和截距,会发生什么? 答案要点:\(TestScore=\beta_0+\beta_1STRsmall+\beta_2STRlarge+u\),以中等班级为基准;三个都放会落入虚拟变量陷阱。
- 对数-线性模型 \(\ln Y=\beta_0+\beta_1X+u\),若 \(u\) 与 \(X\) 独立且 \(u\sim N(0,\sigma^2)\),证明 \(E(Y\mid X)=\exp(\beta_0+\beta_1X+\sigma^2/2)\)。在量化中,用对数波动率模型预测波动率时,这意味着什么? 提示:用正态分布的矩母函数;直接取指数会低估平均波动率,低估的比例为 \(1-e^{-\sigma^2/2}\)。
- 修改本章代码第 4 部分,在数据生成中把交互项系数设为 0,重新估计,观察三个流动性水平下信号斜率的变化,并检验交互项。 提示:三个斜率应接近相同(约 20 bp),交互项 t 不显著。
原书推荐习题:8.1(对数近似精度);8.2(对数模型系数、弹性、交互项的综合练习);8.3(门槛效应与虚拟变量陷阱);8.5(交互项下的弹性及其 SE);8.7(对数因变量下虚拟变量的百分比解释、遗漏变量偏差方向);8.9(重参数化求非线性效应的 CI);8.10、8.12(交互项的推导及其在条件均值独立下的因果解释);实证题 E8.1(铅管与婴儿死亡率,Lead × pH 交互)、E8.2(比较多种函数形式)。
原书对照
| 本章内容 | 原书章节 | PDF 页码 |
|---|---|---|
| 章引言:两组非线性 | 第 8 章开篇 | p.278–279 |
| 非线性建模的一般策略(Key Concept 8.1,效应的 SE,五步法) | 8.1 | p.279–286 |
| 单个自变量的非线性:多项式、对数(Key Concept 8.2)、模型比较 | 8.2 | p.286–297 |
| 交互作用(Key Concept 8.3–8.5) | 8.3 | p.297–309 |
| 方框:老龄化与医疗支出 | 8.3 | p.304–305 |
| 方框:经济学期刊的需求 | 8.3 | p.307–309 |
| 师生比的非线性效应(表 8.3) | 8.4 | p.310–315 |
| 结论 | 8.5 | p.315–316 |
| 复习题与习题 | 第 8 章末 | p.317–325 |
| 对参数非线性的回归函数、NLLS | 附录 8.1 | p.325–328 |
| 非线性回归函数的斜率与弹性 | 附录 8.2 | p.328–330 |
注:原书页码 = PDF 页码 − 1。