ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6장 최소 제곱 추정법
    ML DL DS/사회과학자를위한데이터과학 2022. 3. 16. 12:08

    6장 최소 제곱 추정법

    Part 3. 통계적 추론

    통계적 추론: 확률변수와 분포에 대한 지식을 이용해 관측 자료로부터 통계적 모수를 학습하는 것.

    선형회귀분석 모형 추정을 위해 등장한 최소제곱법, 선형모형을 넘어 통합적 통계적 추론 방법을 구축한 피셔의 최대 우도 주청법, 베이지안 추정법을 설명

    https://github.com/JWarmenhoven/ISLR-python
    https://github.com/emredjan/ISL-python

    최소 제곱 추정법이란


    • RSS(Resiual Sum of Squares)의 시각화
    • 가우스 마르코프 정리 (Gauss Markov Therom)

      최소제곱 추정량(Least Squares Estimators)은 선형성, 오차분산의 일정성, 독립성이라는 가정하에서 최소분산을 가진 선형 비편향추정법(BLUE: Best Linear Unbiased Estimator)이다. 오차의 정규성(normality)가 추가적으로 만족하면, 이 된다.

      • 비편향

        최소제곱 추정법이 최소 분산이라는 점 → 비편향 추정법들 사이에서만 그러한 특징을 가짐

        즉, 편향추정법 중에서는 최소 제곱 추정법보다 더 작은 분산을 가진 추정법이 존재한다는 것.

        • MLE, Bayesian, Regularization Methods(정칙화 방법) → 편향 추정법

          bias(편향)를 감수하더라도 추정치의 분산을 OLS보다 더 작게 만들고자 하는 시도

      • 선형성

        변수에 대한 가정이 아니라 모수에 대한 가정이다.

      • 오차분산의 일정성 (constant variance, Homoscedasticity)

        독립변수(설명변수)와의 오차의 분포가 독립적이어야함을 의미하는데, 오차의 평균은 최소제곱법의 정의상 항상 0이기 때문에 오차의 분산은 일정해야한다는 의미

        → 깨지는 상황: 소득이 낮으면 저축률이 낮을 수 밖에 없지만, 고소득자의 저축률은 매우 다양할 수 있음

      • 독립성

        우리가 관측한 자료의 조건부 분포가 서로 독립적이다.

        → 깨지는 경우: 종속변수가 독립변수(설명변수)와 통제 변수로 설명되지 않는 숨은 상관성을 가지는 경우

        ex) 시계열의 자기상관성, 공간자료의 공간상관성, 집계자료의 집단상관성

        숨은 상관성의 영향을 정확하게 통제하는 것이 중요함

      추가) 가우스 마르코프 정리 증명 https://rpubs.com/qkdrk777777/462735

      MVUE, UMVUE

      추가) 추정량의 선정기준: 불편성, 효율성, 일치성, 충분성

      추가) 최소분산비편향추정량, MVUE (6장 Sufficiency 부분 - Hogg)

      ref. http://www.kocw.net/home/cview.do?cid=d112ad1ca7f5fda9 8강, 9강

      https://crkim.pusan.ac.kr/crkim/24914/subview.do

      좋은 추정치를 만들고 싶은데, 어떤 성질을 가지면 좋은 추정치인지, 그리고 그것을 어떻게 측정할 것인지를 알아보자.

      • 결정이론 (Decision Theory)
        • 목표:

          X1~Xn은 어떤 pdf, f(x:세타)에서 추출된 표본이고 표본들로 부터 계산한 통계량을 Y라고 하자. 그리고 델타(y)를 세타에 대한 추정량으로 볼 때, 델타 함수를 결정함수, 결정 규칙이라하자. 어떻게 델타를 고를 것인지가 목표이다.

        • 손실함수

          실제 파라미터와 추정치의 손실로 아래와 같이 여러 방면으로 설정할 수 있다. (델타(y)를 축약해서 표현), 결정이론에서 세타를 estimand라고 부르기도 함.

          제곱오차가 절대오차보다 많이사용하는 이유는 0에서의 미분.

        • 위험함수(Risk Function)

          Risk는 손실의 기댓값이다.

        • 예시

          정규분포에서 추출한 25개의 표본을 통해 모분포의 평균을 추정한다고 가정. 하나는 표본평균으로 예측하고, 하나는 0으로만 예측했을 때 Risk 측정.

          이를 그래프로 나타내면 -1/5 ~ 1/5에서는 Risk가 첫 번째 추정이 risk가 작지만 해당 구간 사이에서는 0이 risk더 작다. → 의미: 모든 세타의 영역에서 risk가 가장 적은 추정함수를 구하는 것은 거의 불가능하다. 추정치에 제약조건을 주어야한다. 바람직한 제약조건이 어떤것인지 알아보자.

        • MVUE (Minimum Variance Unbiased Estimator, 최소분산불편추정치)

          (uniqueness가 추가되면 UMVUE라고 한다.)

          위 예시를 보니, 추정치를 비교하기 위해서 비교 대상이 되는 것들의 제약이 필요하다.

          제약은 2가지를 준다. 하나는 추정치의 기댓값이 추정하고자 하는 파라미터와 같고, 두 번째는 분산이 다른 어떤 추정치보다 작은 추정량을 선택하는 것이다.

          위의 예시에서 0으로 예측하는 추정량은 unbiased 조건을 만족하지 않는다.

        • Minimax estimator

          또 다른, 제약조건으로는 minimax가 있다. 각 추정량의 Risk 함수가 가질 수 최대값이 가장 작은 추정량을 선택하는 것이다.

          이를 이용해 위 예시에서, 0으로만 추정하는 추정량이 표본의 평균을 보다 더 좋은 추정량으로 선택할 수 있다.

      추가)

    단순 선형 회귀모형


    • OLS의 해 구하기

      RSS=Σi=1N(yi(α+βxi)2)=Σϵi2RSS = \Sigma_{i=1}^{N} (y_{i}-(\alpha+\beta x_{i})^{2}) = \Sigma\epsilon_{i}^{2}

      이 식을 최소로 하는 알파와 베타를 구하기 위해, 알파와 베타에 대해 각각 편미분

      • RSS/α=0\partial{RSS}/\partial\alpha = 0:

        1/N으로 곱하면, 아래와 같은 식이 유도됨: yˉ=α^+β^xˉ\bar{y} = \hat{\alpha} + \hat{\beta}\bar{x}

        → y절편은 종속변수와 설명변수의 평균점을 정확히 통과함

      • RSS/β=0\partial{RSS}/\partial\beta = 0:

        베타를 구하고, 분산은 V[X]=E[X2]E[X]2V[X] = E[X^{2}] - E[X]^{2}임을 이용하면 아래식이 나온다.

        β^=Σ(xixˉ)(yiyˉ)Σ(xixˉ)2=Cov[X,Y]Var[X]\hat{\beta} = {{\Sigma (x_{i} - \bar{x})(y_{i} - \bar{y})}\over{\Sigma (x_{i} - \bar{x})^{2}}} = {{Cov[X,Y]}\over{Var[X]}}

        a. 분모와 분자를 N-1로 나누면 분모는 표본분산, 분자는 표본공분산이다.

        b. 분모는 항상 0보다 큼

        c. β^\hat\beta는 점 추정치 → 최선의 추측(best guess)

        통계적 추론은 추측에 대한 예상 정확성(likely accuracy)을 표현하는 것까지 표함한다. 점 추정치에 대한 예상 정확성은 2가지로 표현 가능하다.

        c-1. 신뢰구간이라는 구간추정치로 표현

        CI=β^±tα/2,N2 σβ^^CI = \hat{\beta} \pm t_{\alpha/2,N-2}\ \hat{\sigma_{\hat\beta}}

        c-2. β^=0\hat{\beta} = 0인 영가설에 대한 p값으로 표현

        → 신뢰구간 검정방법 모두 β^\hat{\beta}의 분산(V[β^]V[\hat\beta])이 필요하다. (ui=ϵiu_{i} = \epsilon_{i})

        ref. https://stats.stackexchange.com/questions/88461/derive-variance-of-regression-coefficient-in-simple-linear-regression

        https://www.youtube.com/watch?v=rODUBTRUV0U

        V[β^]=σϵ2Σ(xixˉ)2V[\hat\beta] = {{\sigma_{\epsilon}^{2}}\over{\Sigma {(x_{i}- \bar{x})^{2}}}} 의 의미

        잔차의 분산 σϵ2{\sigma_{\epsilon}^{2}}가 고정되었다고 가정하면, 회귀분석선의 정확성을 좌우하는 것은 분모임을 알수 있다. 즉 X의 분포가 넓게 분포하면 더 정확한 예측이 가능하다. 통계적 속성 이상의 함의를 가지고 있으며, 연구 설계에서 설명변수의 변이의 폭이 중요한 이유로 해석함. (King, et al. 1994)

    • 잔차의 분산과 결정계수 R2R^{2}
      • 잔차의 분산은 종속변수의 독립변수에 대한 조건부 확률분포의 분산과 동일하다.

        잔차의 분산: V[P(YX)]=E[(YαβX)2]=E[ϵi2]=Σi=1N(yiy^)2N2V[P(Y|X)] = E[(Y-\alpha-\beta X)^{2}] = E[\epsilon_{i}^{2}] = {{\Sigma_{i=1}^{N}(y_{i}-\hat{y})^{2}}\over{N-2}}

        N-1이 아닌 N-2가 사용되는 이유는 제곱합을 추정하기 위해 두 개의 모수(경사 및 절편)가 추정되었기 때문 (ref. https://onlinestatbook.com/2/regression/accuracy.html)

      • 잔차의 분산과 종속변수의 분산을 통해 회귀모형의 설명력 표현 가능 → 결정계수 R2R^{2}

        종속변수의 분산: V[Y]=Σi=1N(yiyˉ)2N1V[Y] ={{\Sigma_{i=1}^{N}(y_{i}-\bar{y})^{2}}\over{N-1}}

        결정계수: R2=TSSSSETSS=Σi=1N(yiyˉ)2Σi=1N(yiy^)2Σi=1N(yiyˉ)2R^{2} = {{TSS - SSE}\over{TSS}} = {{{\Sigma_{i=1}^{N}(y_{i}-\bar{y})^{2}} - {\Sigma_{i=1}^{N}(y_{i}-\hat{y})^{2}}}\over{{\Sigma_{i=1}^{N}(y_{i}-\bar{y})^{2}}}} 

        TSS: Total Sum of Squares 종속변수의 한계분포(Marginal Dist.)의 분산

        SSE: Sum of Squared Errors, 설명되지 않은 분산

        R2R^{2}: 종속변수를 얼마나 잘 설명했는가를 0~1사이의 지표로 보여줌

        과적합에 취약. 종속변수와 무관한 변수를 넣으면, 하락하지 않고 소폭 증가함.

        R2R^{2} = 0 → 베타가 0

        많은 한계에도 매우 많이 사용, 해석의 용이함과 직관성. 피어슨 상관계수와 연관이 있으며, 단순 선형회귀에서 x와 y의 피어슨 상관계수 = R2R^{2}, 다중회귀에서 y추정치와 y의 피어슨 상관계수의 제곱 = R2R^{2}

        참고. https://danbi-ncsoft.github.io/study/2019/10/28/understanding_regression.html

        adjusted R2R^{2}:

        R2=1(1R2)N1Np1R^{2} = 1 - (1-R^{2}) {{N-1}\over{N-p-1}}, p: 독립변수 개수(설명변수, 통제변수의 총 개수)

    다중 선형 회귀모형


    다중회귀분석의 폭넓은 과학적 추론 범위, 인과추정, 원인 추적 → 20세기 사회과학 전체로 확산된 이유

    • 다중회귀모형의 특징
      • 실험적 통제의 근사를 제공: 실험적 통제를 독립변수로 넣을 수 있다는 것?
      • 유연성: 비선형적 효과, 상호작용효과, 변수의 잠재적 효과 등 간단히 점검
      • 확장성:

        데이터: 오차에 대한 정규분포 가정이 잘 안맞는 이산형 종속변수, 제약이 있는 종속변수, 순차적 관측 자료, 집단별 유사성이 있는 집계자료 등 확장.

        모델: 일반선형모델(Generalized Linear Model), 사건자료모형(Event Data Model), 시계열 모형(Time Series Model), 패널 모형(Panel Model), 다층 모형(Multilevel Model) 등

      • 상호작용 모형을 통한 변수들간 곱셈관계 확인(Multiplicative Relationship)

        변수들이 종속변수에 미치는 합산적 관계가 아니라 곱셈적 관계, 상호작용 관계

        ex. 당파 성향이 강할수록 지지정당의 선거 패배에 대한 두려움이 분노에 더 큰 영향을 미침. 선거패배의 두려움이 분노에 미치는 영향이 일정하지 않고, 당파적 성향이라는 조절변수/매개변수(moderator/mediator)를 통해 필터링 되는 것

    • 다중 선형 회귀모형의 추정
      • Y=Xβ+ϵY=X\beta+\epsilon → 행렬, 각각 nx1, nxp, px1, nx1 의 크기
      • RSS=ϵTϵ=(yXβ)T(yXβ)RSS = \epsilon^{T}\epsilon = (y-X\beta)^{T}(y-X\beta)

        (스칼라로 합쳐짐)

        2번 째 줄: 스칼라를 벡터로 미분. 스칼라는 transpose해도 같다

        3번 째 줄: 대칭정방행렬(symmetric, square) A에 대하여 b^TAb의 b에대한 미분

        마지막 줄: XTXX^{T}X가 역행렬을 갖지 않는다면 β^\hat\beta는 고유한 해를 갖지 않음

        증명: https://www.youtube.com/watch?v=e73033jZTCI

        각각 [x1 x2] [a11, a, \\ a, a22] [x1 x2]^T로 해보면 나옴

      • 중요한 성질

        마지막줄, 최소제곱법의 해가 되기 위한 조건

      • 기울기의 분산

        cf. 가우스 마르코프 이론

        cf. 기울기의 분산

        ϵ^i2=Σi=1N(yiy^)2Nk\hat\epsilon_{i}^{2} = {{\Sigma_{i=1}^{N}(y_{i}-\hat{y})^{2}}\over{N-k}}, k = 추정 모수의 개수

        ref) https://web.stanford.edu/~mrosenfe/soc_meth_proj3/matrix_OLS_NYU_notes.pdf

    • 변수들간의 관계

      cf. agresiti and finaly, 2008

      1. 연쇄관계, 배제 제한(chain relation, exclusion relationship)

        배제제한과 같은 관계는 도구변수 선택에서 가장 중요한 조건이다.

        도구변수 분석: x2가 y에 미치는 영향을 측정하는 것을 C라는 혼란요인이 방해하기 때문에, 혼란에 영향을 받지 않는 x1을 도구로 이용해 x2가 y에 미치는 영향을 간접적으로 측정하는 것. 인과관계를 주장할 수 있으며, 내생성 제거 일치성와 연관이 있음

        cf. 도구변수를 이용한 인과관계 https://danbi-ncsoft.github.io/study/2019/08/07/IV.html

        cf. 도구변수를 이용한 인과관계 & 예시 https://anarinsk.github.io/rstat-danbi_ivreg/

      1. 허위 상관성(spurious correlation)

        x2는 x1, y에 영향을 미치고, x1은 y에 영향을 미치지 않은 경우, x1이 y에 직접적 영향을 미치는 것처럼 추정을 줄 수 있음

        ex. 익사사고 어린이 수(y), 아이스크림 소비량(x1), 여름(x2)

      1. 다중 원인 (multiple causes)

        x1과 x2는 y의 독립된 원인들이며, 한 변수의 통제 여부가 다른 변수의 영향을 추정하는데 큰 영향을 미치지 않음. 다중회귀 분석에서 변수들 간의 합산적 관계를 가정하는 것은 변수들의 관계가 다중 원인이라고 보기 때문.

        ex. 투표선택(y), 인종(x1), 성별(x2)

      1. 상호작용 (interaction) - 중요한 주제

        어떤 맥락에서 그 가설이 설득력이 있는 반면, 다른 맥락에서는 그렇지 않다(Under what Circumstances?)는 논평에 대한 답할 수 있는 분석 방법이다.

        다중 선형회귀 모형은 변수들의 효과가 합산적(additive)이라는 가정에 기초한다. 개별 설명변수들과 통제변수들이 종속변수에 영향을 미치는 방식이 독립적이라는 것이다.

        기존 연구들에서 합산적, 독립적이라고 믿었던 변수들의 효과가 상호작용적, 종속적이라고 주장하는 것은 사회과학 경험적 연구에서 빈번하고 중요하다.

    • 상호작용의 효과: X: 설명변수, D: 조절변수
      • 임계점 효과(Threshold Effect): X의 효과는 D값이 어떤 수준을 넘어서는지 여부에 따라 달라짐
      • 맥락효과(Contextual Effect): X의 효과가 D라는 맥락의 유무에 따라 달라짐. 맥락의 유무에 따라, X의 계수의 유의성, 방향, 크기가 변화함
      • 비선형 조건부 효과(Nonlinear Conditional Effect): X의 효과가 D값의 구간이 변화함에 따라 비선형적으로 변화. X와 D에 대해 선형일 것이라는 가정이 맞지 않은 경우.
      • 잠재 효과(Latent Effect): X의 효과는 오로지 D를 통해서만 나타남. 맥락효과와 다른 점은 D를 통하지 않고서 X의 효과를 관측할 수 없다는 점이 다름.

      위 효과 모두 검증하고자하는 가설이 조건부적임. 가설이 조건부적인 성격을 띨 경우 항상 상호작용 모형을 고려해야함.(Brambor, et al. 2006)

    • 상호작용 모형의 주의점

      1) 변수 선택 시 상호작용을 구성하는 모든 변수를 포함한다. ex) X, D, X * D 모두 포함한다. X*D를 포함하고 X, D를 누락하면 누락 변수에 의한 편향 발생한다.

      2) 상호작용 분석의 결과로 얻는 계수를 해석할 때, 종속변수에 대한 예측치 차이를 보는 것이 바람직함. 개별 계수 자체에 대한 유의성 검정으로 상호작용 효과의 유무를 판단하면 혼란을 겪을 수 있음. 상호작용 효과와 변이를 정확하게 보려면, 시뮬레이션을 진행하는 것이 바람직함.

      3) 상호작용 효과를 해석할 때, X와 D의 외삽적 추론(관측범위 밖으로 확대 해석)을 유의해야 함.

      ex. 인종의 다양성(X), 인종간 폭력사태 빈도(Y), 민주주의 수준(D)에서 수집 데이터에서 민주주의 수준이 중간인 국가가 없다면, 중간 수주의 분석은 모르는 것으로 두는 것이 맞음

      cf. 상호작용 모형 예시, (+ 유전알고리즘을 이용한 symbolic regression?)

    • 더미변수 분석

      상호작용 3가지 경우로 나눌 수 있음

      - X: 연속 / D: 연속, X: 이산 / D: 이산, X: 연속 / D: 이산

      더미 변수 분석: X: 연속 / D: 이분변수 인 경우

      병렬분석과 상호작용분석 적용 가능.

      • 병렬분석과 상호작용분석 차이가 안나는 경우 - 병렬분석 & 상호작용분석 예시1
        • 데이터 예시

          교육이 소득에 미치는 영향을 남자와 여자에 대해 살펴 볼 때

          소득차이는 성별과 교육이라는 2가지 변수에 의해 좌우되지만 두 변수의 영향은 서로 독립적으로 가정

        • 병렬분석 (Parallel Regression)

          Yi=α+βXi+γDi+ϵiY_{i} = \alpha + \beta {X_{i}} + \gamma D_{i} + \epsilon_{i}

          더미변수로 표현되는 집단이 서로 다른 베이스라인을 갖고 있을 경우.

          → 교육수준 0에서, 여자 기대소득: α+γ\alpha + \gamma / 남자 기대소득: α\alpha

          단순히 병렬 분석하는 것은 기울기가 같다는 강한 가정에 기초해 있다. (남성과 여성은 교육수준에 관계없이 일정한 임금 격차를 갖고 있다는 가정)

        • 상호작용 분석 (Interaction Analysis)

          상호작용 모형은 기울기에 대하여 성별 차이의 가능성을 열어두는 모형을 사용

          Yi=α+βXi+γ(XiDi)+δDi+ϵiY_{i} = \alpha + \beta {X_{i}} + \gamma (X_{i}D_{i} ) + \delta D_{i} + \epsilon_{i}

        • 결과
          # codes from https://github.com/jongheepark/BayesianSocialScience/blob/master/06-ols.R
          # install.packages("stargazer", dependencies = TRUE)
          library("stargazer")
          set.seed(1973)
          N <- 100              ## 데이터 수 
          x <- runif(N, 6, 20)  ## 6~20의 교육 수준, 연속균일분포에서 샘플링
          D <- rbinom(N, 1, .5) ## 0,1 남성 여성, 이항분포에서 추출
          y <-  1 + 0.5*x - .4*D + rnorm(N) ## y_true값 생성, 입실론값 정규분포 샘플링
          df.lm <- data.frame(y = y, x = x, D = D)
          df.lm$D <- factor(df.lm$D, labels=c('남성','여성'))
          
          summary(df.lm)
          
          ## 병렬분석 (parallel regression)
          reg.parallel <- lm(y ~ x + D, data=df.lm)
          # stargazer(reg.parallel, type = 'text')
          
          # 상호작용분석
          reg.inter <- lm(y~x*D, data = df.lm)
          stargazer(reg.parallel, reg.inter, type = 'text', 
                    label="tab:xDD", dep.var.labels = "y (가상자료)")
          
          ## addTrans https://github.com/SachaEpskamp/qgraph/blob/master/R/addTrans.R
          
          par(mfrow=c(1, 2), mar=c(3,3,2,1), mgp=c(2,.7,0),family="AppleGothic", 
              tck=.02, cex.main=1.0)
          ## 병렬분석
          plot(df.lm$x, df.lm$y, main="병렬분석", pch=19, col=addTrans("gray20", 40), 
               xlab = "교육", ylab="소득")
          abline(a = reg.parallel$coef[1], b = reg.parallel$coef[2],  
                 lwd=4, col=addTrans("brown", 200))
          abline(a = reg.parallel$coef[1] + reg.parallel$coef[3], 
                 b = reg.parallel$coef[2],  lwd=4, col=addTrans("brown", 100))
          legend("topleft", legend=c("남성", "여성"), bty="n", lwd=c(4,4), lty=c(1,1),
                 col=c(addTrans("brown", 200), addTrans("brown", 100)))
          
          ## 상호작용분석
          plot(df.lm$x, df.lm$y, main="상호작용분석", pch=19, col=addTrans("gray20", 40), 
               xlab = "교육", ylab="소득")
          abline(a = reg.inter$coef[1], b = reg.inter$coef[2],  
                 lwd=4, col=addTrans("brown", 200))
          abline(a = reg.inter$coef[1] + reg.inter$coef[3], 
                 b = reg.inter$coef[2] + reg.inter$coef[4],  
                 lwd=4, col=addTrans("brown", 100))
          legend("topleft", legend=c("남성", "여성"), bty="n", lwd=c(4,4), lty=c(1,1),
                 col=c(addTrans("brown", 200), addTrans("brown", 100)))

          Adjusted R squared값을 보면, 병렬분석과 상호작용 분석이 같다. 상호작용 변수는 통계적으로 유의미하지 않다. → 자료생성에서 없었기 때문에 당연함.

          cf) 회귀에서 F 검정, 모든 회귀계수가 0이라는 귀무가설 기각여부 검정 :

          p : 추정 파라미터 개수

          F-통계량:

          특정 변수를 제외하고 보고 싶으면,

          https://web.stanford.edu/~hastie/ISLR2/ISLRv2_website.pdf

          cf) more examples: https://cran.r-project.org/web/packages/interactions/vignettes/interactions.html

      • 병렬분석과 상호작용분석 차이가 나는 경우, 신뢰구간 - 병렬분석 & 상호작용분석 예시2
        # codes from https://github.com/jongheepark/BayesianSocialScience/blob/master/06-ols.R
        ## addTrans https://github.com/SachaEpskamp/qgraph/blob/master/R/addTrans.R
        set.seed(1973)
        N <- 100
        x <- runif(N, 6, 20)
        D <- rbinom(N, 1, .5)
        y <-  1 + 0.5*x - .4*D + 0.4*D*x + rnorm(N)
        df.lm2 <- data.frame(y = y, x = x, D = D)
        df.lm2$D <- factor(df.lm2$D, labels=c('여성','남성'))
        
        reg.parallel2 <- lm(y ~ x + D, data=df.lm2)
        reg.inter2 <- lm(y ~ x * D, data=df.lm2)
        stargazer(reg.parallel2, reg.inter2, type = 'text', 
                  label="tab:xDD", dep.var.labels = "y (가상자료)")
        
        
        ## ----dummy3, fig.cap="더미변수를 이용한 병렬분석과 상호작용분석)", echo=TRUE, message=FALSE, fig.align="center", fig.width = 12, fig.height = 6, fig.fullwidth=TRUE----
        par(mfrow=c(1, 2), mar=c(3,3,2,1), mgp=c(2,.7,0), tck=.02,family="AppleGothic",
            cex.main=1)
        ## 병렬분석
        plot(df.lm2$x, df.lm2$y, main="병렬분석", pch=19, col=addTrans("gray20", 40), 
             xlab = "교육", ylab="소득")
        abline(a = reg.parallel2$coef[1], b = reg.parallel2$coef[2],  
               lwd=4, col=addTrans("brown", 100))
        abline(a = reg.parallel2$coef[1] + reg.parallel2$coef[3], 
               b = reg.parallel2$coef[2],  lwd=4, col=addTrans("brown", 200))
        legend("topleft", legend=c("남성", "여성"), bty="n", lwd=c(4,4), lty=c(1,1),
               col=c(addTrans("brown", 200), addTrans("brown", 100)))
        ## 상호작용분석
        plot(df.lm2$x, df.lm2$y, main="상호작용분석", pch=19, col=addTrans("gray20", 40), 
             xlab = "교육", ylab="소득")
        abline(a = reg.inter2$coef[1], b = reg.inter2$coef[2],  
               lwd=4, col=addTrans("brown", 100))
        abline(a = reg.inter2$coef[1] + reg.inter2$coef[3], 
               b = reg.inter2$coef[2] + reg.inter2$coef[4],  
               lwd=4, col=addTrans("brown", 200))
        legend("topleft", legend=c("남성", "여성"), bty="n", lwd=c(4,4), lty=c(1,1),
               col=c(addTrans("brown", 200), addTrans("brown", 100)))
        
        library("gmp")
        library("ggthemes")
        library("ggplot2")
        
        methods("predict")
        
        
        ## ---- echo=TRUE, message=FALSE, warning=FALSE----------------------------------
        ## 회귀분석 예측치
        df.lm2$pred.parallel2 = predict(reg.parallel2)
        df.lm2$pred.inter2 = predict(reg.inter2)
        
        ## 신뢰구간
        conf.parallel2 = predict(reg.parallel2, interval = "prediction")
        conf.inter2 = predict(reg.inter2, interval = "prediction")
        
        head(conf.parallel2)
        head(conf.inter2)
        
        ## ----dummy4, fig.cap="병렬분석(왼쪽)과 상호작용분석(오른쪽)의 신뢰구간", echo=TRUE, message=FALSE, fig.align="center", fig.width = 12, fig.height = 6, fig.fullwidth=TRUE----
        theme_jhp <- function (base_size = 10, base_family = "AppleGothic") 
        {
          colors <- tibble::deframe(ggthemes::ggthemes_data[["fivethirtyeight"]])
          (ggthemes::theme_foundation(base_size = base_size, base_family = base_family) + 
              theme(line = element_line(colour = "black"),
                    rect = element_rect(fill = colors["Light Gray"], 
                                        linetype = 0, colour = NA),
                    text = element_text(colour = colors["Dark Gray"]), 
                    ## axis.title = element_blank(), axis.text = element_text(), 
                    axis.ticks = element_blank(), axis.line = element_blank(), 
                    legend.background = element_rect(), legend.position = "bottom", 
                    legend.direction = "horizontal", legend.box = "vertical", 
                    panel.grid = element_line(colour = NULL), 
                    panel.grid.major = element_line(colour = colors["Medium Gray"]), 
                    panel.grid.minor = element_blank(),
                    plot.title = element_text(hjust = 0, size = rel(1.5), face = "bold"),
                    plot.margin = unit(c(1, 1, 1, 1), "lines"),
                    strip.background = element_rect()))
        }
        
        ## 병렬분석
        df.parallel = cbind(df.lm2, conf.parallel2)
        g.parallel <- ggplot(df.parallel, aes(x = x, y = y, color = D) ) +
          geom_point() +
          geom_ribbon( aes(ymin = lwr, ymax = upr, fill = D, color = NULL), alpha = .2) +
          geom_line(aes(y = fit), size = 1) + 
          labs(subtitle = "병렬분석", fill = NULL, colour = NULL) +  
          theme_jhp() + xlab("교육") + ylab("소득")
        
        ## 상호작용분석
        df.inter = cbind(df.lm2, conf.inter2)
        g.inter <- ggplot(df.inter, aes(x = x, y = y, color = D) ) +
          geom_point() +
          geom_ribbon( aes(ymin = lwr, ymax = upr, fill = D, color = NULL), alpha = .2) +
          geom_line(aes(y = fit), size = 1) + 
          labs(subtitle = "상호작용분석", fill = NULL, colour = NULL) +  
          theme_jhp() + xlab("교육") + ylab("소득")
        
        NetworkChange::multiplot(g.parallel, g.inter, cols=2)
        
        

        이 역시도 자료 생성과정에서 당연한 결과이긴 하지만, 병렬분석은 기울기가 같다는 가정이 강하다는 것을 확인할 수 있다.

        • 신뢰구간 추정

          상호작용 호과가 통계적으로 유의미한 것인지 확인하기 위해, 신뢰구간을 직접 계산할 수 있지만, predict함수를 이용해 신뢰구간을 쉽게 구할 수 있음.

          병렬분석은 성별효과의 신뢰구간이 교육변수의 전부분에서 겹치고 있어 유의미한 차이가 있다고 보기 어렵지만, 상호작용 분석에서는 신뢰구간이 확연하게 구분됨. → 교육수준이 일정 수준 이상인 경우에 교육의 소득효과에서 성별차이가 두드러진다고 해석 가능.

    회귀분석 모형의 진단


    SDEM(Significance, Direction, Effect Size, Model-fit)의 마지막 단계, 진단

    진단: 모형이 자료를 잘 설명하는지 확인

    민감성 (sensitivity) ⟷ 견고성 (Robustness)

    대부분 선형회귀 민감성이 있으며, 선형성이라는 편리한 가정을 위한 비용

    잔차는 선형회귀 모형의 가장 중요한 자료

    • 회귀모형의 진단에서 확인할 것
      • 가우스 마르코프 가정: 독립성, 선형성, 오차분산의 일정성, 정규성
        • 선형성

          잔차 그래프(Residual Plot) 확인, x의변화량과 잔차를 확인

        • 정규성

          잔차가 서로 상관성이 없어야 한다.

          ex. 극단적 예시로 단순히 데이터를 2배로 늘기만해도 신뢰구간이 2\sqrt{2} 만큼 줄어듬 → 시계열에서의 자기 상관성이 이와 유사함. 시계열 데이터에서 오차의 상관성을 고려한 것이 많이 개발됨

          오차항이 상관성(ρ\rho)이 있다면 잔차를 추적한다. 제일 위는 인접한 잔차의 상관관계가 0인 경우

          시계열 이외에도, 동일한 환경 요인에 있는 경우 상관관계가 없는 오류의 가정은 위반될 수 있음

          일반적으로, 다른 통계방법에서 오차간의 상관관계가 없는 것은 매우 중요함.

        • 오차분산의 일정성

          V[ϵi]=σ2V[\epsilon^{i}] = \sigma^{2}

          표준 오차, 신뢰 구간 및 가설 검정은 이 가정에 의존. 로그 선형 모델, 가중최소제곱(weighted least square)와 같은 방안 적용가능.

          ex. 로그 선형 모형을 이용해 해결한 예시

      • 그외
        1. 외적 타당성: 표본 범위 내에서만 유의미성을 가짐. 외삽적 추론이 없는지 확인, 교차타당성 검사(cross validation) 수행
        1. 극단적 관측값: 최소제곱예측은 조건부 분포의 기댓값(E[P(Y|X)]) 이다. 극단값에 취약하다. (Outliers, High Leverage Points)
          • Outliers: RSE, 신뢰구간, p 값, R^2에 영향을 줌. Residual Plot, Studentized Residuals plot 활용

            독립변수 xi가 종속변수 yi에 대해 비정상적인 관측치

          • High Leverage Points

            독립변수 내에서 비정상적인 관측치 → 레버리지 통계값 활용(Leverage Statistic)

          cf) example

        1. 다중공선성(Multicollinearity): 실험 설계의 문제.

          두 개 이상의 독립변수간 상관성이 높을 때.

          설명변수별 독립적 효과 측정의 어려움, XTXX^{T}X의 역행렬이 구하기 어려움

          검출 방안:

          1) 독립변수의 상관행렬 확인 → 2개 이상의 다중공선성 확인 어려움

          2) VIF(Variacne Inflation Factor) 확인:

          각각의 독립변수를 종속변수로 설정하여 회귀를 통해 아래를 계산

          VIF(β^j)=11RXjXj2VIF(\hat\beta_{j}) = {{1}\over{1-R^{2}_{Xj|X-j}}}

          5 or 10 이상일 경우 다중공선성 우려

          해결방안: 제거, 합치기(평균취하기 등), 릿지회귀, 주성분회귀, 부분최소제곱법 등

    • 성능 척도

      MAE, RMSE, R-Squared(피어슨 상관계수 제곱)

      모델 성능간의 t-검정을 통해 성능 차이가 유의미한지 확인

    선형회귀분석 확장 방안들


    • 기존 선형분석선을 최적화 문제로 바꿀 경우, 아래 식

      최소제곱선: minα,βΣi=1N(yiα+βxi)2\min_{\alpha, \beta} \Sigma_{i=1}^{N} (y_{i}-\alpha+\beta x_{i})^{2}

    • 고차함수 (Polynomial Regression)

      모수들 관계는 여전히 선형, 예시

      minα,β1,β2,β3Σi=1N(yiα+β1xi+β2xi2+β3xi3)2\min_{\alpha, \beta_{1}, \beta_{2}, \beta_{3}} \Sigma_{i=1}^{N} (y_{i}-\alpha+\beta_{1} x_{i}+\beta_{2} x_{i}^{2}+\beta_{3} x_{i}^{3})^{2}

    • Lowess (Locally Weighted Scatter Plot Smoothing)

      근접이웃에 대한 가중치 Wki(xi)W_{ki}(x_{i})

      minβΣi=1NWki(xi)(yiΣj=0pβxij)2\min_{\beta} \Sigma_{i=1}^{N} W_{ki}(x_{i})(y_{i} - \Sigma_{j=0}^{p}\beta x_{i}^{j})^{2}

    • 평활 스플라인 (smoothing spline)

      함수의 오차부분 (yif(xi))2(y_{i}-f(x_{i}))^{2} 과 함수의 변화 정도 f(x)2dx\int f''(x)^{2}dx 를 고려해, 둘을 최소화하는 함수를 찾는 것. 함수의 변화의 정도는 직선일 때, 가장 작아 오차를 최소화 하면서 직선에 가까운 함수를 찾는다

      minfΣin(yif(xi))2+λf(x)2dx\min_{f} \Sigma_{i}^{n} (y_{i}-f(x_{i}))^{2} + \lambda\int f''(x)^{2}dx

    cf) https://web.stanford.edu/~hastie/ISLR2/ISLRv2_website.pdf, 297 pg

    • example
      set.seed(1999)
      x = seq(0, 1, length=10)
      y = x + rnorm(10, 0, 0.3)
      df.reg <- data.frame(x = x, y = y)
      fit <- lm(y ~ x, data=df.reg)
      plot(x,y, pch=19, cex=1.5, col=addTrans("brown", 100), asp = 0.7)
      # ols line
      abline(fit, lwd=1, col = 1)
      # a loess line
      loess_fit <- loess(y ~ x, data=df.reg)
      lines(df.reg$x, predict(loess_fit), lwd=1, col = 2)
      # a polynomial regression
      pol_fit <- lm(y ~ poly(x,3), data=df.reg)
      lines(df.reg$x, predict(pol_fit), lwd=1, col = 3)
      # a spline function
      spline_fit <- smooth.spline(x=df.reg$x, y = df.reg$y)
      lines(spline_fit, lwd=1, col = 4)
      legend("topleft", c("OLS", "lowess", "polynomial", "spline"), lwd=1, 
             col=1:4, lty=1, bty="n")

    선형 회귀분석을 최적화 문제로만 생각하면 가장 안좋은 방법일 수 있음

    하지만, 가장 보편적인 추론 방법인 이유

    • 불확실성 표현 가능: 신뢰구간 / lowess, 평활스플라인은 불확실성 체계적 표현 어려움
    • 해석이 용이함: X의 단위증가당 Y의 변화 확인
    • 국지적설명(local explanation)에 유용: 테일러 전개는 모든 비선형관계가 국지적으로는 일차함수로 근사될 수 있다는 것을 보여줌. 대신 관측자료 범위가 증가하고 이질성(heterogeneity)가 증가하면, 선형모형의 근사 유용성은 감소

    댓글

Designed by Tistory.