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에서 로지스틱 회귀를 수행하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다