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