Как выполнить тест отношения правдоподобия в 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 :
Полная модель: миль на галлон = β 0 + β 1 доступно + β 2 карбюратор + β 3 л.с. + β 4 цил.
Модель: миль на галлон = β 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)
Связанный: Как читать файлы 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 углеводы
Примечание . При расчете значения p мы использовали 2 степени свободы, поскольку это представляет собой разницу в общем количестве переменных-предикторов, используемых между двумя моделями.
Дополнительные ресурсы
Следующие руководства предоставляют дополнительную информацию об использовании регрессионных моделей в Python:
Полное руководство по линейной регрессии в Python
Как выполнить полиномиальную регрессию в Python
Как выполнить логистическую регрессию в Python