’베타’는 이러한 체계적 위험의 크기를 측정: \(E(R_i) = R_f + \beta_i (E(R_m) - R_f)\)
CAPM은 “리스크 프리미엄을 베타 하나로 설명하는” 벤치마크
CAPM을 완전한 진리라기보다, 출발점으로 사용
CAPM의 활용
기업가치평가(DCF): 할인율이 필요함
프로젝트 투자판단(NPV): 프로젝트의 리스크에 맞는 요구수익률이 필요함
성과평가(알파/샤프/정보비율): “시장을 감안하면 잘했나?”를 평가해야 함
포트폴리오/리스크관리: “이 자산이 시장과 얼마나 연동되는가?”를 알아야 함
단순 선형 회귀를 이용하여 베타를 추정
자산의 초과 수익률을 종속 변수로, 시장 포트폴리오의 초과 수익률을 독립 변수로 하는 회귀 분석 수행
베타의 추정
# (설치되지 않은 경우 주석 해제하여 설치)# install.packages("tidyquant")# install.packages("tidyr")# install.packages("dplyr")library(tidyquant)library(tidyr)library(dplyr)raw_data <-tq_get(c("^KS200", "006800.KS"), get ="stock.prices",from ="2010-01-01",to =Sys.Date())# 결측치 정리 (NA 제거): 수정주가(adjusted)를 기준으로 결측치가 있는 행을 제거.clean_data <- raw_data %>%drop_na(adjusted) # 월별 수익률 계산: tq_transmute를 사용하여 일별 주가를 월별 수익률로 변환.monthly_returns <- clean_data %>%group_by(symbol) %>%tq_transmute(select = adjusted,mutate_fun = periodReturn,period ="monthly",col_rename ="monthly_return")# 베타 추정을 위한 데이터 구조 변경 (Wide format)# 선형 회귀(lm) 함수에 넣기 쉽게 두 자산의 수익률을 각각의 열로 배치.returns_wide <- monthly_returns %>%pivot_wider(names_from = symbol, values_from = monthly_return) %>%rename(KOSPI200 =`^KS200`, MiraeAsset =`006800.KS`) %>%drop_na() # 두 지표 모두 데이터가 존재하는 월만 남김# 베타(Beta) 추정beta_model <-lm(MiraeAsset ~ KOSPI200, data = returns_wide)# 회귀분석 결과 요약 출력summary(beta_model)
##
## Call:
## lm(formula = MiraeAsset ~ KOSPI200, data = returns_wide)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.20492 -0.04662 -0.00657 0.03347 0.39777
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.001751 0.006332 0.277 0.782
## KOSPI200 1.609119 0.111201 14.470 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.08722 on 192 degrees of freedom
## Multiple R-squared: 0.5217, Adjusted R-squared: 0.5192
## F-statistic: 209.4 on 1 and 192 DF, p-value: < 2.2e-16
library(tidyquant) # 금융 데이터 수집 및 변환을 위한 패키지library(tidyr) # 데이터 구조 변경을 위한 패키지library(dplyr)raw_data <-tq_get(c("^KS200", "006800.KS", "^SP500TR", "000001.SS", "^N225"), get ="stock.prices",from ="2010-01-01",to =Sys.Date())# 결측치 정리 (NA 제거): 수정주가(adjusted)를 기준으로 결측치가 있는 행을 제거.clean_data <- raw_data %>%drop_na(adjusted) # 월별 수익률 계산: tq_transmute를 사용하여 일별 주가를 월별 수익률로 변환.monthly_returns <- clean_data %>%group_by(symbol) %>%tq_transmute(select = adjusted,mutate_fun = periodReturn,period ="monthly",col_rename ="monthly_return")# 베타 추정을 위한 데이터 구조 변경 returns_wide <- monthly_returns %>%pivot_wider(names_from = symbol, values_from = monthly_return) %>%rename(KOSPI200 =`^KS200`, MiraeAsset =`006800.KS`, SP500 =`^SP500TR`, SSE =`000001.SS`, N225 =`^N225`) %>%arrange(date) %>%mutate(SP500_lag =lag(SP500), SSE_lag =lag(SSE)) %>%# SP500과 SSE, N225의 1개월 지연값 추가drop_na() # 기존 결측치 및 lead/lag 함수 사용으로 인해 첫째 달과 마지막 달에 발생한 NA 제거# 베타(Beta) 추정 (Lead, Lag 포함)beta_model <-lm(MiraeAsset ~ KOSPI200 + SP500 + SSE + N225, data = returns_wide)summary(beta_model)
학생들의 읽기 점수(avgverb), 수학 점수(avgmath), 학급 규모(classize), 그리고 사회경제적 불리함(disadvantaged) 등의 변수를 포함
읽기(Reading) 점수를 종속 변수(Dependent Variable) 로 설정하여 회귀 분석을 수행
haven 패키지의 read_dta() 함수를 사용하여 데이터를 불러오기. 데이터를 grades라는 객체에 저장
avgverb (읽기 점수)를 종속 변수로, classize와 disadvantaged를 독립 변수로 사용하여 회귀분석. 결과를 reg 객체에 저장. 각 계수(coefficient)의 의미는 무엇인가? 단순 선형 회귀와 비교했을 때 계수는 어떻게 달라졌는가? 수학 점수 회귀 분석과 비교했을 때 계수의 차이점은 무엇인가?
누락변수 편의 (Omitted Variable Bias, OVB)
OVB 이란, 회귀 분석에서 중요한 통제 변수(control variable) 를 제외함으로써 발생하는 편의(bias) 을 의미.
이로 인해 관심 있는 독립 변수의 계수를 신뢰할 수 없고, 왜곡될 수 있음.
\(y\): 종속변수, \(x\): 독립변수, \(z\): 누락변수인 경우 다음 회귀분석이 가능
1️⃣ 단순 선형 회귀 모델 (Simple Linear Model)
\[
y = b_0 + b_1x + e
\]
이 경우, \(x\)와 \(z\)가 동시에 \(y\)에 영향을 미친다면, \(z\)를 제외하면 \(b_1\)이 편향될 수 있음.
2️⃣ 다중 선형 회귀 모델 (Multiple Linear Model): 만약 \(z\) 변수를 포함한다면?
\[
y = c_0 + c_1x + \color{#d90502}{c_2}z + e
\]
이 모델에서는 \(x\)뿐만 아니라 누락된 변수 \(z\)도 \(y\)에 영향을 미침. 즉, \(z\)를 포함하면, \(c_1\)이 더 정확한 값을 가질 수 있음.
누락변수 편의 (Omitted Variable Bias, OVB)
3️⃣ 누락된 변수와\(x\)의 관계 (Omitted Variable on Regressor)
\[
z = d_0 + \color{#d96502}{d_1}x + e
\]
이 모델은 \(x\)와 생략된 변수 \(z\)가 서로 상관관계가 있을 경우를 나타냄.
즉, \(x\)가 \(z\)에 영향을 미친다면, 단순 회귀 분석에서 \(b_1\)의 추정치는 신뢰할 수 없게 됨.
\(R^2\) (결정 계수) 는 회귀 모델이 종속 변수(\(y\))의 변동을 얼마나 설명하는지 나타내는 지표.
하지만, 새로운 변수를 추가할 때마다\(R^2\) 값은 항상 증가.
심지어 의미 없는 변수라도 추가하면\(R^2\)이 증가할 수 있음!
이를 보완하기 위해 수정된\(R^2\) (Adjusted \(R^2\)) 개념이 도입
불필요한 변수를 추가하는 것을 방지하기 위해 패널티(penalty)를 부과
하지만, 대부분의 경우 \(R^2\)와 수정된 \(R^2\)는 큰 차이가 없음
Task 2
STAR 데이터
STAR(Student Teacher Achievement Ratio) 데이터는 1985년부터 1989년까지 미국 테네시 주에서 진행된 무작위 실험의 결과를 담고 있음.
학생들을 소규모 학급(small), 일반 학급(regular), 보조 교사가 있는 일반 학급(regular+aide)으로 무작위 배정하여, 학급 규모가 학생들의 학업 성취도에 미치는 영향을 분석하기 위한 데이터셋.
STAR 데이터를 다운로드 링크. 데이터를 star_df라는 객체에 저장. NA 값이 있는 행은 제거하시오. grades가 “2”인 학생들만 선택하시오.
math를 school 변수에 대해 회귀 분석하시오. school 변수가 포함하는 값들을 먼저 확인. 회귀 계수를 해석하시오. 누락된 범주 (category)는? 결과가 예상과 일치하는가? 만약 다르다면 왜 그런가? 누락된 변수가 존재할 가능성이 있는가?
lunch 변수가 "free"인 학생들의 비율을 학교 위치(school) 별로 계산하시오. 결과를 보고, 무료 점심 자격 여부(free) 변수를 추가하여 이전 회귀 분석을 다시 수행하시오. free 변수를 추가했을 때 회귀 계수는 어떻게 변화하는가?
math를 star 변수에 대해 회귀 분석하시오. 다음의 모든 변수를 포함하여 다중 회귀 분석을 수행하시오: math ~ star + gender + ethnicity + lunch + degree + experience + school. 무작위 실험이 잘 수행되었다고 판단할 수 있는가?
다중 회귀 분석에서 얻은 수정된\(R^2\) 값을 확인하시오. 수정된 \(R^2\) 값이 의미하는 바는 무엇인가? 관측 가능한 개별 학생, 교사, 학교 특성이 학업 성취도에 미치는 중요성에 대해 어떤 결론을 내릴 수 있는가?
(Optional) math를 gender와 experience 변수에 대해 회귀 분석하시오. 회귀 계수를 어떻게 해석할 수 있는가? 이러한 회귀 분석 결과를 시각적으로 표현한다면 어떻게 보일 것인가?