Come eseguire un test del rapporto di verosimiglianza in python


Un test del rapporto di verosimiglianza confronta la bontà dell’adattamento di due modelli di regressione nidificati.

Un modello nidificato è semplicemente un modello che contiene un sottoinsieme di variabili predittive nel modello di regressione complessivo.

Ad esempio, supponiamo di avere il seguente modello di regressione con quattro variabili predittive:

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

Un esempio di modello nidificato sarebbe il seguente modello con solo due delle variabili predittive originali:

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

Per determinare se questi due modelli sono significativamente diversi, possiamo eseguire un test del rapporto di verosimiglianza che utilizza le seguenti ipotesi nulle e alternative:

H 0 : il modello completo e il modello nidificato si adattano ugualmente bene ai dati. Quindi, dovresti usare il modello nidificato .

H R : Il modello completo si adatta ai dati in modo decisamente migliore rispetto al modello nidificato. Quindi devi utilizzare il modello completo .

Se il valore p del test è inferiore a un certo livello di significatività (ad esempio 0,05), allora possiamo rifiutare l’ipotesi nulla e concludere che il modello completo fornisce un adattamento significativamente migliore.

Il seguente esempio passo passo mostra come eseguire un test del rapporto di verosimiglianza in Python.

Passaggio 1: caricare i dati

In questo esempio, mostreremo come adattare i seguenti due modelli di regressione in Python utilizzando i dati del set di dati mtcars :

Modello completo: mpg = β 0 + β 1 disponibile + β 2 carboidrati + β 3 cv + β 4 cil

Modello: mpg = β 0 + β 1 disponibile + β 2 carb

Innanzitutto, caricheremo il set di dati:

 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)

Correlato: Come leggere file CSV con Panda

Passaggio 2: adattare i modelli di regressione

Innanzitutto, adatteremo il modello completo e calcoleremo la log-verosimiglianza del modello:

 #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

Successivamente, adatteremo il modello ridotto e calcoleremo la log-verosimiglianza del modello:

 #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

Passaggio 3: eseguire il test di verosimiglianza

Successivamente, utilizzeremo il seguente codice per eseguire il test di plausibilità:

 #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

Dal risultato, possiamo vedere che la statistica del test chi quadrato è 2,0902 e il corrispondente valore p è 0,3517 .

Poiché questo valore p non è inferiore a 0,05, non riusciremo a rifiutare l’ipotesi nulla.

Ciò significa che il modello completo e il modello nidificato si adattano ugualmente bene ai dati. Dobbiamo quindi utilizzare il modello nidificato, poiché le variabili predittive aggiuntive nel modello completo non forniscono un miglioramento significativo dell’adattamento.

Quindi, il nostro modello finale sarebbe:

mpg = β 0 + β 1 disponibile + β 2 carboidrati

Nota : abbiamo utilizzato 2 gradi di libertà nel calcolo del valore p perché questo rappresentava la differenza nelle variabili predittive totali utilizzate tra i due modelli.

Risorse addizionali

I seguenti tutorial forniscono informazioni aggiuntive sull’utilizzo dei modelli di regressione in Python:

Una guida completa alla regressione lineare in Python
Come eseguire la regressione polinomiale in Python
Come eseguire la regressione logistica in Python

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *