Как выполнить тест отношения правдоподобия в Python


Тест отношения правдоподобия сравнивает качество соответствия двух вложенных регрессионных моделей .

Вложенная модель — это просто модель, которая содержит подмножество переменных-предикторов в общей регрессионной модели.

Например, предположим, что у нас есть следующая регрессионная модель с четырьмя переменными-предикторами:

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

Одним из примеров вложенной модели может быть следующая модель только с двумя исходными предикторными переменными:

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

Чтобы определить, существенно ли различаются эти две модели, мы можем выполнить тест отношения правдоподобия, в котором используются следующие нулевая и альтернативная гипотезы:

H 0 : Полная модель и вложенная модель одинаково хорошо соответствуют данным. Таким образом, вы должны использовать вложенную модель .

H A : Полная модель соответствует данным значительно лучше, чем вложенная модель. Таким образом, вы должны использовать полную модель .

Если p-значение теста ниже определенного уровня значимости (например, 0,05), то мы можем отклонить нулевую гипотезу и сделать вывод, что полная модель предлагает значительно лучшее соответствие.

В следующем пошаговом примере показано, как выполнить тест отношения правдоподобия в Python.

Шаг 1: Загрузите данные

В этом примере мы покажем, как подобрать следующие две модели регрессии в Python, используя данные из набора данных mtcars :

Полная модель: миль на галлон = β 0 + β 1 расход + β 2 карбюратор + β 3 л.с. + β 4 цилиндра

Уменьшенная модель: mpg = β 0 + β 1 disp + β 2 carb

Сначала мы загрузим набор данных:

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, мы не сможем отвергнуть нулевую гипотезу.

Это означает, что полная модель и вложенная модель одинаково хорошо соответствуют данным. Таким образом, мы должны использовать вложенную модель, потому что дополнительные переменные-предикторы в полной модели не обеспечивают значительного улучшения соответствия.

Таким образом, наша окончательная модель будет:

миль на галлон = β 0 + β 1 расход + β 2 углеводов

Примечание.Мы использовали 2 степени свободы при расчете p-значения, потому что это представляло разницу между общими предикторными переменными, используемыми между двумя моделями.

Дополнительные ресурсы

Следующие руководства содержат дополнительную информацию о том, как использовать модели регрессии в Python:

Полное руководство по линейной регрессии в Python
Как выполнить полиномиальную регрессию в Python
Как выполнить логистическую регрессию в Python