Як виконати тест співвідношення правдоподібності в python


Перевірка співвідношення правдоподібності порівнює відповідність двох вкладених регресійних моделей .

Вкладена модель — це просто модель, яка містить підмножину змінних предикторів у загальній моделі регресії.

Наприклад, припустімо, що ми маємо таку модель регресії з чотирма змінними предикторів:

Y = β 0 + β 1 x 1 + β 2 x 2 + β 3 x 3 + β 4 x 4 + ε

Прикладом вкладеної моделі може бути наступна модель лише з двома початковими змінними предиктора:

Y = β 0 + β 1 x 1 + β 2 x 2 + ε

Щоб визначити, чи суттєво відрізняються ці дві моделі, ми можемо виконати перевірку співвідношення правдоподібності, яка використовує такі нульові та альтернативні гіпотези:

H 0 : повна модель і вкладена модель однаково добре відповідають даним. Отже, вам слід використовувати вкладену модель .

H A : повна модель відповідає даним значно краще, ніж вкладена модель. Отже, ви повинні використовувати повний шаблон .

Якщо p-значення тесту нижче певного рівня значущості (наприклад, 0,05), тоді ми можемо відхилити нульову гіпотезу та зробити висновок, що повна модель забезпечує значно кращу відповідність.

Наступний покроковий приклад показує, як виконати тест співвідношення ймовірності в Python.

Крок 1. Завантажте дані

У цьому прикладі ми покажемо, як підібрати наступні дві моделі регресії в Python, використовуючи дані з набору даних mtcars :

Повна модель: mpg = β 0 + β 1 доступний + β 2 вуглеводів + β 3 к.с. + β 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/Statology/Python-Guides/main/mtcars.csv"

#read in data
data = pd. read_csv (url)

Пов’язане: Як читати файли CSV за допомогою Pandas

Крок 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 вуглеводів

Примітка . Ми використали 2 ступені свободи під час розрахунку значення p, оскільки воно представляє різницю в загальних змінних предикторів, які використовуються між двома моделями.

Додаткові ресурси

У наступних посібниках надається додаткова інформація про використання регресійних моделей у Python:

Повний посібник із лінійної регресії в Python
Як виконати поліноміальну регресію в Python
Як виконати логістичну регресію в Python

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *