R8. 平方项——特殊的交叉项

整理人: 王晓娟 (吉林大学)
邮箱:

在平时的回归分析中我们经常会面临非线性关系,通常的处理方法有两种,一种是进行分组回归,另一种则是引入交叉项,本文将从绘图、转折点的确定和经济意义3个方面介绍一种特殊的交叉项———二次项。

1. 初步图形分析

aaplot 命令

  • 范例 1

研究女性工资收入和工龄之间是否存在非线性关系。首先用 aaplot 命令对其绘制散点图,观察是否存在线性关系,在此基础上加入平方项,使用 quadratic 绘制非线性拟合图,为了便于比较,最后将线性拟合图和非线性拟合图同时绘制出来,在Stata中运行代码如下:

   sysuse nlsw88, clear
   aaplot wage ttl_exp  //线性拟合
   aaplot wage ttl_exp, quadratic qopts(lc(pink)) //非线性拟合 
   aaplot wage ttl_exp, both lopts(lc(blue)) qopts(lc(pink))

从拟合结果中可以看出非线性拟合方程的 \(R^2\) 出现了微小的变化,样本主体部分的线性拟合图和非线性拟合图基本重合,右侧个别样本点并不影响整体趋势,因此在本例中宜采用线性拟合。

  • 范例 2

研究汽车价格和重量之间的关系。使用 aaplot 命令同时绘制线性拟合图和非线性拟合图,在 Stata 中输入如下代码:

   sysuse auto, clear
   aaplot price weight, both lopts(lc(blue)) qopts(lc(pink)) 

从回归方程来看,非线性拟合方程的的 \(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)) ;
   #delimit cr

可以发现总体上的非线性关系在进行分组回归时,两组样本呈现出较好的线性拟合效果。对于这种情况,建议进行分组回归,而尽可能避免使用平方项。

  • Note: 若能分组进行线性回归,就尽量不要使用平方项。

2. 转折点的确定

2.1 二次函数回顾

\[ y = ax^2 + bx + c \]

  • 转折点: \(tpoint = -b/2a\)
  • 边际效应: \(dy/dx = b + 2a*x\)
  1. U 型关系: \(a>0\)

  2. 倒 U 型关系: \(a<0\)

2.2 估计系数的引用

以上述女性工资和工龄之间的关系为例,在 Stata 中运行以下代码,可以调用估计系数:

  sysuse nlsw88, clear
  reg wage hours age   
  dis _b[hours] 
  dis _b[_cons]

2.3 转折点(The turnning point)

在上面的示例中,引入工作年限的平方项对其进行回归,并分别使用 scatterqfit 命令绘制出女性工资和工作年限的散点图和非线性拟合图:

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])

. dis "Turn point = " %4.2f $tp
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")
         ;
    #delimit cr

从图形中可以看到右侧虚线部分是无经济意义的,样本实际上只体现了图形左侧的关系。

最后需要注意的是函数形式会影响转折点的位置,当被解释变量采用不同的形式如 ln(wage) 时,上述结果将会发生变化。