본문 바로가기
데이터분석자격증 ADsP/Part 3 데이터 분석 R

[ADsP] 통계분석 - 회귀분석 (Regression Analysis)

by doodlie 2024. 2. 23.

회귀분석(Regression Analysis)이란? 

y = ax + b

  • 회귀분석 - 독립변수들이 종속변수에 미치는 영향을 추정하는 통계적 분석 방법 
    • 종속변수(dependent variable) - y값, 영향을 받는 변수
    • 독립변수 (independent variable) - x값, 영향을 주는 변수
  • 독립변수가 1개 = 단순선형회귀분석
  • 독립변수가 2개이상 = 다중선형회귀분석
  • 일반선형회귀는 종속변수가 연속형일때 가능함 (구간,비율)
  • 잔차/오차 - 계산으로 얻은 이론 값과 실제 측정으로 얻은 값은 차이
    • 모집단 (population) - 오차 (error), 표본집단 (sample) - 잔차 (residual)

선형회귀분석의 가정 (*매우중요)

  • 선형성 (linearity) - 독립변수와 종속변수의 관계가 선형이다
  • 독립성 - 잔차와 독립변수의 값이 관련이 없다
    • durbin-watson 통계량
  • 정규성(정상성, normality) - 잔차항이 정규분포를 이룸뤄야한다
    • Normal Q-Q plot - 잔차들이 그래프 선상에 있어야 정규성을 갖음
    • Shapiro-wilk test - pval이 0.05보다 크면 정규성을 가정하게 됨 (귀무가설) 
    • K-S test 
    • Anderson-Darling test

  • 등분산성 - 독립변수의 모든 값에 대해 잔차항들의 분포는 동일한 분산을 갖는다 
    • Scale location - 기울기 0인 직선이 등분산성을 갖음 
    • residuals vs. fitted - 점의 위치가 전체 그래프에 고르게 분포하는 것이 등분산성을 갖음 

 

  • 비상관성 - 관측치들의 잔차들끼리 상관이 없어야 한다 

R코딩으로 보는 회귀모형

단순회귀모형

set.seed(2)
x = runif(50,0,5) #runif(갯수,시작,끝)
y = 5 + 2*x + rnorm(50,0,0.5) #rnorm(개ㅐㅅ수,평균,표준편차)
df <- data.frame(x,y)
fit <- lm(y~x, data=df) #lm 선형모델
fit

 

결과

Call:
lm(formula = y ~ x, data = df)

Coefficients:
(Intercept)            x  
      4.748        2.072

y = ax + b = 4.748x + 2.072

 

다중회귀모형

rm(list=ls())
set.seed(10)
u <- runif(50,0,6)
v <- runif(50,6,12)
y = 3 + 0.5*u + 1*v + rnorm(50,0,0.5)
df <- data.frame(y, u, v)
lm(y~u+v, df)

결과

Call:
lm(formula = y ~ u + v, data = df)

Coefficients:
(Intercept)            u            v  
     2.6104       0.5439       1.0353

 


회귀분석 검토사항 (**중요)

1) 모형이 통계적으로 유의미한가? => F통계량의 유의확률(p-val)

  • F 통계량 = 회귀제곱평균(MSR)/잔차제곱평균(MSE)
  • F통계량의 p-val < 0.05 이면 유의함 
  • F통계량이 클수록 유의함 

2) 회귀계수들이 유의미한가? => 회귀계수의 t값에 대한 유의확률(p-val)

  • t통계량의 p-val < 0.05 이면 유의함 

3) 모형이 얼마나 설명력을 갖는가 (적합도)? => 결정계수(R^2)

  • 0~1 범위 (1이 가장 좋은 모델, no error)
  • R^2 = 회귀제곱합(SSR) / 총제곱합 (SST), 1-(SSE/SST)
    • SST = y의 변동성
    • SSE = x,y를 통해 설명하지 못하는 변동성
    • SSR = 모델이 설명가능한 y의 변동성
    • sst중 설명가능한 부분의 비율이 결정계수
> a<-lm(y~u+v, df)
> summary(a)

Call:
lm(formula = y ~ u + v, data = df)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.8615 -0.3505  0.0758  0.3786  0.9788 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  2.61038    0.46425   5.623 9.98e-07 ***
u            0.54391    0.04587  11.858 9.90e-16 ***
v            1.03525    0.04761  21.743  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4925 on 47 degrees of freedom
Multiple R-squared:  0.916,	Adjusted R-squared:  0.9125 #수정된경정계수
F-statistic: 256.3 on 2 and 47 DF,  p-value: < 2.2e-16

 

t값의 p-value가 0.05보다 작기 때문에 회귀계수들이 유의미함

f통계량의 p-value가 0.05보다 작기 때문에 모형이 유의미함 

R-squared 계수가 0.99, 1에 가깝기 때문에 설명을

자유도 = 46, 즉 n = 47 + 2 = 49

*자유도 Degree of Freedom (df = n - k - 1)

 

결정계수 구하기 

> out <- lm(dist~speed, data=cars)
> anova(out)
Analysis of Variance Table

Response: dist
          Df Sum Sq Mean Sq F value   Pr(>F)    
speed      1  21186 21185.5  89.567 1.49e-12 ***
Residuals 48  11354   236.5                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

MSE = 236.5 오차분산의 불편추정량

p-val이 0.05보다 작기에 통계적 유의미 

결정계수 = SSR/(SSR+SSE) = ((21186)/(21186+11354))=0.651

 


다중공선성(Multicollinearity)란?

  • 모형의 일부 설명변수가 다른 설명변수와 상관되어 있을 때 발생함
  • 중대한 다중공선성은 회귀계수의 분산을 증가시켜 불안정하고 해석하기 어렵게 만듦 
  • vif 함수: 분산팽창지수 값이 10을 넘으면 다중공선성이 존재한다고 봄
  • 다중공선성 해결방법들: 
    • 높은 상관관계가 있는 설명변수를 제거
    • 단계적 회귀분석을 이용해 제거 
      • 모든가능한조합: AIC, BIC 
      • 후진제거법: step('backward') 함수 
      • 전진선택법
      • 단계별선택법
      • 유의확률이 높은 설명변수를 제거
    • 주성분분석(PCA) 사용하여 차원축소 
  • 표본의 크기가 작을 때 변수 간의 상관관계를 파악하기 어렵기에 다중공선성을 예측하기 어려움

정규화 선형회귀 - 변수들의 영향을 통제하는 방법

어떻게 분석모형의 예측능력을 높일 수 있을까? 

1) 라쏘 (lasso) - 절댓값의 합을 최소화 (L1규제). 불필요한 가중치 파라미터를 0으로 설정하여 제외시키기.

2) 릿지 (ridge) - 가중치(weight)의 제곱합을 최소화 (L2규제). 가중치 파라미터를 0에 가깝게 만들기.

3) 엘라스틱넷 (elastic net) - 라쏘와 릿지를 결합한 모델