Bagaimana cara menguji persamaan simultan dari koefisien yang dipilih dalam model logit atau probit?


14

Bagaimana cara menguji persamaan simultan dari koefisien yang dipilih dalam model logit atau probit? Apa pendekatan standar dan apa pendekatan canggih?

Jawaban:


30

Tes Wald

Salah satu pendekatan standar adalah tes Wald . Inilah yang dilakukan perintah Stata test setelah regresi logit atau probit. Mari kita lihat bagaimana ini bekerja di R dengan melihat contoh:

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

Katakanlah, Anda ingin menguji hipotesis vs β g r eβ g p a . Ini setara dengan pengujian β g rβgre=βgpaβgreβgpa . Statistik uji Wald adalah:βgreβgpa=0

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

atau

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

Kami θ sini adalah β g r e - β g p a dan θ 0 = 0θ^βgre-βghalSebuahθ0=0 . Jadi yang kita butuhkan adalah kesalahan standar . Kita dapat menghitung kesalahan standar dengan metode Delta :βgre-βghalSebuah

se^(βgre-βghalSebuah)Var(βgre)+Var(βghalSebuah)-2Cov(βgre,βghalSebuah)

Jadi kita juga membutuhkan kovarians dan β g p a . Matriks varians-kovarians dapat diekstraksi dengan perintah setelah menjalankan regresi logistik:βgreβghalSebuahvcov

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

Akhirnya, kita dapat menghitung kesalahan standar:

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

Jadi nilai Wald Anda adalahz

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

Untuk mendapatkan nilai- , cukup gunakan distribusi normal standar:hal

2*pnorm(-2.413564)
[1] 0.01579735

Dalam hal ini kami memiliki bukti bahwa koefisien berbeda satu sama lain. Pendekatan ini dapat diperluas hingga lebih dari dua koefisien.

Menggunakan multcomp

Perhitungan yang agak membosankan ini bisa dilakukan dengan mudah R menggunakan multcomppaket. Berikut adalah contoh yang sama seperti di atas tetapi dilakukan dengan 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)

Interval kepercayaan untuk perbedaan koefisien juga dapat dihitung:

Quantile = 1.96
95% family-wise confidence level


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

Untuk contoh tambahan multcomp , lihat di sini atau di sini .


Tes rasio kemungkinan (LRT)

Koefisien regresi logistik ditemukan dengan kemungkinan maksimum. Tetapi karena fungsi kemungkinan melibatkan banyak produk, kemungkinan log dimaksimalkan yang mengubah produk menjadi jumlah. Model yang lebih cocok memiliki kemungkinan log yang lebih tinggi. Model yang melibatkan lebih banyak variabel setidaknya memiliki kemungkinan yang sama dengan model nol. Nyatakan log-likelihood dari model alternatif (model yang mengandung lebih banyak variabel) dengan dan log-likelihood dari model nol dengan L L 0LLaLL0 , statistik uji rasio kemungkinan adalah:

D=2(LLaLL0)χdf1df22

χ2

β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")

In our case, we can use logLik to extract the log-likelihood of the two models after a logistic regression:

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

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

The model containing the constraint on gre and gpa has a slightly higher log-likelihood (-232.24) compared to the full model (-229.26). Our likelihood ratio test statistic is:

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

We can now use the CDF of the χ22 to calculate the p-value:

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

The p-value is very small indicating that the coefficients are different.

R has the likelihood ratio test built in; we can use the anova function to calculate the likelhood ratio test:

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

Again, we have strong evidence that the coefficients of gre and gpa are significantly different from each other.


Score test (aka Rao's Score test aka Lagrange multiplier test)

The Score function U(θ) is the derivative of the log-likelihood function (logL(θ|x)) where θ are the parameters and x the data (the univariate case is shown here for illustration purposes):

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

This is basically the slope of the log-likelihood function. Further, let I(θ) be the Fisher information matrix which is the negative expectation of the second derivative of the log-likelihood function with respect to θ. The score test statistics is:

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

The score test can also be calculated using anova (the score test statistics is called "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

The conclusion is the same as before.


Note

An interesting relationship between the different test statistics when the model is linear is (Johnston and DiNardo (1997): Econometric Methods): Wald LR Score.


1
I wonder why the reduced model simply excludes gre and gpa? Isn't that testing β1=β2=0, not β1=β2? To me, to correctly test β1=β2, we need to keep gre and gpa and meanwhile impose βgre=βgpa.
Sibbs Gambling

1
@SibbsGambling Good catch! I updated my answer accordingly.
COOLSerdash

Is this limited to continuous predictors only, or could I - for instance - also see whether two levels of a categorical variable are significantly different? Let's say, is the difference between rank3 and rank4 significant?
Daniel

1
@ Daniel Ya, pendekatan ini juga dapat digunakan untuk level variabel kategori. multcompPaket - paket membuatnya sangat mudah. Sebagai contoh, coba ini: glht.mod <- glht(mylogit, linfct = c("rank3 - rank4= 0")). Tetapi cara yang jauh lebih mudah adalah dengan membuat rank3tingkat referensi (menggunakan mydata$rank <- relevel(mydata$rank, ref="3")) dan kemudian hanya menggunakan output regresi normal. Setiap level faktor dibandingkan dengan level referensi. Nilai p untuk rank4perbandingan yang diinginkan.
COOLSerdash

1
@Aniel P-nilai dari output model (tingkat referensi berubah) dan glhtsama untuk saya (sekitar0,591). Mengenai pertanyaan kedua Anda: linfct = c("rank3 - rank4= 0")hanya menguji satu hipotesis linier sedangkan mcp(rank="Tukey")menguji semua 6 perbandingan berpasangan rank. Jadi nilai-p harus disesuaikan untuk beberapa perbandingan. Ini berarti bahwa nilai-p yang menggunakan uji Tukey umumnya lebih tinggi daripada perbandingan tunggal.
COOLSerdash

9

Anda tidak menentukan variabel Anda, apakah itu biner atau lainnya. Saya pikir Anda berbicara tentang variabel biner. Ada juga versi multinomial dari model probit dan logit.

Secara umum, Anda dapat menggunakan trinitas lengkap dari pendekatan pengujian, yaitu

Uji kemungkinan-Rasio

LM-Test

Wald-Test

Setiap tes menggunakan statistik uji yang berbeda. Pendekatan standar akan mengambil salah satu dari tiga tes. Ketiganya bisa digunakan untuk melakukan tes bersama.

Tes LR menggunakan perbedaan log-kemungkinan model terbatas dan tidak terbatas. Jadi model terbatas adalah model, di mana koefisien yang ditentukan diatur ke nol. Unrestricted adalah model "normal". Tes Wald memiliki keunggulan, yaitu hanya model yang tidak dibatasi yang diperkirakan. Pada dasarnya ia bertanya, apakah batasannya hampir puas jika dievaluasi pada MLE yang tidak dibatasi. Dalam hal tes Lagrange-Pengganda hanya model terbatas yang harus diestimasi. Estimator ML terbatas digunakan untuk menghitung skor dari model yang tidak dibatasi. Skor ini biasanya tidak nol, jadi perbedaan ini adalah dasar dari tes LR. LM-Test dapat dalam konteks Anda juga digunakan untuk menguji heteroskedastisitas.


7

Pendekatan standar adalah tes Wald, tes rasio kemungkinan dan tes skor. Asymptotically mereka harus sama. Dalam pengalaman saya, tes rasio kemungkinan cenderung melakukan sedikit lebih baik dalam simulasi pada sampel terbatas, tetapi kasus-kasus di mana hal ini akan menjadi sangat ekstrim (sampel kecil) skenario di mana saya akan mengambil semua tes ini sebagai perkiraan kasar saja. Namun, tergantung pada model Anda (jumlah kovariat, kehadiran efek interaksi) dan data Anda (multikolinearitas, distribusi marginal dari variabel dependen Anda), "kerajaan indah Asymptotia" dapat diperkirakan dengan baik oleh sejumlah pengamatan yang mengejutkan.

Di bawah ini adalah contoh dari simulasi di Stata menggunakan Wald, rasio kemungkinan dan tes skor dalam sampel hanya 150 pengamatan. Bahkan dalam sampel kecil seperti itu, tiga tes menghasilkan nilai-p yang cukup mirip dan distribusi sampel nilai-p ketika hipotesis nol benar tampaknya mengikuti distribusi seragam sebagaimana mestinya (atau setidaknya penyimpangan dari distribusi seragam tidak lebih besar dari yang diharapkan karena keacakan asal-usul dalam percobaan 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))

masukkan deskripsi gambar di sini


2
skor tes adalah nama yang berbeda untuk apa yang @jen-bohold disebut sebagai uji pengali Lagrange (LM).
Maarten Buis

Jawaban yang bagus (+1). Saya terutama menyukai upaya simulasi. Saya tidak tahu bagaimana cara menghitung skor tes di Stata. Terima kasih.
COOLSerdash
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.