样条回归与阶跃回归 | Stata

  • 劳伦斯·马希,戴维·科米尔,《样条回归模型》
    • 样条回归可以刻画两条回归线在连接点处平滑的斜率变化,并且避免回归线中间出现断裂。
    • 样条回归相比多项式回归的优势
      • 多项式回归可以用时间、时间的平方项、时间的立方项等作为自变量,然而这样很快会遇到完全多重共线性问题。
      • 多项式回归不够灵活,不足以捕捉到斜率的突然变化,尤其当变化周期不规律的时候。
    • 样条回归相比虚拟变量回归/阶跃式回归(piecewise regression)的优势
      • 样条回归是限制性的虚拟变量回归,样条变化处是连续而非断裂的。

  • 分离回归(sperate regression)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

use "E:\Data Storages\Dataset for Learning\talk.dta",clear
*14岁以前
eststo m1:reg talk age if age < 14
*14岁及以后
eststo m2:reg talk age if age >= 14

esttab m1 m2,nogap se

--------------------------------------------
                      (1)             (2)   
                     talk            talk   
--------------------------------------------
age                 0.682           3.629***
                  (0.382)         (0.301)   
_cons               8.075*         -24.97***
                  (3.981)         (5.709)   
--------------------------------------------
N                      62             138   
--------------------------------------------
Standard errors in parentheses
* p<0.05, ** p<0.01, *** p<0.001

gen age1 = (age - 14)
gen age2 = (age - 14)
replace age1 = 0 if age >= 14
replace age2 = 0 if age < 14
gen age_dummy1 = age < 14
gen age_dummy2 = age >= 14
eststo m3: reg talk age1 age2 age_dummy1 age_dummy2,hascons
esttab m1 m2 m3,nogap se
predict yhat

------------------------------------------------------------
                      (1)             (2)             (3)   
                     talk            talk            talk   
------------------------------------------------------------
age                 0.682           3.629***                
                  (0.382)         (0.301)                   
age1                                                0.682   
                                                  (0.438)   
age2                                                3.629***
                                                  (0.287)   
age_dummy1                                          17.62***
                                                  (2.009)   
age_dummy2                                          25.83***
                                                  (1.547)   
_cons               8.075*         -24.97***            0   
                  (3.981)         (5.709)             (.)   
------------------------------------------------------------
N                      62             138             200   
------------------------------------------------------------
Standard errors in parentheses
* p<0.05, ** p<0.01, *** p<0.001

twoway (scatter talk age) ///
       (line yhat age if age <14, sort) ///
       (line yhat age if age >=14, sort), ///
       xline(14)
  • 当14岁的时候,在打电话的时间上有一个显著“跳跃”,即8.2分钟。
1
2
3
4
5
6
7

lincom age_dummy2-age_dummy1
------------------------------------------------------------------------------
        talk |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
         (1) |    8.20972   2.535655     3.24   0.001     3.209051    13.21039
------------------------------------------------------------------------------
  • 当14岁的时候,在打电话的斜率上有一个显著“跳跃”,即2.94分钟/岁。
1
2
3
4
5
6
7

lincom age2 - age1
------------------------------------------------------------------------------
        talk |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
         (1) |   2.946947   .5233158     5.63   0.000     1.914895       3.979
------------------------------------------------------------------------------
  • 这显然是与现实不吻合

  • 样条回归
    • 样条回归使用特定的分段函数(或样条函数)对数据进行拟合,但相邻两段函数之间是连续的,即满足整体连续的条件。
    • 样条函数的次数、节点个数和节点位置的选择需要根据经验确定,当观察值较多时,可以根据最小化残差平方和原则来选择节点数和节点位置
  • mkspline
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

mkspline yage1 14 yage2 = age, marginal
tablist age yage1 yage2, sort(v)
regress talk yage1 yage2 age_dummy2

------------------------------------------------------------------------------
        talk |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
       yage1 |   .6820981   .4377618     1.56   0.121    -.1812301    1.545426
       yage2 |   2.946947   .5233158     5.63   0.000     1.914895       3.979
  age_dummy2 |    8.20972   2.535655     3.24   0.001     3.209051    13.21039
       _cons |   8.074878     4.5636     1.77   0.078    -.9251856    17.07494
------------------------------------------------------------------------------

regress talk yage1 yage2

------------------------------------------------------------------------------
        talk |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
       yage1 |   1.629302   .3333956     4.89   0.000     .9718194    2.286784
       yage2 |   2.500347   .5168166     4.84   0.000     1.481144     3.51955
       _cons |  -.0316085    3.90619    -0.01   0.994    -7.734924    7.671707
------------------------------------------------------------------------------

predict yhat2
twoway (scatter talk age) ///
       (line yhat2 age if age <14, sort) ///
       (line yhat2 age if age >=14, sort), ///
       xline(14)