Тест отношения правдоподобия сравнивает качество соответствия двух вложенных регрессионных моделей .
Вложенная модель — это просто модель, которая содержит подмножество переменных-предикторов в общей регрессионной модели.
Например, предположим, что у нас есть следующая регрессионная модель с четырьмя переменными-предикторами:
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