다중 회귀분석
다중 회귀분석 (Multiple Regression)
- 독립변수가 2개 이상인 회귀분석.
- Python 관계식:
+
기호로 독립변수 구분/추가.price ~ mileage + year
mileage
와year
둘 다를 독립변수로 사용.
통계적 통제 (Statistical Control)
- 필요성: 독립변수
x
외에 종속변수y
및x
와 모두 관련된 혼란변수(confounder)z
존재 시,x
의 순수 영향력 파악 어려움 (z
영향이x
효과에 섞여 반영). - 실험적 통제: 실험 설계 통해
z
값 일정하게 유지하여 영향 제 거. - 통계적 통제:
z
를 회귀 모형에 독립변수로 함께 포함. →x
의 회귀계수()에서z
의 간접 영향 분리/제거 효과.x
의 고유한 영향력 추정 가능.
표준화 (Standardization) in Multiple Regression
- 필요성: 다중회귀분석에서 독립변수들 단위 다르면, 회귀계수 크기만으로 영향력 직접 비교 어려움.
- 표준화: 각 변수를 (값 - 평균) / 표준편차 로 변환 (Z-점수).
- 효과: 표준화된 변수는 평균=0, 표준편차=1 됨. 단위 제거되어 계수 크기로 상대적 영향력 비교 가능해짐.
관계식에서 표준화하기 (Python)
statsmodels
관계식 내scale()
함수 사용 가능.# mileage와 year를 각각 표준화하여 독립변수로 사용
ols("price ~ scale(mileage) + scale(year)", data=df).fit()- 주의: 범주형 독립변수는 표준화하지 않음.
독립변수가 범주형인 경우
- 문제: 범주형 변수(예: 'Avante', 'K3')에는 기울기 직접 곱할 수 없음.
- 해결: 연속 변수(숫자) 형태로 변환하여 모형 투입 필요.
- 방법: 여러 방법 중 더미 코딩(Dummy Coding) 가장 많이 사용됨.
- 자동 처리: Jamovi, R, Python(
statsmodels
,scikit-learn
등)은 대부분 자동 더미 코딩 지원.
더미 코딩 (Dummy Coding)
- 원리: 범주가 개인 변수를 **개의 더미 변수(dummy variable)**로 변환.
- 기준 범주 (Reference Category): 범주 중 하나를 기준으로 지정 (보통 첫번째 범주. 변경 가능).
- 더미 변수 생성: 기준 제외한 나머지 각 범주별로 더미 변수 1개씩 생성.
- 더미 변수 값: 해당 범주면 1, 아니면 0.
- 기울기 해석: 더미 변수의 회귀계수 = 해당 범주의 종속변수 평균값 - 기준 범주의 종속변수 평균값 차이.
범주가 2개인 경우 (예: model - Avante, K3)
- ABC 순
Avante
기준 설정됨. K3
에 대한 더미 변수 1개(model[T.K3]
) 생성.Avante
면model[T.K3] = 0
K3
면model[T.K3] = 1
- Python 결과 (
ols('price ~ model', df).fit().summary()
):Intercept
: 기준(Avante
)의 평균price
(예: 833).model[T.K3]
:K3
의 평균price
-Avante
의 평균price
차이 (예: 80).- K3 예상 가격: Intercept + model[T.K3] 계수 = 833 + 80 = 913.
더미 변수 이름 확인
statsmodels
결과표 이름:원본변수명[T.범주명]
형식.- 범주 목록 확인:
df.model.unique()
범주가 3개인 경우 (예: TRT - A, B, C)
- ABC 순
A
기준 설정됨. B
,C
대한 더미 변수 2개(TRT[T.B]
,TRT[T.C]
) 생성.
TRT | TRT[T.B] | TRT[T.C] |
---|---|---|
A | 0 | 0 |
B | 1 | 0 |
C | 0 | 1 |
- Python 결과 (
ols('y ~ TRT', dep).fit().summary()
):Intercept
: 기준(A
)의 평균y
(예: 62.3333).TRT[T.B]
:B
평균y
-A
평균y
차이 (예: -10.4167).TRT[T.C]
:C
평균y
-A
평균y
차이 (예: -11.0833).- B의 평균 y: Intercept + TRT[T.B] 계수 = 62.3333 - 10.4167 = 51.9166.
- C의 평균 y: Intercept + TRT[T.C] 계수 = 62.3333 - 11.0833 = 51.2500.
Python에서 기준 범주 바꾸기
C()
함수와Treatment()
사용.# model 변수의 기준 범주를 'K3'로 지정
ols('price ~ C(model, Treatment("K3"))', df).fit().summary()