Come testare l'uguaglianza simultanea dei coefficienti scelti nel modello logit o probit?


14

Come testare l'uguaglianza simultanea dei coefficienti scelti nel modello logit o probit? Qual è l'approccio standard e qual è l'approccio allo stato dell'arte?

Risposte:


30

Test Wald

Un approccio standard è il test Wald . Questo è ciò che fa il comando Stata test dopo un logit o una regressione probit. Vediamo come funziona in R guardando un esempio:

mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv") # Load dataset from the web
mydata$rank <- factor(mydata$rank)
mylogit <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial") # calculate the logistic regression

summary(mylogit)

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -3.989979   1.139951  -3.500 0.000465 ***
gre          0.002264   0.001094   2.070 0.038465 *  
gpa          0.804038   0.331819   2.423 0.015388 *  
rank2       -0.675443   0.316490  -2.134 0.032829 *  
rank3       -1.340204   0.345306  -3.881 0.000104 ***
rank4       -1.551464   0.417832  -3.713 0.000205 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Supponiamo che tu voglia testare l'ipotesi vs. . Ciò equivale a testare . La statistica del test Wald è: β g r eβ g p a β g r e - β g p a = 0βgre=βgpaβgreβgpaβgreβgpa=0

W=(β^β0)se^(β^)N(0,1)

o

W2=(θ^θ0)2Var(θ^)χ12

Il nostro qui è e . Quindi tutto ciò di cui abbiamo bisogno è l'errore standard di . Possiamo calcolare l'errore standard con il metodo Delta : βgre-βgpunθ0=0βgre-βgpunθ^βgreβgpaθ0=0βgreβgpa

se^(βgreβgpa)Var(βgre)+Var(βgpa)2Cov(βgre,βgpa)

Quindi abbiamo anche bisogno della covarianza di e . La matrice varianza-covarianza può essere estratta con il comando dopo aver eseguito la regressione logistica: β g p aβgreβgpavcov

var.mat <- vcov(mylogit)[c("gre", "gpa"),c("gre", "gpa")]

colnames(var.mat) <- rownames(var.mat) <- c("gre", "gpa")

              gre           gpa
gre  1.196831e-06 -0.0001241775
gpa -1.241775e-04  0.1101040465

Infine, possiamo calcolare l'errore standard:

se <- sqrt(1.196831e-06 + 0.1101040465 -2*-0.0001241775)
se
[1] 0.3321951

Così il vostro Wald -valore èz

wald.z <- (gre-gpa)/se
wald.z
[1] -2.413564

Per ottenere un valore , basta usare la distribuzione normale standard:p

2*pnorm(-2.413564)
[1] 0.01579735

In questo caso abbiamo prove che i coefficienti sono diversi l'uno dall'altro. Questo approccio può essere esteso a più di due coefficienti.

utilizzando multcomp

Questi calcoli piuttosto noiosi possono essere comodamente eseguiti Rutilizzando il multcomppacchetto. Ecco lo stesso esempio di cui sopra ma fatto con multcomp:

library(multcomp)

glht.mod <- glht(mylogit, linfct = c("gre - gpa = 0"))

summary(glht.mod)    

Linear Hypotheses:
               Estimate Std. Error z value Pr(>|z|)  
gre - gpa == 0  -0.8018     0.3322  -2.414   0.0158 *

confint(glht.mod)

È inoltre possibile calcolare un intervallo di confidenza per la differenza dei coefficienti:

Quantile = 1.96
95% family-wise confidence level


Linear Hypotheses:
               Estimate lwr     upr    
gre - gpa == 0 -0.8018  -1.4529 -0.1507

Per ulteriori esempi di multcomp, vedere qui o qui .


Test del rapporto di verosimiglianza (LRT)

I coefficienti di una regressione logistica si trovano con la massima probabilità. Ma poiché la funzione di verosimiglianza coinvolge molti prodotti, viene massimizzata la verosimiglianza che trasforma i prodotti in somme. Il modello che si adatta meglio ha una maggiore probabilità di log. Il modello che coinvolge più variabili ha almeno la stessa probabilità del modello nullo. Indica la probabilità logaritmica del modello alternativo (modello contenente più variabili) con e la verosimiglianza logaritmica del modello null con , la statistica del test del rapporto verosimile è: L L 0LLun'LL0

D=2(LLun'-LL0)~χdf1-df22

La statistica del test del rapporto di verosimiglianza segue una distribuzione con i gradi di libertà che sono la differenza nel numero di variabili. Nel nostro caso, questo è 2.χ2

Per eseguire il test del rapporto di verosimiglianza, dobbiamo anche adattare il modello al vincolo per poter confrontare le due verosimiglianze. Il modello completo ha la forma . Il nostro modello di vincolo ha la forma: .βgre=βgpa

log(pi1pi)=β0+β1gre+β2gpa+β3rank2+β4rank3+β5rank4
log(pi1pi)=β0+β1(gre+gpa)+β2rank2+β3rank3+β4rank4
mylogit2 <- glm(admit ~ I(gre + gpa) + rank, data = mydata, family = "binomial")

Nel nostro caso, possiamo usare logLikper estrarre la verosimiglianza dei due modelli dopo una regressione logistica:

L1 <- logLik(mylogit)
L1
'log Lik.' -229.2587 (df=6)

L2 <- logLik(mylogit2)
L2
'log Lik.' -232.2416 (df=5)

Il modello contenente il vincolo è attivo gree gpapresenta una probabilità logaritmica leggermente superiore (-232,24) rispetto al modello completo (-229,26). La nostra statistica del test del rapporto di verosimiglianza è:

D <- 2*(L1 - L2)
D
[1] 16.44923

Ora possiamo usare il CDF di per calcolare il -value:χ22p

1-pchisq(D, df=1)
[1] 0.01458625

Il valore è molto piccolo e indica che i coefficienti sono diversi.p

R ha il test del rapporto di verosimiglianza incorporato; possiamo usare la anovafunzione per calcolare il test del rapporto di verosimiglianza:

anova(mylogit2, mylogit, test="LRT")

Analysis of Deviance Table

Model 1: admit ~ I(gre + gpa) + rank
Model 2: admit ~ gre + gpa + rank
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
1       395     464.48                       
2       394     458.52  1   5.9658  0.01459 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Ancora una volta, abbiamo prove evidenti che i coefficienti di gree gpasono significativamente diversi l'uno dall'altro.


Test del punteggio (aka Test del punteggio di Rao aka test del moltiplicatore di Lagrange)

La funzione Score è la derivata della funzione log-verosimiglianza ( ) dove sono i parametri e i dati (il caso univariato è mostrato qui per l'illustrazione scopi):U(θ)logL(θ|x)θx

U(θ)=logL(θ|x)θ

Questa è sostanzialmente la pendenza della funzione di verosimiglianza. Inoltre, sia la matrice di informazioni di Fisher che è l'aspettativa negativa della seconda derivata della funzione log-verosimiglianza rispetto a . Le statistiche del test del punteggio sono:I(θ)θ

S(θ0)=U(θ02)I(θ0)χ12

Il test del punteggio può anche essere calcolato utilizzando anova(le statistiche del test del punteggio si chiama "Rao"):

anova(mylogit2, mylogit,  test="Rao")

Analysis of Deviance Table

Model 1: admit ~ I(gre + gpa) + rank
Model 2: admit ~ gre + gpa + rank
  Resid. Df Resid. Dev Df Deviance    Rao Pr(>Chi)  
1       395     464.48                              
2       394     458.52  1   5.9658 5.9144  0.01502 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

La conclusione è la stessa di prima.


Nota

Una relazione interessante tra le diverse statistiche di test quando il modello è lineare è (Johnston e DiNardo (1997): Metodi econometrici ): Wald LR Score.


1
Mi chiedo perché il modello ridotto semplicemente esclude gree gpa? Questo test non è , non ? Per me, per testare correttamente , dobbiamo mantenere e nel frattempo imporre . β1=β2=0β1=β2β1=β2gregpaβgre=βgpa
Sibbs Gambling

1
@SibbsGambling Buona cattura! Ho aggiornato la mia risposta di conseguenza.
COOLSerdash,

Questo è limitato solo ai predittori continui o potrei - per esempio - anche vedere se due livelli di una variabile categoriale sono significativamente diversi? Diciamo, la differenza tra rank3 e rank4 è significativa?
Daniel

1
@Daniel Sì, questo approccio può essere utilizzato anche per i livelli di una variabile categoriale. I multcomppacchetti lo rendono particolarmente facile. Ad esempio, provare questo: glht.mod <- glht(mylogit, linfct = c("rank3 - rank4= 0")). Ma un modo molto più semplice sarebbe quello di rendere rank3il livello di riferimento (usando mydata$rank <- relevel(mydata$rank, ref="3")) e quindi usare semplicemente il normale output di regressione. Ogni livello del fattore viene confrontato con il livello di riferimento. Il valore p per rank4sarebbe il confronto desiderato.
COOLSerdash

1
@Daniel I valori p dall'output del modello (livello di riferimento modificato) e glhtsono gli stessi per me (circa ). Per quanto riguarda la seconda domanda: le prove soltanto un'ipotesi lineare, mentre i test tutti i 6 confronti a coppie delle . Quindi i valori di p devono essere adeguati per confronti multipli. Ciò significa che i valori di p usando il test di Tukey sono generalmente più alti del singolo confronto. 0,591linfct = c("rank3 - rank4= 0")mcp(rank="Tukey")rank
COOLSerdash,

9

Non hai specificato le tue variabili, se sono binarie o qualcos'altro. Penso che tu parli di variabili binarie. Esistono anche versioni multinomiali del modello probit e logit.

In generale, è possibile utilizzare la trinità completa degli approcci di test, ad es

Del rapporto di verosimiglianza-test

LM-Test

Wald-test

Ogni test utilizza statistiche di test diverse. L'approccio standard sarebbe quello di effettuare una delle tre prove. Tutti e tre possono essere utilizzati per eseguire test congiunti.

Il test LR utilizza la differenza della probabilità logaritmica di un modello limitato e senza restrizioni. Quindi il modello limitato è il modello, in cui i coefficienti specificati sono impostati su zero. Il senza restrizioni è il modello "normale". Il test Wald ha il vantaggio di stimare solo il modello non limitato. In sostanza, si chiede se la restrizione è quasi soddisfatta se viene valutata al MLE non limitato. Nel caso del test del moltiplicatore di Lagrange deve essere stimato solo il modello limitato. Lo stimatore ML con restrizioni viene utilizzato per calcolare il punteggio del modello senza restrizioni. Questo punteggio di solito non sarà zero, quindi questa discrepanza è la base del test LR. LM-Test può essere utilizzato nel tuo contesto anche per verificare l'eteroscedasticità.


7

Gli approcci standard sono il test Wald, il test del rapporto di verosimiglianza e il test del punteggio. Asintoticamente dovrebbero essere gli stessi. Nella mia esperienza, i test del rapporto di verosimiglianza tendono a dare risultati leggermente migliori nelle simulazioni su campioni finiti, ma i casi in cui ciò si verificherebbe in scenari molto estremi (piccolo campione) in cui prenderei tutti questi test solo come approssimazione approssimativa. Tuttavia, a seconda del modello (numero di covariate, presenza di effetti di interazione) e dei dati (multinearità, distribuzione marginale della variabile dipendente), il "meraviglioso regno di asintotia" può essere ben approssimato da un numero sorprendentemente piccolo di osservazioni.

Di seguito è riportato un esempio di tale simulazione in Stata usando il Wald, il rapporto di verosimiglianza e il test del punteggio in un campione di sole 150 osservazioni. Anche in un campione così piccolo, i tre test producono valori p abbastanza simili e la distribuzione campionaria dei valori p quando l'ipotesi nulla è vera sembra seguire una distribuzione uniforme come dovrebbe (o almeno le deviazioni dalla distribuzione uniforme non sono più grandi di quanto ci si aspetterebbe a causa della casualità ereditaria in un esperimento di Monte Carlo).

clear all
set more off

// data preparation
sysuse nlsw88, clear

gen byte edcat = cond(grade <  12, 1,     ///
                 cond(grade == 12, 2, 3)) ///
                 if grade < .
label define edcat 1 "less than high school" ///
                   2 "high school"           ///
                   3 "more than high school"
label value edcat edcat
label variable edcat "education in categories"

// create cascading dummies, i.e.
// edcat2 compares high school with less than high school
// edcat3 compares more than high school with high school
gen byte edcat2 = (edcat >= 2) if edcat < .
gen byte edcat3 = (edcat >= 3) if edcat < .

keep union edcat2 edcat3 race south
bsample 150 if !missing(union, edcat2, edcat3, race, south)

// constraining edcat2 = edcat3 is equivalent to adding 
// a linear effect (in the log odds) of edcat
constraint define 1 edcat2 = edcat3

// estimate the constrained model
logit union edcat2 edcat3 i.race i.south, constraint(1)

// predict the probabilities
predict pr
gen byte ysim = .
gen w = .

program define sim, rclass
    // create a dependent variable such that the null hypothesis is true
    replace ysim = runiform() < pr

    // estimate the constrained model
    logit ysim edcat2 edcat3 i.race i.south, constraint(1)
    est store constr

    // score test
    tempname b0
    matrix `b0' = e(b)
    logit ysim edcat2 edcat3 i.race i.south, from(`b0') iter(0)
    matrix chi = e(gradient)*e(V)*e(gradient)'
    return scalar p_score = chi2tail(1,chi[1,1])

    // estimate unconstrained model
    logit ysim edcat2 edcat3 i.race i.south 
    est store full

    // Wald test
    test edcat2 = edcat3
    return scalar p_Wald = r(p)

    // likelihood ratio test
    lrtest full constr
    return scalar p_lr = r(p)
end

simulate p_score=r(p_score) p_Wald=r(p_Wald) p_lr=r(p_lr), reps(2000) : sim
simpplot p*, overall reps(20000) scheme(s2color) ylab(,angle(horizontal))

inserisci qui la descrizione dell'immagine


2
il punteggio è un nome diverso per quello che @ jen-bohold ha chiamato un test del moltiplicatore di Lagrange (LM).
Maarten Buis,

Bella risposta (+1). Mi piace soprattutto lo sforzo della simulazione. Non sapevo come calcolare il test del punteggio in Stata. Grazie.
COOLSerdash,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.