비선형회귀모형들 이재용 서울대학교통계학과 2015 년 1 월 25 일
다항회귀 I d 차다항회귀모형 y i = β 0 + β 1 x i + β 2 x 2 i +... + β d x d i + ϵ i, ϵ i (0, σ 2 ), i = 1, 2,..., n 특성들 1. 가장간단하게 x 의비선형회귀함수를표현할수있는방법이다. 2. 4 차가넘어가면함수의모양이너무유연해져서, ( 특히설명변수의경계영역에서 ) 이상한모양이될수있다. 4 차이상의모형은잘쓰지않는다.
다항회귀 II Degree 4 Polynomial Wage 50 100 150 200 250 300 Pr(Wage>250 Age) 0.00 0.05 0.10 0.15 0.20 20 30 40 50 60 70 80 Age 20 30 40 50 60 70 80 Age
다항회귀 R 코드 I 다항회귀모형의적합 library(islr) attach(wage) 패키지를로드한다. 이예는임금자료로분석을한다. fit=lm(wage~poly(age,4),data=wage) coef(summary(fit)) ## Estimate Std. Error t value Pr(>t) ## (Intercept) 111.70361 0.7287409 153.283015 0.000000e+00 ## poly(age, 4)1 447.06785 39.9147851 11.200558 1.484604e-28 ## poly(age, 4)2-478.31581 39.9147851-11.983424 2.355831e-32 ## poly(age, 4)3 125.52169 39.9147851 3.144742 1.678622e-03 ## poly(age, 4)4-77.91118 39.9147851-1.951938 5.103865e-02 poly 함수는주어진변수와차수로직교다항함수기저를이용해계획행렬을생성한다.
다항회귀 R 코드 II fit2=lm(wage~poly(age,4,raw=t),data=wage) coef(summary(fit2)) ## Estimate Std. Error t value Pr(>t) ## (Intercept) -1.841542e+02 6.004038e+01-3.067172 0.0021802539 ## poly(age, 4, raw = T)1 2.124552e+01 5.886748e+00 3.609042 0.0003123618 ## poly(age, 4, raw = T)2-5.638593e-01 2.061083e-01-2.735743 0.0062606446 ## poly(age, 4, raw = T)3 6.810688e-03 3.065931e-03 2.221409 0.0263977518 ## poly(age, 4, raw = T)4-3.203830e-05 1.641359e-05-1.951938 0.0510386498 직교다항함수기저가아니라다항함수그자체로계획행렬을생성하려면아래와같은옵션을쓰면된다. fit2a=lm(wage~age+i(age^2)+i(age^3)+i(age^4),data=wage) coef(fit2a) fit2b=lm(wage~cbind(age,age^2,age^3,age^4),data=wage) 위와동일한결과를준다.
다항회귀 R 코드 III 예측과그림그리기 agelims=range(age) age.grid=seq(from=agelims[1],to=agelims[2]) 변수 age 의최대값과최소값을구하고, 그것을이용해격자값을구한다. 이격자값들에서예측값을생성하려고한다. preds=predict(fit,newdata=list(age=age.grid),se=true) se.bands=cbind(preds$fit+2*preds$se.fit,preds$fit-2*preds$se.fit) 격자값에서예측값을구하고, 함수추정량의표준오차를이용해서신뢰구간의밴드를구했다. plot(age,wage,xlim=agelims,cex=.5,col="darkgrey") title("degree-4 Polynomial",outer=T) lines(age.grid,preds$fit,lwd=2,col="blue") matlines(age.grid,se.bands,lwd=1,col="blue",lty=3)
다항회귀 R 코드 IV Degree 4 Polynomial wage 50 150 250 그림을그린다. 20 30 40 50 60 70 80 age
계단함수를이용한회귀모형 I x 를범주형변수들로변환 c 1 < c 2 <... < c K 를 x 의범위의구분점들이라하자. 다음과같이범주형변수들을정의한다. C 0 (x) = I (x < c 1 ) C 1 (x) = I (c 1 x < c 2 )... C K 1 (x) = I (c K 1 x < c K ) C K (x) = I (c K x). 계단함수를이용한회귀모형 y i = β 0 +β 1 C 1 (x i )+β 2 C 2 (x i )+...+β K C K (x i )+ϵ i, ϵ i (0, σ 2 ), i = 1, 2,..., n
계단함수를이용한회귀모형 II 참고사항 1. C 0 (x) + C 1 (x) +... + C K (x) = 1, x 이어서, 모형에서 C 0 (x) 는포함하지않았다. 2. 4 차가넘어가면함수의모양이너무유연해져서, ( 특히설명변수의경계영역에서 ) 이상한모양이될수있다. 4 차이상의모형은잘쓰지않는다.
계단함수를이용한회귀모형 III Piecewise Constant Wage 50 100 150 200 250 300 Pr(Wage>250 Age) 0.00 0.05 0.10 0.15 0.20 20 30 40 50 60 70 80 Age 20 30 40 50 60 70 80 Age
계단함수를이용한회귀모형 R 코드 I table(cut(wage$age,4)) ## ## (17.9,33.5] (33.5,49] (49,64.5] (64.5,80.1] ## 750 1399 779 72 fit=lm(wage~cut(age,4),data=wage) coef(summary(fit)) ## Estimate Std. Error t value Pr(>t) ## (Intercept) 94.158392 1.476069 63.789970 0.000000e+00 ## cut(age, 4)(33.5,49] 24.053491 1.829431 13.148074 1.982315e-38 ## cut(age, 4)(49,64.5] 23.664559 2.067958 11.443444 1.040750e-29 ## cut(age, 4)(64.5,80.1] 7.640592 4.987424 1.531972 1.256350e-01
기저함수 (basis function) 를이용한회귀모형 I 기저함수를이용한회귀모형 y i = β 0 +β 1 b 1 (x i )+β 2 b 2 (x i )+...+β K b K (x i )+ϵ i, ϵ i (0, σ 2 ), i = 1, 2,..., n 여기서, b 1,..., b K 는기저함수이다. 참고사항 1. 다항회귀모형과계단함수를이용한회귀모형도기저함수를이용한회귀모형으로볼수있다. 2. 이외에도푸리에기저 (Fourier basis), 웨이블렛기저 (wavelet basis) 등을사용할수있다.
회귀스플라인 (regression spline) I 동기 1. 다항회귀모형의문제점 : 다항회귀모형을이용해서모형의유연성을높이려면다항식의차수를높여야한다. 그런데차수를높이면원치않는모양의이상한회귀함수모양이나타날수있다. 이는어떤관측치가멀리떨어진곳의함수추정량에도영향을미치기때문이다. 2. 계단함수의문제점 : 이를극복하기위해서는계단함수같은기저함수를이용하면된다. 그런데, 계단함수는연속함수에적용할수없다. 3. 스플라인모형 : 위의문제점을해결하기위해매듭 (knot) 으로나누어진구간에낮은차원의다항식모형을적합하는것을고려한다. 조각별다항식 (piecewise polynomial) 을스플라인이라한다.
회귀스플라인 (regression spline) II 회귀스플라인 1. 차수가 d 이고매듭이 ξ 1,..., ξ K 인스플라인이란매듭으로이루어진각구간에서차수가 d 인다항식이고 d 1 차도함수가연속인함수를말한다. 이것들을회귀스플라인이라고한다. 2. 3 차스플라인 (cubic spline) : 차수가 d = 3 인스플라인. 각구간이 3 차다항식이고, 2 차도함수가연속. 매듭의불연속성이사람의눈에보이지않은가장차수가낮은스플라인. 이이상높은차수는사용할필요가없다. 3. 1 차스플라인 (linear spline) : d = 1 인스플라인. 4. 보통 d = 0, 1, 3 이가장많이사용된다.
회귀스플라인 (regression spline) III Piecewise Cubic Continuous Piecewise Cubic Wage 50 100 150 200 250 Wage 50 100 150 200 250 20 30 40 50 60 70 Age 20 30 40 50 60 70 Age Cubic Spline Linear Spline Wage 50 100 150 200 250 Wage 50 100 150 200 250 20 30 40 50 60 70 Age 20 30 40 50 60 70 Age
회귀스플라인 (regression spline) IV 회귀스플라인의기저표현 차수가 d 이고매듭이 ξ 1,..., ξ K 인스플라인모형은 y i = β 0 + β 1 x i + β 2 xi 2 +... + β d xi d +β d+1 h(x i, ξ 1 ) + β d+2 h(x i, ξ 1 ) +... + β d+k h(x i, ξ K ) + ϵ i, ϵ i (0, σ 2 ), 과같이나타낼수있다. 즉, 위모형의회귀함수는매듭으로구성되는각구간에서 d 차다항식이고, 각매듭에서 d 1차도함수가연속이다. 여기서 { h(x, ξ) := (x ξ) d (x ξ) d + = +, x > ξ 0, o.w.
회귀스플라인 R 코드 I library(splines) fit=lm(wage~bs(age,knots=c(25,40,60)),data=wage) pred=predict(fit,newdata=list(age=age.grid),se=t) plot(age,wage,col="gray") lines(age.grid,pred$fit,lwd=2) lines(age.grid,pred$fit+2*pred$se,lty="dashed") lines(age.grid,pred$fit-2*pred$se,lty="dashed")
회귀스플라인 R 코드 II wage 50 150 250 20 30 40 50 60 70 80 bs 는회귀스플라인기저를예측변수로갖는계획행렬을생성한다. 이를이용해선형회귀모형을적용해서회귀스플라인모형을적합한다. age
회귀스플라인 R 코드 III dim(bs(age,knots=c(25,40,60))) ## [1] 3000 6 dim(bs(age,df=6)) ## [1] 3000 6 attr(bs(age,df=6),"knots") ## 25% 50% 75% ## 33.75 42.00 51.00 bs 함수에서자유도는매듭의개수를결정한다. 자유도만주어져도계획행렬을구할수있다.
자연스플라인 (natural spline) I 자연스플라인 (natural spline) 1. 자연스플라인은 3 차스플라인에서 x < ξ 1 혹은 x > ξ K 일때, 1 차다항식으로대치한것을말한다. 2. 회귀스플라인은경계부근에서큰분산을갖는다. 자연스플라인은경계부근에서안정된분산을갖게한다.
자연스플라인 (natural spline) II Wage 50 100 150 200 250 Natural Cubic Spline Cubic Spline 20 30 40 50 60 70 Age
자연스플라인 (natural spline) III 매듭의위치와개수를정하는법 1. 위치. 매듭이촘촘하게있는구간에서스플라인은더유연하다. 대개의경우설명변수의분위수를이용해정한다. K 개의매듭의위치를정하는경우, x (n i ), i = 1, 2,..., K 에정한다. K+1 2. 매듭의개수 K 는교차검증방법을이용해서정한다.
자연스플라인 (natural spline) IV 다항회귀모형과스플라인모형의비교 Wage 50 100 150 200 250 300 Natural Cubic Spline Polynomial 20 30 40 50 60 70 80 Age 자유도가 15 인다항회귀모형과자연스플라인모형이비교되었다. 다항회귀인경우경계부근에서원치않는효과가있다.
자연스플라인 R 코드 I fit2=lm(wage~ns(age,df=4),data=wage) pred2=predict(fit2,newdata=list(age=age.grid),se=t) plot(age,wage,col="gray") lines(age.grid, pred2$fit,col="red",lwd=2) wage 50 150 250 20 30 40 50 60 70 80 age
자연스플라인 R 코드 II 함수 ns 는자연스플라인기저로생성되는계획행렬을생성한다. 자연스플라인모형은이기저에 lm 함수를적용한다.
평활스플라인 (smoothing spline) I 정의 n (y i g(x i )) 2 + λ g (x) 2 dx i=1 를최소화하는함수 g 를평활스플라인이라고한다. 설명 1. λ : 조율파라미터 (tuning parameter) n 2. (y i g(x i )) 2 : 손실함수 (loss function) i=1 3. g (x) 2 dx : 벌점 (penalty). 이차도함수는함수의구불구불한 정도를나타낸다.
평활스플라인 (smoothing spline) II 평활스플라인은자연 3 차스플라인 평활스플라인은매듭이중복되지않는 (distinct) x 1,..., x n 인자연 3 차스플라인이다. 유효자유도 (effective degree of freedom) g 가회귀함수일때, (g(x 1 ),..., g(x n )) 의추정값을 ĝ λ = S λ y 와같이나타낼수있다. 이때, 유효자유도는 로정의된다. df λ := tr(s λ )
평활스플라인 (smoothing spline) III 조율파라미터의결정 λ 의값은교차검증을이용해결정할수있다. 그런데, 평활스플라인에서하나빼기교차검정오차는다음과같이수식이알려져있어, 빠르게계산할수있다. RSS cv (λ) := n n [ (y i ĝ ( i) λ (x i )) 2 yi ĝ λ (x i ) ] 2 = 1 (S λ ) ii i=1 여기서, ĝ ( i) λ (x) 는 i 번째관측치를제외하고구축한함수의추정치이고, (S λ ) ii 는 S λ 의 i 번째대각행렬이다. i=1
평활스플라인 (smoothing spline) IV Smoothing Spline Wage 0 50 100 200 300 16 Degrees of Freedom 6.8 Degrees of Freedom (LCV) 20 30 40 50 60 70 80 Age
평활스플라인 R 코드 I plot(age,wage,xlim=agelims,cex=.5,col="darkgrey") title("smoothing Spline") fit=smooth.spline(age,wage,df=16) fit2=smooth.spline(age,wage,cv=true) ## Warning in smooth.spline(age, wage, cv = TRUE): cross-validation with non-unique x values seems doubtful fit2$df ## [1] 6.794596 lines(fit,col="red",lwd=2) lines(fit2,col="blue",lwd=2) legend("topright",legend=c("16 DF","6.8 DF"),col=c("red","blue"),lty=1,lwd=2,cex=.8)
평활스플라인 R 코드 II Smoothing Spline wage 50 150 250 16 DF 6.8 DF 20 30 40 50 60 70 80 age 평활스플라인은 smooth.spline 함수를이용해서적합한다. fit 은 df=16 이주어져서조율파라미터가가결정이되었다. fit2 는교차검정을이용해서죠율파라미터가결정되었다.
국소회귀 (local regression) I x = x 0 에서 ĝ 의계산 x 0 에가까운 s = k/n 개의관측치에가중치 K(x i, x 0 ) 를주고 1 차회귀모형을적합한다. 즉, n K(x i, x 0 )(y i β 0 β 1 x i ) 2 i=1 을최소화하여 β 0 와 β 1 을얻는다. 예측치는 ˆf (x 0 ) := ˆβ 0 + ˆβ 1 x 0 가된다. 위에서선형회귀대신 p 차회귀모형을쓸수있다. 위에서 s 를펼침 (span) 이라부른다.
국소회귀 (local regression) II 0.0 0.2 0.4 0.6 0.8 1.0 1.0 0.5 0.0 0.5 1.0 1.5 0.0 0.2 0.4 0.6 0.8 1.0 1.0 0.5 0.0 0.5 1.0 1.5 Local Regression 펼침 s 의결정국소회귀를적합할때, 가중치 K, 회귀모형의차수, 펼침 s 를결정해야한다. 이중 s 의결정이제일중요하다. s 는모형의유연성을결정하고, 교차검증으로결정할수있다.
국소회귀 (local regression) III Local Linear Regression Wage 0 50 100 200 300 Span is 0.2 (16.4 Degrees of Freedom) Span is 0.7 (5.3 Degrees of Freedom) 20 30 40 50 60 70 80 Age
국소회귀 (local regression) IV 국소회귀모형의확장 1. 일부설명변수에는국소회귀모형을쓰고, 일부설명변수에는전역회귀모형을쓸수있다. 시간이설명변수일때, 시간을국소회귀모형으로쓰면시간변동계수모형 (time varying coefficient model) 이된다. 2. 국소회귀모형은고차원자료에확장이잘된다. 3. 회귀모형의차수 p 가 3, 4 보다크면성능이나빠질수있다.
국소회귀 R 코드 I plot(age,wage,xlim=agelims,cex=.5,col="darkgrey") title("local Regression") fit=loess(wage~age,span=.2,data=wage) fit2=loess(wage~age,span=.5,data=wage) lines(age.grid,predict(fit,data.frame(age=age.grid)),col="red",lwd=2) lines(age.grid,predict(fit2,data.frame(age=age.grid)),col="blue",lwd=2) legend("topright",legend=c("span=0.2","span=0.5"),col=c("red","blue"),lty=1,lwd=2,cex=.8)
국소회귀 R 코드 II Local Regression wage 50 150 250 Span=0.2 Span=0.5 20 30 40 50 60 70 80 age
일반화가법모형 (generalized additive models) I 모형 여러개의설명변수가있을때, 각변수에 1 변수회귀함수를적용하는것을말한다. y i = β 0 + f 1 (x i1 ) +... + f p (x ip ) + ϵ i, i = 1, 2,..., n. 연봉자료의예 wage = β 0 + f 1 (year) + f 2 (age) + f 3 (education) + ϵ
일반화가법모형 (generalized additive models) II <HS HS <Coll Coll >Coll f1(year) 30 20 10 0 10 20 30 f2(age) 50 40 30 20 10 0 10 20 f3(education) 30 20 10 0 10 20 30 40 2003 2005 2007 2009 year 20 30 40 50 60 70 80 age education 역적합 (backfitting) 설명변수하나씩돌아가면서나머지설명변수와그의적합된함수를고정한후, 한개의변수에관해서만회귀함수를구하는방법
일반화가법모형 (generalized additive models) III 일반화가법모형의장점과단점 1. 각설명변수에비선형함수 f j 를적용하기때문에, 설명변수를변환할필요가없다. 2. 설명변수의비선형함수는예측성능을향상시킬수있다. 3. 모형이가법이기때문에, 다른설명변수들을고정시켰을때, 한설명변수의효과가 f j 이다. 4. f j 의유연성은자유도로요약된다. 5. ( 단점 ) 가법모형이기때문에교호작용을표현하지못한다. 하지만, 교호작용을표현하고싶으면 f (x i, x j ) 를적합하면된다. 이산형반응변수와가법모형 반응변수가이산형일때도가법모형을적용할수있다. ( p(x) ) log = β 0 + f 1 (x 1 ) +... + f p (x p ) 1 p(x)
일반화가법모형 R 코드 I gam1=lm(wage~ns(year,4)+ns(age,5)+education,data=wage) 예측변수모두가자연스플라인기저로구성된가법모형을적용하려면 lm 을이용하면된다. 가법모형이큰선형모형일뿐이기때문이다. library(gam) ## Loading required package: foreach ## Loaded gam 1.12 gam.m3=gam(wage~s(year,4)+s(age,5)+education,data=wage) 하나이상의예측변수에평활스플라인을적용하려면 gam 패키지의함수 gam 이필요하다. 함수 gam 안의함수 s 는평활스플라인의기저를생성하는함수로 gam 패키지안에있는함수이다.
일반화가법모형 R 코드 II summary(gam.m3) ## ## Call: gam(formula = wage ~ s(year, 4) + s(age, 5) + education, data = Wage) ## Deviance Residuals: ## Min 1Q Median 3Q Max ## -119.43-19.70-3.33 14.17 213.48 ## ## (Dispersion Parameter for gaussian family taken to be 1235.69) ## ## Null Deviance: 5222086 on 2999 degrees of freedom ## Residual Deviance: 3689770 on 2986 degrees of freedom ## AIC: 29887.75 ## ## Number of Local Scoring Iterations: 2 ## ## Anova for Parametric Effects ## Df Sum Sq Mean Sq F value Pr(>F) ## s(year, 4) 1 27162 27162 21.981 2.877e-06 *** ## s(age, 5) 1 195338 195338 158.081 < 2.2e-16 *** ## education 4 1069726 267432 216.423 < 2.2e-16 *** ## Residuals 2986 3689770 1236 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## Anova for Nonparametric Effects ## Npar Df Npar F Pr(F) ## (Intercept) ## s(year, 4) 3 1.086 0.3537 ## s(age, 5) 4 32.380 <2e-16 *** ## education ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 preds=predict(gam.m3,newdata=wage)
일반화가법모형 R 코드 III summary 함수와 predict 함수를쓸수있다. par(mfrow=c(1,3)) plot(gam.m3, se=true,col="blue") 1. < HS Grad 4. College Grad s(year, 4) 6 4 2 0 2 4 6 s(age, 5) 40 30 20 10 0 10 partial for education 30 20 10 0 10 20 30 40 2003 2005 2007 2009 year 20 30 40 50 60 70 80 age education
일반화가법모형 R 코드 IV plot.gam(gam1, se=true, col="red") 1. < HS Grad 4. College Grad ns(year, 4) 6 4 2 0 2 4 6 ns(age, 5) 40 30 20 10 0 10 partial for education 30 20 10 0 10 20 30 40 2003 2005 2007 2009 year 20 30 40 50 60 70 80 age education gam 객체에 plot 을적용하면세개의그림을준다. gam1 은 gam 객체가아니지만 plot.gam 함수를이용해서동일한그림을그렸다.
일반화가법모형 R 코드 V gam.m1=gam(wage~s(age,5)+education,data=wage) gam.m2=gam(wage~year+s(age,5)+education,data=wage) anova(gam.m1,gam.m2,gam.m3,test="f") ## Analysis of Deviance Table ## ## Model 1: wage ~ s(age, 5) + education ## Model 2: wage ~ year + s(age, 5) + education ## Model 3: wage ~ s(year, 4) + s(age, 5) + education ## Resid. Df Resid. Dev Df Deviance F Pr(>F) ## 1 2990 3711731 ## 2 2989 3693842 1 17889.2 14.4771 0.0001447 *** ## 3 2986 3689770 3 4071.1 1.0982 0.3485661 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 세개의모형을 anova 함수를이용해서비교하였다. gam.lo=gam(wage~s(year,df=4)+lo(age,span=0.7)+education,data=wage) par(mfrow=c(1,3)) plot.gam(gam.lo, se=true, col="green")
일반화가법모형 R 코드 VI 1. < HS Grad 4. College Grad s(year, df = 4) 6 4 2 0 2 4 6 lo(age, span = 0.7) 30 20 10 0 partial for education 30 20 10 0 10 20 30 40 2003 2005 2007 2009 year 20 30 40 50 60 70 80 age education gam 함수안에국소회귀를쓸수도있다. lo 는국소회귀를나타낸다. gam.lo.i=gam(wage~lo(year,age,span=0.5)+education,data=wage) library(akima) par(mfrow=c(1,2)) plot(gam.lo.i)
일반화가법모형 R 코드 VII 1. < HS Grad 4. College Grad lo(year, age, span = 0.5) age year partial for education 20 0 10 30 education 국소회귀는두개의변수에적용할수있다. 두변수의교호작용의그림은 akima 패키지를이용해그릴수있다.
일반화가법모형 R 코드 VIII gam.lr=gam(i(wage>250)~year+s(age,df=5)+education,family=binomial,data=wage) par(mfrow=c(1,3)) plot(gam.lr,se=t,col="green") 1. < HS Grad 4. College Grad partial for year 0.4 0.2 0.0 0.2 0.4 s(age, df = 5) 8 6 4 2 0 2 partial for education 400 200 0 200 400 2003 2005 2007 2009 year 20 30 40 50 60 70 80 age education gam 함수를이용해서로지스틱모형을적합할수도있다.
일반화가법모형 R 코드 IX table(education,i(wage>250)) ## ## education FALSE TRUE ## 1. < HS Grad 268 0 ## 2. HS Grad 966 5 ## 3. Some College 643 7 ## 4. College Grad 663 22 ## 5. Advanced Degree 381 45 par(mfrow=c(1,3)) gam.lr.s=gam(i(wage>250)~year+s(age,df=5)+education,family=binomial,data=wage,subset=(educa plot(gam.lr.s,se=t,col="green")
일반화가법모형 R 코드 X 2. HS Grad 4. College Grad partial for year 0.4 0.2 0.0 0.2 0.4 s(age, df = 5) 8 6 4 2 0 2 partial for education 1 0 1 2 2003 2005 2007 2009 year 20 30 40 50 60 70 80 age education 고등학교졸업미만의교육을받은사람들중에는소득이 25 만불이상되는고소득자가없다. 고등학교졸업미만의교육을받은사람들을빼고다시적합했다.
참고문헌 아래의책에서제공하는그림들을사용하였다. 1. Gareth James, Daniela Witten, Trevor Hastie, and Robert Tibshirani. An introduction to statistical learning. Springer, 2013.