본문 바로가기
Statistics

[회귀] 다중회귀에서 조정된 회귀계수와 최종회귀식 R

by jangpiano 2021. 1. 14.
반응형

 

<회귀식에 변수를 추가하기 위해 고려해야할 사항들> 

 

단순 회귀 (Simple Regression) : 하나의 설명변수(X1)를 가지고 Y의 변화를 설명하는 회귀모형 

다중 회귀 (Multiple Regression) : 두개 이상의 설명변수(X1, X2, ...)를 가지고 Y의 변화를 설명하는 회귀모형 

 

매우 당연한 논리이겠지만, 다중 회귀가 필요한 이유는, 반응변수의 변화에 대한 설명이 하나의 설명변수만으로는 충분하지 않다고 생각되는 경우들 때문이다. 물론, 하나의 설명변수만으로 충분히 Y의 값을 예측할수 있는 현상들도 분명히 있지만, 사회과학 현상은 그보다 매우 복잡함으로, 다중회귀 모형의 필요성이 대두된것이다. 

 

다중회귀 모형에 대한 기본적인 전제는, X1 만으로는 설명되지 않는 Y의 부분에 새로운 변수(X2, X3, X4,...)를 추가함으로써 Y에 대한 설명에 보탬이 될 수 있어야 한다는 것이다. 좀더 일반화 시키자면, 어떠한 회귀모형에 새로운 변수를 추가하기 위한 당위성은 추가된 변수로 인해 기존의 변수들이 설명하지 못하던 Y 에 대한 설명력이다. 즉, 하나의 설명변수를 추가하기 위해서는, 이 변수가 추가됨으로써 기존의 변수들이 예측하지 못하던 Y값을 얼마나 더 잘 예측할 수 있게 되느냐에 대한 검토가 필요하다. 

 더 정확한 이해를 위해 예를 들어가며 설명하겠습니다. 

 

부모의 교육지출에 대한 추론을 하고자 할때, 우리가 가장 먼저 고려할 설명변수는 '아이의 나이' 일것이다. 보편적으로 아이의 학년이 높아질수록 부모의 교육지출이 커지기 때문이다. 

 

따라서, 설명변수(X1)를 아이의 나이, 반응변수(Y)를 교육지출에 대한 관측값을 바탕으로 단순회귀를 진행 해 보겠다. 

 X1 (아이의 나이)  3, 3, 4, 5, 5, 6, 6, 6, 7, 7, 8, 9, 10
 Y (부모의 교육 지출)  1, 2, 3, 3, 6, 4, 5, 7, 3, 7, 6, 9, 10

 

아이의 나이에 따른 부모의 교육 지출을 대략적으로 유추할 수 있는 산점도를 그려보면 이러하다. 

 

위 관측값들을 바탕으로 추정된 단순선형회귀식은, Y = 1.091*X1 -1.553 이다. 

 

위 회귀식에 대한 결정계수(Coefficient of determination)는 0.7112 로 나타난다. 이는, 총 변동 중 회귀모형(기울기 모수를 포함한 모형)에 의하여 설명되어지는 변동의 크기를 의미한다. 따라서, 결정계수가 0과 1사이의 실수로 표현된다는 점을 감안하면, 0.7112는 반응변수와 설명변수의 선형관계가 잘 설명되어 진다고 할 수 있다. 

(결정계수에 대한 자세한 설명은 https://jangpiano-science.tistory.com/105?category=875432 이곳을 참고해주세요:) )

 

 

위의 아이의 나이와 부모의 교육지출에 대한 선형관계를 관측한 후에, 부모의 교육지출에 영향을 미치는 또다른 지표인 '부모의 소득수준' 역시, 고려대상이 될 수 있다. 이 새로운 설명변수(부모의 소득수준)이 회귀모형에 추가됨으로써 부모의 교육지출을 추정하는데 도움을 주는지를 알아보자. 

 

우선, 추정회귀식에 부모의 소득수준이라는 새로운 설명변수를 추가하기 전에 부모의 소득수준과 교육지출 사이에 선형관계가 존재하는지 살펴볼 필요가 있다. 

 

 X2(부모의 소득수준)  2, 4, 6, 5, 8, 4, 6, 9, 7, 9, 7, 9, 10
 Y (부모의 교육지출)  1, 2, 3, 3, 6, 4, 5, 7, 3, 7, 6, 9, 10

 

 

 

이 관측값들로 추정되는 단순 선형 회귀식은  Y = 1.019 *X2 -1.664  이다. 

 

 

위 회귀식에 대한 결정계수(Coefficient of determination)는  0.7889 로 나타난다. 이는 설명변수를 '아이의 나이'로 설정하여 Y를 추정한 회귀식보다는 적게 나온걸 볼 수 있다. 

 

X1, X2 변수 모두 포함된 다중 선형 회귀식이 당연하게도 X1, 혹은 X2 둘중 하나만을 설명변수로 채택한 단순 선형 회귀모형보다 Y에 대한 설명력이 높다. 우리는 이를, 변수를 두개(아이의 나이, 부모의 소득수준)를 가진 다중 선형 회귀에서의 결정계수로 알 수 있다. 

 

위의 관측값을 가지고 추정한 다중 선형 회귀 모형은, Y = 0.5193*X1 + 0.6627*X2 -2.4628  이며,  

결정계수는 0.8494  로 설명변수로 각각 X1, X2만을 포함한 회귀모형의 결정계수 0.7112 ,0.7889  보다 높게 나타난다. 

이는 당연한 결과이다.

 

하지만, X2를 최종 선형회귀 모형에 포함시키기 위해서는, X1과 X2의 상관관계 역시 고려해야 한다. X1와 X2의 관계성을 나타낸 산점도를 통해, 두 변수 사이에 상관성이 있다고 판단 된다. 실제로, 아이의 학년이 높을수록, 부모의 나이가 많다는 관계성을 생각 할 수 있고, 따라서 아이의 학년과 소득 수준은 선의 관계에 있다고 할 수 있다. 

 

 

X1과 X2의 상관관계가 강한 경우, 우리는 X2라는 설명변수를 포함시킬 당위성이 떨어진다. 왜냐하면, 변수 하나를 추가하는 것의 당위성은 X1이 설명하지 못한 부분을 새로운 변수가, X1과 중복되지 않으며 얼마나 설명할 수 있느냐에 있기 때문이다. 

 

위 부분을 증명하기 위한 단계는 다음과 같다. 

 

1) X1로 설명되지 않는 Y의 변화량(X1을 설명변수로 포함시킨 회귀식을 적용했을때 나오는 잔차.)을 구한다. --> e1 (Y | X1)

2) X2와 X1 에서 서로 중복되지 않는 부분(X2의 X1에 관한 회귀적합 후 나오는 잔차)을 구한다.  --> e2(X2|X1)

3) e1 (Y | X1)와 e2(X2|X1)의 상관성이 있다고 판단되면, X2 변수 추가에 대한 당위성이 증명된다. 

 

위 절차들을, 주어진 관측값들로 수행해 보자면,

 

<X1에 대해 조정된 B2>

 

e1 (Y | X1)

-0.719887955  0.280112045  0.189075630 -0.901960784  2.098039216 -0.992997199  0.007002801  2.007002801 

-3.084033613  0.915966387 -1.175070028  0.733893557  0.642857143 

 

e2(X2|X1)

-1.9607843137254894472221  0.0392156862745079992649  1.1764705882352939347868 -0.6862745098039217950259 

 2.3137254901960782049741 -2.5490196078431370807493 -0.5490196078431373027939  2.4509803921568629192507 

-0.4117647058823529215843  1.5882352941176467453488 -1.2745098039215687624193 -0.1372549019607842146762 

-0.0000000000000002220446 

 

<편회귀그림> 

 

다음 잔차들(e1, e2) 로 구성된 산점도를 X1에 대한 X2의 추가변수 그림(added variable plot) 또는 편회귀그림( partial regression plot )이라고 할 수 있다.  

 

위 잔차들의 관계성에서 나타나는 기울기가 바로 X1에 대해 조정된 회귀계수의 추정값으로, B2에 대한 새로운 추정값이 0.6627260083449235673 로 계산된다. 이는 e1 (Y | X1) 과 e2(X2|X1) 의 관계를 나타내는 회귀식의 기울기이다. 

 

또한, 두 잔차의 관계성에 대한 p-값은 0.00503로 계산되어, 일반적인 유의수준인 0.5 보다 작기 때문에, e1 (Y | X1) 과 e2(X2|X1) 의 관계에 대한 통계적 유의성이 증명되며, 이는 X2의 추가 여부에 대한 통계적 유의성이 된다. 

 

<X2에 대해 조정된 B1>

 

똑같은 과정을 X2에 대해 조정된 B1을(회귀계수의 추정값)를 구하기 위해 반복해보자. 

 

e(Y|X2)

 0.6258352 -0.4120267 -1.4498886 -0.4309577 -0.4877506  1.5879733  0.5501114 -0.5066815 -2.4688196 -0.5066815 

 0.5311804  1.4933185  1.4743875 

 

e(X1|X2)

 0.08908686 -1.28285078 -1.65478842  0.03118040 -2.02672606  1.71714922  0.34521158 -1.71269488  0.65924276 

-0.71269488  1.65924276  1.28730512  1.60133630 

 

위 잔차들의 관계성에서 나타나는 기울기가 바로 X2에 대해 조정된 회귀계수의 추정값으로, B1에 대한 새로운 추정값이 0.51927279952314742140 로 계산된다. 이는 e(Y|X2)과 e(X1|X2)의 관계를 나타내는 회귀식의 기울기이다. 

 

또한, 두 잔차의 관계성에 대한 p-값은 0.03277으로 계산되어, 일반적인 유의수준인 0.5 보다 작기 때문에,  e(Y|X2)과 e(X1|X2)의 관계에 대한 통계적 유의성이 되며, 이는 X1의 추가 여부에 대한 통계적 유의성이 된다. 

 

<새로운 추정값 B1, B2 에 따른 B0 그리고 최종회귀식>

 

오차의 평균은 0이 됨으로써, 우리는 Y의 평균에 대해 다음과 같은 추정식을 가질 수 있다. B1과 B2의 새로운 추정값을 안다면, 우리는 X의 표본평균과 Y의 표본평균만을 알면 B0을 쉽게 구할 수 있다. 계산된 B0의 추정값은 -2.462845 로 나타난다. 

 

B1에 대한 새로운 추정값이 0.51927279952314742140

B2에 대한 새로운 추정값이 0.6627260083449235673 

B0의 추정값이 -2.462845 로 계산됨에 의해 

 

최종적인 회귀식은 Y = -2.462845 + 0.519*X1 + 0.6627*X2 이다. 

 

<R>

>X1 = c(3, 3, 4, 5, 5, 6, 6, 6, 7, 7, 8, 9, 10)  #age of children

>X2 = c(2, 4, 6, 5, 8, 4, 6, 9, 7, 9, 7, 9, 10)  #income level of parents

>X3 = c(1, 5, 2, 6, 7, 2, 3, 6, 9, 10, 9, 4, 7) #children's academic interest

>Y = c(1, 2, 3, 3, 6, 4, 5, 7, 3, 7, 6, 9, 10)

 

>lm(Y ~X1+X2+X3)

Call:

lm(formula = Y ~ X1 + X2 + X3)

 

Coefficients:

(Intercept)           X1           X2           X3  

    -2.3662       0.5262       0.8377      -0.2374  

 

<회귀 개념을 이용해 직접 만들어본 '조정된 최종 추정 회귀식 만드는 정리된 R 코드'>

 

#code for adjusted multiple linear regression with more than 2 variables (generalized code) 

 

estimate_B = list()

 

adjusted_multi_regre = function(data_frame, Y){

  

  estimate_B0 = mean(Y)

  

  for (i in 2:length(data_frame)){

    

    e1 = resid(lm(Y~., data = data_frame[-i]))

    e2 = resid(lm(data_frame[[i]]~., data = data_frame[c(-1, -i)]))

    

    estimate_B = c(estimate_B, lm(e1~e2)$coefficients[2])

    print(paste("estimate of B",i-1,"is",estimate_B[[i-1]], collapse = " "))

    

    estimate_B0 = estimate_B0 - estimate_B[[i-1]]*mean(data_frame[[i]])

  }

  print(paste("estimate of B 0 is", estimate_B0, collapse = " "))

}

 

 

#[STEPS]

X1 = c(3, 3, 4, 5, 5, 6, 6, 6, 7, 7, 8, 9, 10)  #age of children

X2 = c(2, 4, 6, 5, 8, 4, 6, 9, 7, 9, 7, 9, 10)  #income level of parents

X3 = c(1, 5, 2, 6, 7, 2, 3, 6, 9, 10, 9, 4, 7) #children's academic interest

Y = c(1, 2, 3, 3, 6, 4, 5, 7, 3, 7, 6, 9, 10)  #expenditure in child-education

 

data_2 = data.frame(Y, X1, X2, X3)

data_2

 

e1 = resid(lm(Y~X2+X3))    #e(Y|X2,X3)

e2 = resid(lm(X1~X2+X3))    #e(X1|X2,X3)

estimate_B1 = lm(e1 ~e2)$coefficients[2]

 

e21 = resid(lm(Y~X1+X3))    #e(Y|X1,X3)

e22 = resid(lm(X2~X1+X3))    #e(X2|X1,X3)

estimate_B2 = lm(e21 ~ e22)$coefficients[2]

 

e31 = resid(lm(Y~X1+X2))     #e(Y|X1,X2)

e32 = resid(lm(X3~X1+X2))     #e(X3|X1,X2)

estimate_B3 = lm(e31 ~ e32)$coefficients[2]

 

estimate_B0 = mean(Y) - estimate_B1*mean(X1) - estimate_B2*mean(X2) - estimate_B3*mean(X3)

 

#[EXAMPLE]

 

>adjusted_multi_regre(data_2, Y)

 

[1] "estimate of B 1 is 0.526230867874899"

[1] "estimate of B 2 is 0.837739117395767"

[1] "estimate of B 3 is -0.2374234441652"

[1] "estimate of B 0 is -2.36621062480183"

 

반응형