** 2차 모형 추정
use "D:\STATA연습데이터\STATA기초통계와회귀분석\R_data15_1.dta",clear
// 종속변수인 임금(wage)이 독립변수인 근무연한(tenure)에 따라 증가하지만 일정수준 이상 근무연한이 증가하면 임금이 오히려 줄어들 수도 있다고 판단할 때 추정방법
gen tenure2=tenure^2 // tenure 변수의 2차항 변수 생성
gen lwage=ln(wage) // wage 변수에 로그값 취한 변수 생성
reg lwage tenure tenure2
/*
Source | SS df MS Number of obs = 2,231
-------------+---------------------------------- F(2, 2228) = 121.85
Model | 72.1938319 2 36.0969159 Prob > F = 0.0000
Residual | 660.023236 2,228 .296240232 R-squared = 0.0986
-------------+---------------------------------- Adj R-squared = 0.0978
Total | 732.217068 2,230 .328348461 Root MSE = .54428
------------------------------------------------------------------------------
lwage | Coefficient Std. err. t P>|t| [95% conf. interval]
-------------+----------------------------------------------------------------
tenure | .0610446 .0068122 8.96 0.000 .0476856 .0744035
tenure2 | -.0016852 .0003661 -4.60 0.000 -.0024031 -.0009673
_cons | 1.619121 .0223875 72.32 0.000 1.575218 1.663023
------------------------------------------------------------------------------
*/
// 예상대로, tenure는 양의 계수, tenure2은 음의 계수가 나타남
// = 근무연한 증가에 따라 임금은 높아지나, 근무기간이 일정수준 이상이 되면 오히려 임금이 낮아짐
** 임금이 낮아지기 시작하는 근무연한 계산
di -_b[tenure]/(2*_b[tenure2]) // (-)1차 설명변수의 추정계수 / (2 x 2차 설명변수의 추정계수)
// 18.112261
// 18.1년까지 임금이 높아지다가 그 이후로 낮아짐
** 근무연한의 표본평균 값에서 한계효과(근무기간이 1년 증가할 때 임금의 평균 증가분) 계산
su tenure if e(sample)==1
/*
Variable | Obs Mean Std. dev. Min Max
-------------+---------------------------------------------------------
tenure | 2,231 5.97785 5.510331 0 25.91667
*/
di 2*_b[tenure2]*r(mean)+_b[tenure]
// .04089717
// 표본평균인 5.97년 근무한 직원이 1년 더 근무할 때 임금이 평균적으로 4.1% 증가
twoway (function y=_b[_cons]+_b[tenure]*x+_b[tenure2]*x^2, range(0 25)) (function y=_b[_cons]+_b[tenure]*x+_b[tenure2]*x^2, recast(area) range(18.1 18.1))
// 추정결과 적합선을 그래프로 그리기
** ttl_exp(이전 직장 경력까지 포함한 총 근무연한) 변수를 포함한 회귀추정
reg lwage tenure tenure2 ttl_exp
/*
Source | SS df MS Number of obs = 2,231
-------------+---------------------------------- F(3, 2227) = 146.28
Model | 120.534401 3 40.1781338 Prob > F = 0.0000
Residual | 611.682667 2,227 .274666667 R-squared = 0.1646
-------------+---------------------------------- Adj R-squared = 0.1635
Total | 732.217068 2,230 .328348461 Root MSE = .52409
------------------------------------------------------------------------------
lwage | Coefficient Std. err. t P>|t| [95% conf. interval]
-------------+----------------------------------------------------------------
tenure | .0441508 .0066819 6.61 0.000 .0310473 .0572543
tenure2 | -.0017963 .0003526 -5.09 0.000 -.0024878 -.0011049
ttl_exp | .0391351 .0029499 13.27 0.000 .0333501 .04492
_cons | 1.236119 .0360303 34.31 0.000 1.165463 1.306776
------------------------------------------------------------------------------
*/
su ttl_exp if e(sample)==1
/*
Variable | Obs Mean Std. dev. Min Max
-------------+---------------------------------------------------------
ttl_exp | 2,231 12.55485 4.606011 .1153846 28.88461
*/
di -_b[tenure]/(2*_b[tenure2])
// 12.289265
// 경력이 12.28년일 때 임금예측값은 최대가 됨
twoway (function y=_b[_cons]+_b[tenure]*x+_b[tenure2]*x^2+_b[ttl_exp]*12.55, range(0 25)) (function y=_b[_cons]+_b[tenure]*x+_b[tenure2]*x^2 + _b[ttl_exp]*12.55, recast(area) range(12.28 12.28))
//추정결과를 이용하여 근무연한에 따른 임금예측값 그래프 그리기
** 상기 2차항 모형에서 tenure와 tenure2의 다중공선성 확인하기
reg lwage tenure tenure2
corr tenure tenure2 if e(sample)==1
/* (obs=2,231)
| tenure tenure2
-------------+------------------
tenure | 1.0000
tenure2 | 0.9517 1.0000
*/
// 상관관계가 0.95로 1에 가까움
vif
/*
Variable | VIF 1/VIF
-------------+----------------------
tenure | 10.61 0.094277
tenure2 | 10.61 0.094277
-------------+----------------------
Mean VIF | 10.61
*/
// VIF 값이 10보다 크므로 다중공선성 문제가 있음
// 2차 모형에서는 목적이 주어진 데이터의 적합성이나 예측에 있으므로 다중공선성은 큰 문제가 되지 않음
** 2차 모형에서 다중공선성 문제를 해결하면서 추정하는 방법
su tenure if e(sample)==1
/*
Variable | Obs Mean Std. dev. Min Max
-------------+---------------------------------------------------------
tenure | 2,231 5.97785 5.510331 0 25.91667
*/
gen tenure_d=tenure-r(mean) // 근무연한에서 평균을 차감한 변수 생성
gen tenure_d2=tenure_d^2 // 근무연한에서 평균을 차감한 값을 제곱한 변수 생성
reg wage tenure_d tenure_d2
/*
Source | SS df MS Number of obs = 2,231
-------------+---------------------------------- F(2, 2228) = 39.14
Model | 2514.91564 2 1257.45782 Prob > F = 0.0000
Residual | 71586.912 2,228 32.1305709 R-squared = 0.0339
-------------+---------------------------------- Adj R-squared = 0.0331
Total | 74101.8276 2,230 33.2295191 Root MSE = 5.6684
------------------------------------------------------------------------------
wage | Coefficient Std. err. t P>|t| [95% conf. interval]
-------------+----------------------------------------------------------------
tenure_d | .2371488 .0309152 7.67 0.000 .1765231 .2977745
tenure_d2 | -.0089112 .0038125 -2.34 0.020 -.0163877 -.0014347
_cons | 8.062904 .1667062 48.37 0.000 7.735989 8.38982
------------------------------------------------------------------------------
*/
vif
/*
Variable | VIF 1/VIF
-------------+----------------------
tenure_d | 2.01 0.496493
tenure_d2 | 2.01 0.496493
-------------+----------------------
Mean VIF | 2.01
*/
// VIF 값이 2차항을 사용한 모형의 VIF(10.61)보다 훨씬 줄어들고 10보다도 작음
** FP (fractional polynomial) 모형 : 설명변수와 종속변수의 적합도를 높이기 위한 모형, 특히 설명변수와 종속변수 간 알려지지 않은 비선형관계를 가정할 때 사용
use "D:\STATA연습데이터\STATA기초통계와회귀분석\R_data15_2.dta", clear
// 종속변수 : sqrtigg, 독립변수 age
fracpoly reg sqrtigg age, adjust(no)
// 회귀모형 : sqrtigg = b0 + b1 x age^(-2) + b2 x age^2 + e
// 차수에 대한 옵션을 지정하지 않으면 차수는 자동으로 2로 설졍됨 (독립변수 항이 2개)
/*
........
-> gen double Iage__1 = age^-2 if e(sample)
-> gen double Iage__2 = age^2 if e(sample)
Source | SS df MS Number of obs = 298
-------------+---------------------------------- F(2, 295) = 64.49
Model | 22.2846976 2 11.1423488 Prob > F = 0.0000
Residual | 50.9676492 295 .172771692 R-squared = 0.3042
-------------+---------------------------------- Adj R-squared = 0.2995
Total | 73.2523469 297 .246640898 Root MSE = .41566
------------------------------------------------------------------------------
sqrtigg | Coefficient Std. err. t P>|t| [95% conf. interval]
-------------+----------------------------------------------------------------
Iage__1 | -.1562156 .027416 -5.70 0.000 -.2101713 -.10226
Iage__2 | .0148405 .0027767 5.34 0.000 .0093757 .0203052
_cons | 2.189242 .0473835 46.20 0.000 2.095989 2.282495
------------------------------------------------------------------------------
Deviance = 319.45. Best powers of age among 44 models fit: -2 2.
*/
fracpoly reg sqrtigg age, degree(3) adjust(no)
// 회귀모형 : sqrtigg = b0 + b1 x age^(-2) + b2 x age + b3 x (age x lnage) + e
// 차수를 3으로 설정(독립변수 항이 3개)
/*
............................................
-> gen double Iage__1 = age^-2 if e(sample)
-> gen double Iage__2 = age if e(sample)
-> gen double Iage__3 = age*ln(age) if e(sample)
Source | SS df MS Number of obs = 298
-------------+---------------------------------- F(3, 294) = 42.93
Model | 22.3143361 3 7.43811203 Prob > F = 0.0000
Residual | 50.9380108 294 .17325854 R-squared = 0.3046
-------------+---------------------------------- Adj R-squared = 0.2975
Total | 73.2523469 297 .246640898 Root MSE = .41624
------------------------------------------------------------------------------
sqrtigg | Coefficient Std. err. t P>|t| [95% conf. interval]
-------------+----------------------------------------------------------------
Iage__1 | -.1836081 .0527827 -3.48 0.001 -.287488 -.0797283
Iage__2 | -.1704955 .2065316 -0.83 0.410 -.5769632 .2359722
Iage__3 | .1242667 .0944355 1.32 0.189 -.0615885 .3101219
_cons | 2.417309 .2892418 8.36 0.000 1.848063 2.986556
------------------------------------------------------------------------------
Deviance = 319.28. Best powers of age among 164 models fit: -2 1 1.
*/
// 앞서 차수 2인 경우 deviance가 319.45, 차수 3인 경우 deviance가 319.28로 큰 차이 없으므로, 차수를 늘리더라도 deviance에는 큰 차이가 없음을 알 수 있음
** FP 모형 추정결과 그래프로 그리기
fracpoly reg sqrtigg age, adjust(no)
fracplot
** FP 모형을 추정하지 않고도 바로 그래프 그리기
twoway (scatter sqrtigg age) (fpfit sqrtigg age)
** 회귀선에 신뢰구간을 포함하여 그래프 그리기
twoway (scatter sqrtigg age) (fpfitci sqrtigg age)
** 명령어 순서를 바꾸면(회귀선 그린 후 산포도 그림) 신뢰구간 안의 산포도 점들이 표현됨)
twoway (fpfitci sqrtigg age) (scatter sqrtigg age)
** 단계적 회귀 : 사전에 주어진 이론적 모형이 없거나 많은 설명변수 중 어떤 변수를 모형에 포함해야 할지 결정하기 힘들때 사용
use "D:\STATA연습데이터\STATA기초통계와회귀분석\R_data15_3.dta", clear
// female : 성별더미변수, ses : 사회경제적 수준, schtyp : 학교유형, read : 독해 성적, write : 작문 성적, math : 수학 성적, science : 과학 성적, socst : 사회 성적
// 이 때, 학생들의 작문 성적을 결정하는 모형을 추정
// 설명변수 후보로 read, science, female 3개 변수를 이용하여 단계적 회귀 추정
stepwise, pr(0.05): reg write read science female
// pr(0.05) : 단계적으로 추정하면서 설명변수가 5% 수준에서 유의하면 모형에 잔류시키고 그렇지 않으면 제외
// 변수가 가장 많은 모형에서 출발하여 유의하지 않은 변수를 하나씩 줄여 나감
/*
Wald test, begin with full model:
p < 0.0500 for all terms in model
Source | SS df MS Number of obs = 200
-------------+---------------------------------- F(3, 196) = 71.38
Model | 9334.79206 3 3111.59735 Prob > F = 0.0000
Residual | 8544.08294 196 43.5922599 R-squared = 0.5221
-------------+---------------------------------- Adj R-squared = 0.5148
Total | 17878.875 199 89.843593 Root MSE = 6.6024
------------------------------------------------------------------------------
write | Coefficient Std. err. t P>|t| [95% conf. interval]
-------------+----------------------------------------------------------------
read | .3502515 .0588277 5.95 0.000 .2342349 .4662682
science | .3572054 .0613361 5.82 0.000 .2362419 .4781688
female | 6.156789 .9458754 6.51 0.000 4.291389 8.022189
_cons | 12.60481 2.832622 4.45 0.000 7.018484 18.19114
------------------------------------------------------------------------------
*/
// 3개 변수 모두 5% 수준에서 유의하므로 모형에 잔류하였음
stepwise, pe(0.05): reg write read science female
// pe(0.05) : 변수가 가장 적은 모형에서 출발하여 5% 수준에서 유의한 변수들을 하나씩 추가
/*
Wald test, begin with empty model:
p = 0.0000 < 0.0500, adding read
p = 0.0000 < 0.0500, adding female
p = 0.0000 < 0.0500, adding science
Source | SS df MS Number of obs = 200
-------------+---------------------------------- F(3, 196) = 71.38
Model | 9334.79206 3 3111.59735 Prob > F = 0.0000
Residual | 8544.08294 196 43.5922599 R-squared = 0.5221
-------------+---------------------------------- Adj R-squared = 0.5148
Total | 17878.875 199 89.843593 Root MSE = 6.6024
------------------------------------------------------------------------------
write | Coefficient Std. err. t P>|t| [95% conf. interval]
-------------+----------------------------------------------------------------
read | .3502515 .0588277 5.95 0.000 .2342349 .4662682
female | 6.156789 .9458754 6.51 0.000 4.291389 8.022189
science | .3572054 .0613361 5.82 0.000 .2362419 .4781688
_cons | 12.60481 2.832622 4.45 0.000 7.018484 18.19114
------------------------------------------------------------------------------
*/
// 결론적으로는 pr과 pe 옵션의 결과가 같으나 경우에 따라 다른 결과가 도출될 수 있음
xi: stepwise, pr(0.05): reg write i.ses read science female
// 범주가 3개인 ses 변수에 대해 더미변수를 생성하여 단계적 회귀 추정
/*
i.ses _Ises_1-3 (naturally coded; _Ises_1 omitted)
Wald test, begin with full model:
p = 0.9008 >= 0.0500, removing _Ises_2
p = 0.3664 >= 0.0500, removing _Ises_3
Source | SS df MS Number of obs = 200
-------------+---------------------------------- F(3, 196) = 71.38
Model | 9334.79206 3 3111.59735 Prob > F = 0.0000
Residual | 8544.08294 196 43.5922599 R-squared = 0.5221
-------------+---------------------------------- Adj R-squared = 0.5148
Total | 17878.875 199 89.843593 Root MSE = 6.6024
------------------------------------------------------------------------------
write | Coefficient Std. err. t P>|t| [95% conf. interval]
-------------+----------------------------------------------------------------
female | 6.156789 .9458754 6.51 0.000 4.291389 8.022189
science | .3572054 .0613361 5.82 0.000 .2362419 .4781688
read | .3502515 .0588277 5.95 0.000 .2342349 .4662682
_cons | 12.60481 2.832622 4.45 0.000 7.018484 18.19114
------------------------------------------------------------------------------
*/
// 범주가 3개이지만 독립변수간 완전한 선형관계(완전한 상관관계)를 피하기 위해 2개의 더미변수가 생성됨 : _Ises_2, _Ises_3
// _Ises_2, _Ises_3 더미변수 모두 단계적 회귀 추정 과정에서 5% 유의수준에서 유의성이 없는 것으로 판단하여 제외
xi: by schtyp, sort: stepwise, pr(0.05): reg write i.ses read science female
// schtyp(학교종류)별로 단계적 회귀 실행
/*
-> schtyp = public
Wald test, begin with full model:
p = 0.7340 >= 0.0500, removing _Ises_3
p = 0.4008 >= 0.0500, removing _Ises_2
Source | SS df MS Number of obs = 168
-------------+---------------------------------- F(3, 164) = 62.92
Model | 8556.74416 3 2852.24805 Prob > F = 0.0000
Residual | 7434.75584 164 45.3338771 R-squared = 0.5351
-------------+---------------------------------- Adj R-squared = 0.5266
Total | 15991.5 167 95.757485 Root MSE = 6.733
------------------------------------------------------------------------------
write | Coefficient Std. err. t P>|t| [95% conf. interval]
-------------+----------------------------------------------------------------
science | .3262883 .0669643 4.87 0.000 .1940651 .4585116
female | 6.464022 1.050489 6.15 0.000 4.389796 8.538249
read | .386751 .0651049 5.94 0.000 .2581991 .5153028
_cons | 11.8703 3.049246 3.89 0.000 5.84946 17.89114
------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------
-> schtyp = private
Wald test, begin with full model:
p = 0.7619 >= 0.0500, removing _Ises_2
p = 0.5831 >= 0.0500, removing _Ises_3
p = 0.4197 >= 0.0500, removing read
Source | SS df MS Number of obs = 32
-------------+---------------------------------- F(2, 29) = 11.45
Model | 705.224686 2 352.612343 Prob > F = 0.0002
Residual | 892.744064 29 30.7842781 R-squared = 0.4413
-------------+---------------------------------- Adj R-squared = 0.4028
Total | 1597.96875 31 51.547379 Root MSE = 5.5484
------------------------------------------------------------------------------
write | Coefficient Std. err. t P>|t| [95% conf. interval]
-------------+----------------------------------------------------------------
female | 4.249731 2.024955 2.10 0.045 .1082345 8.391228
science | .5802402 .1246911 4.65 0.000 .3252183 .8352621
_cons | 22.20672 7.051318 3.15 0.004 7.785157 36.62829
------------------------------------------------------------------------------
*/
// 공립학교(public)의 경우 ses 변수가 최종 모형에서 제외되었고 사립학교(private)인 경우 ses 변수와 read 변수도 최종 모형에서 제외됨
[출처] 기초통계와 회귀분석(민인식, 최필선, 2012), 한국STATA학회 홈페이지(http://kastata.org/html/sub02-04.asp)
댓글