<aside> 💡 실습 목표: 연습문제 [A]~[C]를 통해 다중회귀분석을 연습합니다.
실습 데이터: day3.dta
</aside>
2-3일차에 아래의 가설을 단순선형회귀분석을 통해 테스트했습니다.
가설: 자신이 삶을 결정함에 있어 자유로운 정도가 높다고 인식할수록, 삶에 대한 전반적인 만족도가 높을 것이다.
종속변수: 삶에 대한 만족도(life_satis
) ****
독립변수: 삶을 결정함에 있어서 자유로운 정도에 대한 인식 (free_choice
)
3일차에는 회귀 진단을 통해 위 모형에 누락된 변수가 있음을 확인했습니다. 즉, 추정된 회귀계수에 편향이 있을 수 있습니다. 이때 종속변수에 영향을 미치는 통제변수들을 모형에 포함시키는 것이 한 가지 해결책이 될 수 있습니다. 특히 종속변수에 영향을 미치면서 동시에 독립변수와 상관이 있는 변수들을 누락시키지 말아야 합니다. 이를 고려하여 통제변수를 선정해 보았습니다.
통제변수들: 사회적 지위에 대한 인식(주관적 계층 인식) (SES
), 성별 (d1
), 연령 (d2
), 작년 월평균 개인 소득 (d12_1
), 이념 성향 (q25
)
<aside> 🧑🏻💻 변수 전처리
모형에 포함시킬 통제변수들의 분포 및 기초통계를 살펴봅시다.
tab1 SES d1 d2 d12_1 q25
// 한번에 빈도표 출력
sum SES d1 d2 d12_1 q25
필요한 전처리를 해주세요. 데이터가 워낙 clean하기 때문에 변수명만 바꿔주면 될 것 같네요.
rename d1 gender
rename d2 age
rename d12_1 inc
rename q25 ideo
</aside>
통제변수들이 다 준비되었습니다. 이제 다중회귀분석을 해봅시다. 가설은 다음과 같습니다: 다른 변수들을 통제하고 나서도, 자신이 삶을 결정함에 있어 자유로운 정도가 높다고 인식할수록, 삶에 대한 전반적인 만족도가 높을 것이다.
<aside> 🧑🏻💻 다중회귀분석
reg life_satis free_choice SES **i.**gender age inc ideo
참고) 범주형 변수 → i. (indicator; factor)를 붙여주어 STATA에게 이 변수가 범주형임을 알려줍니다. 필요시 연속형 변수는 c. (continuous)를 붙여주시면 됩니다.
</aside>
해석: 다른 변수들을 통제했을 때(ceteris paribus), 자신이 삶을 결정함에 있어서 자유로운 정도가 높다고 인식할수록 삶에 대한 전반적인 만족도가 높다. 다른 변수들을 통제한 상태에서 삶의 자유도가 한 단위 증가할 때마다 삶 만족도가 약 0.326만큼 증가하며, 이는 5% 유의수준 하에서 통계적으로 유의미하다.
참고) 단순선형회귀분석 결과
<aside> 🧑🏻💻 단순회귀분석 vs. 다중회귀분석
qui reg life_satis free_choice
ovtest
qui reg life_satis free_choice SES i.gender age inc ideo
ovtest
</aside>
다중회귀분석 결과를 시각화하는 방법은 크게 세 가지가 있습니다: 1) marginsplot, 2) coefplot, 3) avplot. 먼저, marginsplot은 회귀분석 후 X변수의 Y변수에 대한 영향력을 시각화할 때 유용합니다. 다음으로, coefplot은 회귀분석 결과로 추정된 회귀계수가 0과 유의하게 다른지를 시각화할 때 유용합니다. 이때 회귀계수의 신뢰구간이 0에 걸쳐 있는지 아닌지를 한 눈에 볼 수 있습니다. 마지막으로, avplot은 다른 통제변수들을 고려하고 나서 두 변수 간 관계를 산점도로 시각화할 때 유용합니다. 하나씩 연습해 보겠습니다.
<aside> 🧑🏻💻 marginsplot
단순회귀분석과 다른 점은 통제변수들이 포함되어 있다는 점입니다. 따라서 margins를 계산할 때에도 여타 변수들을 평균에 고정해준 상태에서 독립변수가 한 단위씩 증가할 때마다의 종속변수의 예측값을 계산해야 합니다. 이를 위해 atmeans 옵션을 넣어주시면 됩니다.
margins, at(free_choice=(0 (1) 10)) atmeans
marginsplot, recast(line) recastci(rarea) xlabel(0 "전혀" 5 "보통" 10 "매우")
</aside>
<aside> 🧑🏻💻 coefplot
coefplot, drop(_cons) xline(0) ciopts(recast(rcap))
coefplot , keep( free_choice SES age inc ideo ) xline(0)
</aside>