Como realizar um teste de razão de verossimilhança em python
Um teste de razão de verossimilhança compara a qualidade do ajuste de dois modelos de regressão aninhados.
Um modelo aninhado é simplesmente um modelo que contém um subconjunto de variáveis preditoras no modelo de regressão geral.
Por exemplo, suponha que temos o seguinte modelo de regressão com quatro variáveis preditoras:
Y = β 0 + β 1 x 1 + β 2 x 2 + β 3 x 3 + β 4 x 4 + ε
Um exemplo de modelo aninhado seria o seguinte modelo com apenas duas das variáveis preditoras originais:
Y = β 0 + β 1 x 1 + β 2 x 2 + ε
Para determinar se esses dois modelos são significativamente diferentes, podemos realizar um teste de razão de verossimilhança que utiliza as seguintes hipóteses nulas e alternativas:
H 0 : O modelo completo e o modelo aninhado ajustam-se igualmente bem aos dados. Então, você deve usar modelo aninhado .
HA : O modelo completo ajusta os dados significativamente melhor do que o modelo aninhado. Então você tem que usar o modelo completo .
Se o valor p do teste estiver abaixo de um certo nível de significância (por exemplo, 0,05), então podemos rejeitar a hipótese nula e concluir que o modelo completo proporciona um ajuste significativamente melhor.
O exemplo passo a passo a seguir mostra como realizar um teste de razão de verossimilhança em Python.
Etapa 1: carregar dados
Neste exemplo, mostraremos como ajustar os dois modelos de regressão a seguir em Python usando dados do conjunto de dados mtcars :
Modelo completo: mpg = β 0 + β 1 disponível + β 2 carb + β 3 hp + β 4 cil
Modelo: mpg = β 0 + β 1 disponível + β 2 carb
Primeiro, carregaremos o conjunto de dados:
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)
Relacionado: Como ler arquivos CSV com Pandas
Passo 2: Ajustar os modelos de regressão
Primeiro, ajustaremos o modelo completo e calcularemos a probabilidade logarítmica do modelo:
#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
A seguir, ajustaremos o modelo reduzido e calcularemos a probabilidade logarítmica do modelo:
#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
Etapa 3: realizar o teste de log de probabilidade
A seguir, usaremos o seguinte código para realizar o teste de plausibilidade:
#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
A partir do resultado, podemos ver que a estatística do teste qui-quadrado é 2,0902 e o valor p correspondente é 0,3517 .
Como esse valor p não é inferior a 0,05, não conseguiremos rejeitar a hipótese nula.
Isso significa que o modelo completo e o modelo aninhado ajustam-se igualmente bem aos dados. Devemos, portanto, usar o modelo aninhado, porque as variáveis preditoras adicionais no modelo completo não proporcionam uma melhoria significativa no ajuste.
Então, nosso modelo final seria:
mpg = β 0 + β 1 disponível + β 2 carboidratos
Nota : Usamos 2 graus de liberdade ao calcular o valor p porque isso representa a diferença no total de variáveis preditoras usadas entre os dois modelos.
Recursos adicionais
Os tutoriais a seguir fornecem informações adicionais sobre o uso de modelos de regressão em Python:
Um guia completo para regressão linear em Python
Como realizar regressão polinomial em Python
Como realizar regressão logística em Python