R8. 平方项——特殊的交叉项
整理人: 王晓娟 (吉林大学)
邮箱: wangxjune@sina.com
在平时的回归分析中我们经常会面临非线性关系,通常的处理方法有两种,一种是进行分组回归,另一种则是引入交叉项,本文将从绘图、转折点的确定和经济意义3个方面介绍一种特殊的交叉项———二次项。
1. 初步图形分析
aaplot
命令
- 范例 1
研究女性工资收入和工龄之间是否存在非线性关系。首先用 aaplot
命令对其绘制散点图,观察是否存在线性关系,在此基础上加入平方项,使用 quadratic
绘制非线性拟合图,为了便于比较,最后将线性拟合图和非线性拟合图同时绘制出来,在Stata中运行代码如下:
sysuse nlsw88, clear
//线性拟合
aaplot wage ttl_exp pink)) //非线性拟合
aaplot wage ttl_exp, quadratic qopts(lc(blue)) qopts(lc(pink)) aaplot wage ttl_exp, both lopts(lc(
从拟合结果中可以看出非线性拟合方程的 \(R^2\) 出现了微小的变化,样本主体部分的线性拟合图和非线性拟合图基本重合,右侧个别样本点并不影响整体趋势,因此在本例中宜采用线性拟合。
- 范例 2
研究汽车价格和重量之间的关系。使用 aaplot
命令同时绘制线性拟合图和非线性拟合图,在 Stata 中输入如下代码:
sysuse auto, clear
weight, both lopts(lc(blue)) qopts(lc(pink)) aaplot price
从回归方程来看,非线性拟合方程的的 \(R^2\) 显著大于线性拟合方程,从拟合图形也可以看出,两者走势存在显著差异,从图中可以直观地判断加入平方项能更好地刻画两者之间的关系。
在本例中,非线性拟合图的转折点左右都有较多的样本观测值,因此平方项似乎具有一定的经济意义。进一步将样本分为进口车和国产车两组分别进行线性拟合,在 Stata 中运行如下代码:
#delimit ; twoway (scatter price weight if foreign==1)
lfit price weight if foreign==1)
(scatter price weight if foreign==0)
(lfit price weight if foreign==0),
(legend(label(1 "Foreign") label(2 "")
label(3 "Demestic") label(4 "")
position(4) ring(0)) ;
cr #delimit
可以发现总体上的非线性关系在进行分组回归时,两组样本呈现出较好的线性拟合效果。对于这种情况,建议进行分组回归,而尽可能避免使用平方项。
- Note: 若能分组进行线性回归,就尽量不要使用平方项。
2. 转折点的确定
2.1 二次函数回顾
\[ y = ax^2 + bx + c \]
- 转折点: \(tpoint = -b/2a\)
- 边际效应: \(dy/dx = b + 2a*x\)
U 型关系: \(a>0\)
倒 U 型关系: \(a<0\)
2.2 估计系数的引用
以上述女性工资和工龄之间的关系为例,在 Stata 中运行以下代码,可以调用估计系数:
sysuse nlsw88, clear
reg wage hours age
dis _b[hours] _cons] dis _b[
2.3 转折点(The turnning point)
在上面的示例中,引入工作年限的平方项对其进行回归,并分别使用 scatter
和 qfit
命令绘制出女性工资和工作年限的散点图和非线性拟合图:
sysuse nlsw88, clear
global controls "hours age tenure married south i.race"
gen ttl_exp2 = ttl_exp^2 ///生成平方项
reg wage ttl_exp ttl_exp2 $controls
predict wage_hat if e(sample)
twoway (scatter wage ttl_exp, msize(*0.3)) ///
(qfit wage_hat ttl_exp )
从图形上可以看出拟合线接近于一条直线,转折点右侧的观测值较少而不具有代表性。进一步计算出转折点的具体数值:
global tp = -_b[ttl_exp]/(2*_b[ttl_exp2])
.
"Turn point = " %4.2f $tp
. dis Turn point = 27.18
3. 转折点的经济含义
需要强调的是我们使用交叉项研究的是经济学问题,而不是数学问题,因此特别需要注意转折点两边的样本是否具有代表性。在具体的分析中,可以通过比较转折点与样本最大观测值,以及简单的统计分析来判断样本中有多少观测值位于转折点右侧。在 Stata 中运行如下代码:
keep if e(sample)
.
(19 observations deleted)
sum ttl_exp
.
Variable | Obs Mean Std. Dev. Min Max
----------+---------------------------------------------------
ttl_exp | 2,227 12.56003 4.605169 .1153846 28.88461
count if ttl_exp>$tp
. 2
返回值:
通过 sum
命令进行统计分析,可以看到样本最大值为 28.88,使用 count
命令统计观测值大于转折点的样本有多少,可以看到仅有 2 个样本观测值位于转折点右侧。我们可以通过绘图直观地展示这一结果:
local b0 = _b[_cons]
local b1 = _b[ttl_exp]
local b2 = _b[ttl_exp2]
sum ttl_exp
local min = r(min)
local max = r(max)
#delimit ; twoway ( function y = `b2'*x^2 + `b1'*x + `b0',
range(`min' `max') )
function y = `b2'*x^2 + `b1'*x + `b0',
( range(`max' 40) lp(dash) )
,ytitle("wage")
xtitle("ttl_exp")
xline($tp,lp(dash) lc(green))
xline(`max',lc(blue))
legend(off)
text( 9 24.5 "Turn Point")
text(10 30.4 "Max")
caption("The turn point is: $tp")
;cr #delimit
从图形中可以看到右侧虚线部分是无经济意义的,样本实际上只体现了图形左侧的关系。
最后需要注意的是函数形式会影响转折点的位置,当被解释变量采用不同的形式如 ln(wage) 时,上述结果将会发生变化。