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

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *