Python에서 우도비 테스트를 수행하는 방법
우도비 테스트는 두 개의 중첩 회귀 모델 의 적합도를 비교합니다.
중첩 모델은 단순히 전체 회귀 모델에서 예측 변수의 하위 집합을 포함하는 모델입니다.
예를 들어, 4개의 예측 변수가 있는 다음과 같은 회귀 모델이 있다고 가정합니다.
Y = β 0 + β 1 x 1 + β 2 x 2 + β 3 x 3 + β 4 x 4 + ε
중첩 모델의 예는 원래 예측 변수가 2개만 있는 다음 모델입니다.
Y = β 0 + β 1 x 1 + β 2 x 2 + ε
이 두 모델이 크게 다른지 확인하기 위해 다음과 같은 귀무 가설과 대립 가설을 사용하는 우도 비율 테스트를 수행할 수 있습니다.
H 0 : 전체 모델과 중첩 모델이 데이터를 동일하게 잘 적합합니다. 따라서 중첩 모델을 사용해야 합니다.
H A : 전체 모델이 중첩 모델보다 데이터에 훨씬 더 잘 맞습니다. 따라서 전체 템플릿을 사용해야 합니다.
테스트의 p-값이 특정 유의 수준(예: 0.05)보다 낮으면 귀무 가설을 기각하고 전체 모델이 훨씬 더 나은 적합성을 제공한다는 결론을 내릴 수 있습니다.
다음 단계별 예제에서는 Python에서 우도 비율 테스트를 수행하는 방법을 보여줍니다.
1단계: 데이터 로드
이 예에서는 mtcars 데이터 세트의 데이터를 사용하여 Python에서 다음 두 가지 회귀 모델을 맞추는 방법을 보여줍니다.
전체 모델: mpg = β 0 + β 1 사용 가능 + β 2 탄수화물 + β 3 hp + β 4 실린더
모델: mpg = β 0 + β 1 사용 가능 + β 2 탄수화물
먼저 데이터 세트를 로드합니다.
from sklearn. linear_model import LinearRegression import statsmodels. api as sm import pandas as pd import scipy #define URL where dataset is located url = "https://raw.githubusercontent.com/Statorials/Python-Guides/main/mtcars.csv" #read in data data = pd. read_csv (url)
관련 항목: Pandas로 CSV 파일을 읽는 방법
2단계: 회귀 모델 적합
먼저 전체 모델을 피팅하고 모델의 로그 우도를 계산합니다.
#define response variable y1 = data['mpg'] #define predictor variables x1 = data[['disp', 'carb', 'hp', 'cyl']] #add constant to predictor variables x1 = sm. add_constant (x1) #fit regression model full_model = sm. OLS (y1,x1). fit () #calculate log-likelihood of model full_ll = full_model. llf print (full_ll) -77.55789711787898
다음으로 축소 모델을 피팅하고 모델의 로그 우도를 계산합니다.
#define response variable y2 = data['mpg'] #define predictor variables x2 = data[['disp', 'carb']] #add constant to predictor variables x2 = sm. add_constant (x2) #fit regression model reduced_model = sm. OLS (y2, x2). fit () #calculate log-likelihood of model reduced_ll = reduced_model. llf print (reduced_ll) -78.60301334355185
3단계: 로그 우도 검정 수행
다음으로 타당성 테스트를 수행하기 위해 다음 코드를 사용하겠습니다.
#calculate likelihood ratio Chi-Squared test statistic
LR_statistic = -2 * (reduced_ll-full_ll)
print (LR_statistic)
2.0902324513457415
#calculate p-value of test statistic using 2 degrees of freedom
p_val = scipy. stats . chi2 . sf (LR_statistic, 2)
print (p_val)
0.35165094613502257
결과에서 카이제곱 검정 통계량은 2.0902 이고 해당 p-값은 0.3517 임을 알 수 있습니다.
이 p-값은 0.05 이상이므로 귀무가설을 기각할 수 없습니다.
이는 전체 모델과 중첩 모델이 데이터에 동일하게 잘 적합하다는 것을 의미합니다. 따라서 전체 모델의 추가 예측 변수가 적합도를 크게 향상시키지 못하므로 중첩 모델을 사용해야 합니다.
따라서 최종 모델은 다음과 같습니다.
mpg = β 0 + β 1 사용 가능 + β 2 탄수화물
참고 : p-값을 계산할 때 2 자유도를 사용했습니다. 이는 두 모델 간에 사용된 전체 예측 변수의 차이를 나타내기 때문입니다.
추가 리소스
다음 자습서에서는 Python에서 회귀 모델을 사용하는 방법에 대한 추가 정보를 제공합니다.
Python의 선형 회귀에 대한 완전한 가이드
Python에서 다항식 회귀를 수행하는 방법
Python에서 로지스틱 회귀를 수행하는 방법