Simple Linear Regression

FMB819: R을 이용한 데이터분석

고려대학교 경영대학 정지웅

Today’s Agenda

  • 단순 선형 회귀 모형(Simple Linear Regression Model)최소제곱법(Ordinary Least Squares, OLS) 추정 소개.

  • 실증 분석: 학급 규모와 학생 성취도의 관계

  • 인과적(causal) 관계를 어떻게 밝힐 수 있을까?

학급 규모와 학생 성취도

  • 어떤 정책이 학생 학습 성취도 향상시키는가?

  • 학급 규모 축소는 수십 년간 교육 정책 논쟁의 핵심 주제였음.

  • Joshua Angrist와 Victor Lavy (1999)의 연구에서 사용된 데이터 분석. 해당 데이터는 Raj Chetty와 Greg Bruich의 강의에서 제공됨.

  • 1991년 이스라엘 유대인 공립 초등학교 5학년생(10-11세)의 시험 점수와 학급/학교 특성 포함.

  • 국가 단위 시험을 통해 수학 및 (히브리어) 읽기 능력 평가했으며, 원점수는 1-100 사이 척도로 변환됨.

Task 1

07:00

  1. 데이터를 여기에서 다운로드해서 grades로 저장하시오.
    힌트: haven 라이브러리의 read_dta 함수 사용해서 .dta 형식의 파일 불러오면 됨. (참고: .dtaStata에서 사용하는 데이터 파일 확장자임.)

  2. 데이터셋 설명:

    • 관측 단위는? 즉, 각 행이 무엇을 의미하는가?
    • 총 몇 개의 관측치가 있는가?
    • 데이터셋을 확인하고 어떤 변수가 있는지 확인하시오. avgmathavgverb는 뭘 의미하는가?
    • skimr 패키지의 skim 함수 사용해서 classize, avgmath, avgverb 변수에 대한 기본적인 요약 통계 확인함.
      힌트: dplyrselect 사용해서 변수 선택한 후 %>%skim() 적용하면 됨.
  3. 학급 규모와 학생 성취도 간 실제 (선형) 관계에 대해 어떤 관계가 있을 것이라 생각하는가?

  4. 학급 규모와 수학/언어 점수 간 상관관계는?

학급 규모와 학생 성취도: Scatter plot

  • 상관계수에서 보듯이 어느 정도 양의 관계 있음. 학급 규모별 평균 점수 계산해서 더 명확하게 살펴보자

학급 규모와 학생 성취도: Binned Scatter Plot

학급 규모와 학생 성취도: Regression Line

학급 규모와 학생 성취도의 관계를 시각적으로 요약하는 방법: 산점도를 통과하는 선(Line)

  • 어느 선이 더 나은가? 어떤 기준으로 더 나은가?

단순 선형 회귀 (Simple Linear Regression)

지금까지 분석을 좀 더 공식적으로 정리하자면

  • 두 변수 간의 관계에 관심 있음:

    • 결과변수 (종속변수, dependent variable): average mathematics score \((y)\)

    • 설명변수 (독립변수, independent variable): class size \((x)\)

  • 각 학급 \(i\)에 대해 \(x_i\)\(y_i\)를 관측할 수 있음. 예, 학급 규모와 평균 수학 점수의 결합 분포(joint distribution)를 시각화할 수 있음.

  • 회귀선은 이 관계를 선(line) 하나로 요약하고 있음. 절편 \(b_0\)와 기울기 \(b_1\)을 갖는 선의 방정식은 다음과 같음:

\[ \widehat{y}_i = b_0 + b_1 x_i \]

  • \(\widehat{y}_i\)관측값 \(i\)에서의 예측값(prediction)을 의미함. 즉, 주어진 회귀 직선에 따라 우리가 \(y_i\)를 어떻게 예측하는지 보여줌.

직선의 방정식

직선의 방정식

직선의 방정식

Simple Linear Regression: 잔차(Residual)

  • 만약 모든 데이터가 직선 위에 있다면, \(\widehat{y}_i = y_i\).

Simple Linear Regression: 잔차(Residual)

  • 만약 모든 데이터가 직선 위에 있다면, \(\widehat{y}_i = y_i\).

Simple Linear Regression: 잔차(Residual)

  • 만약 모든 데이터가 직선 위에 있다면, \(\widehat{y}_i = y_i\).

  • 대부분의 경우 종속변수 \((y)\)는 우리가 선택한 독립변수 \((x)\)들에 의해서만 설명되지 않음, \(\widehat{y}_i \neq y_i\). 실제 값과 예측 값의 차이를 잔차(residual)라 부름.

  • 실제 데이터 \((x_i, y_i)\)는 따라서 예측값 + 잔차로 표현될 수 있음. \(e_i\)로 표시.

    \[ y_i = \widehat y_i + e_i = b_0 + b_1 x_i + e_i \]

Simple Linear Regression: Graphically

Simple Linear Regression: Graphically

Simple Linear Regression: Graphically

Simple Linear Regression: Graphically

Simple Linear Regression: Graphically

Simple Linear Regression: Graphically

무엇을 “최소화”하는 직선을 구해야할까?

Ordinary Least Squares (OLS) 추정

  • 잔차는 +/- 값이 있어 서로 상쇄됨. 따라서 제곱 잔차(squared residuals)를 고려 \[\forall i \in [1,N], e_i^2 = (y_i - \widehat y_i)^2 = (y_i - b_0 - b_1 x_i)^2\]

  • \(\sum_{i = 1}^N e_1^2 + \dots + e_N^2\) 값이 최소화하는 \((b_0, b_1)\) 값을 선택.

Ordinary Least Squares (OLS) 추정

  • 오차(error)의 부호 \((+/-)\)가 서로 상쇄. 제곱 잔차(squared residuals)를 고려 \[\forall i \in [1,N], e_i^2 = (y_i - \widehat y_i)^2 = (y_i - b_0 - b_1 x_i)^2\]

  • \(\sum_{i = 1}^N e_1^2 + \dots + e_N^2\) 값이 최소화하는 \((b_0, b_1)\) 값을 선택.

Ordinary Least Squares (OLS) 추정

Ordinary Least Squares (OLS) 추정

Ordinary Least Squares (OLS) 계수 공식

  • OLS: 잔차 제곱합(squared residuals)을 최소화하는 추정 방법.

  • 절편 \(b_0\)와 기울기 \(b_1\)의 공식, 하나의 독립변수만 있는 경우:

기울기 (Slope): \(b_1^{OLS} = \frac{cov(x,y)}{var(x)}\)

절편 (Intercept):\(b_0^{OLS} = \bar{y} - b_1\bar{x}\)

  • 잔차 제곱합을 최소화하는 문제를 풀어 유도됨.
    자세한 수학적 과정은 [여기]에서 확인.

Ordinary Least Squares (OLS) 해석

절편 \((b_0)\): \(x = 0\)일 때 예측된 \(y\)\((\widehat{y})\).

기울기 \((b_1)\): \(x\)가 한 단위 증가할 때, \(y\) 값이 평균적으로 변하는 정도

  • 두 변수 간 “관련이 있음(associated)”이라는 표현을 사용함.
    즉, \(b_1\)\(x\)\(y\)에 대한 인과적 영향으로 해석하면 안 됨.
    이를 주장하려면 특정 조건이 충족되어야 함.

  • 또한 \(x\)의 단위(unit)에 따라 \(b_1\)의 해석과 크기(magnitude)가 달라질 수 있음.

  • \(x\)의 단위가 무엇인지 명확히 해야 함

OLS with R

  • OLS는 lm함수를 사용하여 추정가능
lm(formula = dependent variable ~  independent variable, data = data.frame containing the data)

학급 규모와 학생 성적

  • 다음과 같은 선형 모형을 OLS로 추정하자: \(\textrm{average math score}_i = b_0 + b_1 \textrm{class size}_i + e_i\)
# OLS regression of class size on average maths score
lm(avgmath_cs ~ classize, grades_avg_cs) 
## 
## Call:
## lm(formula = avgmath_cs ~ classize, data = grades_avg_cs)
## 
## Coefficients:
## (Intercept)     classize  
##     61.1092       0.1913

Ordinary Least Squares (OLS): Prediction

## 
## Call:
## lm(formula = avgmath_cs ~ classize, data = grades_avg_cs)
## 
## Coefficients:
## (Intercept)     classize  
##     61.1092       0.1913

이 결과가 의미하는 것 (\(i\) 첨자 생략):

\[ \begin{aligned} \widehat y &= b_0 + b_1 x \\ \widehat {\text{average math score}} &= b_0 + b_1 \cdot \text{class size} \\ \widehat {\text{average math score}} &= 61.11 + 0.19 \cdot \text{class size} \end{aligned} \]

학생 수가 26명일 때 예상되는 평균 성적은?

\[ \begin{aligned} \widehat {\text{average math score}} &= 61.11 + 0.19 \cdot 26 \\ \widehat {\text{average math score}} &= 66.08 \end{aligned} \]

Task 2

05:00

다음 코드를 실행하여 데이터를 학급 규모(class size) 수준에서 집계하시오:

grades_avg_cs <- grades %>%
  group_by(classize) %>%
  summarise(avgmath_cs = mean(avgmath),
            avgverb_cs = mean(avgverb))
  1. 평균 언어 점수(avgverb_cs)를 학급 규모(classize)에 대해 회귀분석 수행. 회귀 계수(coefficients)를 해석하시오.

  2. 이 회귀분석에서 OLS 계수 \(b_0\)\(b_1\)을 직접 계산 (공식 이용).
    힌트: cov, var, mean 함수 사용.

  3. 학급 규모가 0일 때, 예측된 평균 언어 점수는 얼마인가? 이 값이 실제로 의미가 있는가?

  4. 학급 규모가 30명일 때, 예측된 평균 언어 점수는 얼마인가?

예측값과 잔차의 성질

  • \(\widehat{y}_i\)의 평균은 \(\bar{y}\)와 같음 \[\begin{align} \frac{1}{N} \sum_{i=1}^N \widehat{y}_i &= \frac{1}{N} \sum_{i=1}^N b_0 + b_1 x_i \\ &= b_0 + b_1 \bar{x} = \bar{y} \end{align}\]

  • 잔차의 평균(또는 합)은 0. \[\begin{align} \frac{1}{N} \sum_{i=1}^N e_i &= \frac{1}{N} \sum_{i=1}^N (y_i - \widehat y_i) \\ &= \bar{y} - \frac{1}{N} \sum_{i=1}^N \widehat{y}_i \\\ &= 0 \end{align}\]

  • 설명 변수(regressor)와 잔차는 정의상 서로 상관이 없음.

    \[Cov(x_i, e_i) = 0\]

  • 예측값과 잔차는 상관이 없음.

    \[\begin{align} Cov(\widehat y_i, e_i) &= Cov(b_0 + b_1x_i, e_i) \\ &= b_1Cov(x_i,e_i) \\ &= 0 \end{align}\]

    이는 \(Cov(a + bx, y) = bCov(x,y)\)라는 성질 때문.

선형성 가정: 데이터 시각화의 중요성

  • 공분산(covariance), 상관계수(correlation), 그리고 단순 OLS 회귀는 두 변수 간 선형 관계(linear relationships)만 측정한다는 점을 기억해야 함.

  • 서로 완전히 동일한 상관계수 및 회귀선을 갖는 두 개의 데이터셋이 완전히 다르게 보일 수도 있음.

선형성 가정: Anscombe의 예제

  • Francis Anscombe (1973)는 통계적으로 완전히 동일한 네 개의 데이터셋을 만들었음. 하지만 시각적으로 보면 완전히 다름!
dataset cov var(y) var(x)
1 5.501 4.127 11
2 5.500 4.128 11
3 5.497 4.123 11
4 5.499 4.123 11

데이터에서 비선형 관계?

  • 회귀 분석에서 비선형 관계를 반영할 수 있음.

  • 고차항(higher order term)을 추가하면 됨.
    \[ y_i = b_0 + b_1 x_i + b_2 x_i^2 + e_i \]

  • 이는 다중 회귀(multiple regression)의 한 형태임.

  • 예를 들어, 아래 데이터를 사용해 이전 회귀 모델을 적용할 수 있음:

분산 분석 (Analysis of Variance)

  • 다음 관계를 기억할 것:
    \[ y_i = \widehat{y}_i + e_i \]

  • 이를 기반으로 다음과 같은 분산 분해(variance decomposition)를 얻음: \[\begin{align} Var(y) &= Var(\widehat{y} + e)\\ &= Var(\widehat{y}) + Var(e) + 2 Cov(\widehat{y},e)\\ &= Var(\widehat{y}) + Var(e) \end{align}\]

  • 왜냐하면:

    • \(Var(x+y) = Var(x) + Var(y) + 2Cov(x,y)\)
    • \(Cov(\hat{y},e) = 0\)
  • 총 변동 (SST) = 모델이 설명한 변동 (SSE) + 설명되지 않은 변동 (SSR)

적합도 평가 (Goodness of Fit)

  • \(R^2\) 값은 모델이 데이터를 얼마나 잘 설명하는지(fit) 측정하는 지표.

\[ R^2 = \frac{\text{variance explained}}{\text{total variance}} = \frac{SSE}{SST} = 1 - \frac{SSR}{SST}\in[0,1] \]

  • \(R^2\) 값이 1에 가까울수록, 모델의 설명력(explanatory power)높음.

  • \(R^2\) 값이 0에 가까울수록, 모델의 설명력낮음.

  • 예를 들어, \(R^2 = 0.5\)이면, \(x\)의 변화가 \(y\)의 변화 중 50%를 설명함.

  • 낮은 \(R^2\) 값이 무조건 모델이 쓸모없다는 뜻은 아님! 예측(predictive power)보다는 인과적 메커니즘(causal mechanisms)에 더 초점을 맞추는 경우.

  • \(R^2\) 값은 인과 관계(causal relationship)를 나타내는 지표가 아님! 회귀 모델에서 높은 \(R^2\) 값이 있다고 해서, \(x\)\(y\)를 인과적으로 설명한다고 볼 수 없음!

Task 3

10:00

  1. avgmath_csclassize에 대해 회귀(regress)하고 결과를 math_reg 객체에 저장.

  2. summary(math_reg)를 실행하여 (다중) \(R^2\) 값을 확인함. 이 값의 의미를 해석할 것.

  3. classizeavgmath_cs상관계수(correlation)를 제곱하여 계산. 이 값은 단일 설명변수(one regressor)를 가진 회귀에서 \(R^2\)와 상관계수 간의 관계를 보여줌을 보이시오.

  4. 1번과 2번을 avgverb_cs에 대해 반복함.
    어떤 시험에서 학급 규모의 분산이 학생 점수의 분산을 더 많이 설명하는지 비교하시오.

  5. (Optional) broom 패키지를 설치 및 로드한 후, math_regaugment() 함수에 전달하여 새로운 객체에 저장함.
    avgmath_cs의 분산(SST)과 예측값 .fitted의 분산(SSE)을 사용하여 \(R^2\) 값을 직접 계산하시오. (이전 슬라이드의 공식을 참고할 것.)

🔍 인과 관계를 찾아가는 길

데이터를 어떻게 다룰까? : 읽기(Read), 정리(Tidy), 시각화(Visualize)…

🚧 변수간 관계를 어떻게 요약할까? 단순 선형 회귀(Simple Linear Regression)

❌ 인과 관계(Causality)란 무엇인가?

❌ 전체 모집단을 관측하지 못하면 어떻게 할까?

❌ 우리의 연구 결과가 단순한 무작위(Randomness) 때문일 수도 있을까?

❌ 실제로 외생성을 어떻게 찾아낼 수 있을까?

THE END!