Logit veya probit modelinde seçilen katsayıların eşzamanlı eşitliği nasıl test edilir?


14

Logit veya probit modelinde seçilen katsayıların eşzamanlı eşitliği nasıl test edilir? Standart yaklaşım nedir ve en son teknoloji yaklaşımı nedir?

Yanıtlar:


30

Wald testi

Standart bir yaklaşım Wald testidir . Stata komutunun test bir logit veya probit regresyonundan sonra yaptığı şey budur . Bir örneğe bakarak bunun R'de nasıl çalıştığını görelim:

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

Diyelim ki, ve β g r eβ g p a hipotezini test etmek istiyorsunuz . Bu, β g r e - β g p a = 0 testine eşdeğerdir . Wald test istatistiği:βgre=βgpaβgreβgpaβgreβgpa=0

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

veya

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

θ^βgreβgpaθ0=0βgreβgpa

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

β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

Son olarak, standart hatayı hesaplayabiliriz:

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

z

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

p

2*pnorm(-2.413564)
[1] 0.01579735

Bu durumda katsayıların birbirinden farklı olduğuna dair kanıtlarımız var. Bu yaklaşım ikiden fazla katsayıya genişletilebilir.

kullanma multcomp

Bu oldukça sıkıcı hesaplamalar rahatlıkla yapılabilir Rkullanarak multcomppaketi. İşte yukarıdaki ile aynı örnek ama ile yapılır 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)

Katsayıların farkı için bir güven aralığı da hesaplanabilir:

Quantile = 1.96
95% family-wise confidence level


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

Ek örnekleri multcompiçin buraya veya buraya bakın .


Olabilirlik oranı testi (LRT)

LLaLL0

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

Bizim durumumuzda, logLikbir lojistik regresyondan sonra iki modelin log olasılığını çıkarmak için kullanabiliriz :

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

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

İlgili kısıtlama içeren model greve gpatam modelinde (-229,26) ile karşılaştırıldığında, biraz daha yüksek log-olasılık (-232,24) sahiptir. Olabilirlik oranı test istatistiğimiz:

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

χ22p

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

p

R, yerleşik olabilirlik oran testine sahiptir; anovafonksiyonu olabilirlik oranı testini hesaplamak için kullanabiliriz:

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

Yine, katsayıları dair güçlü kanıtlar var greve gpabirbirinden önemli ölçüde farklıdır.


Puan testi (aka Rao'nun Puan testi aka Lagrange çarpan testi)

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

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

I(θ)θ

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

Puan testi de kullanılarak hesaplanabilir anova(puan testi istatistiklerine "Rao" denir):

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

Sonuç eskisi gibi.


Not


1
gregpaβ1=β2=0β1=β2β1=β2gregpaβgre=βgpa

1
@SibbsGambling İyi yakalama! Cevabımı buna göre güncelledim.
COOLSerdash

Bu yalnızca sürekli öngörücülerle mi sınırlı, yoksa kategorik bir değişkenin iki düzeyinin önemli ölçüde farklı olup olmadığını da görebilir miyim? Diyelim ki rank3 ve rank4 arasındaki fark önemli mi?
Daniel

1
@Daniel Evet, bu yaklaşım kategorik bir değişkenin seviyeleri için de kullanılabilir. multcompPaketler özellikle kolaylaştırır. Örneğin, bu deneyin: glht.mod <- glht(mylogit, linfct = c("rank3 - rank4= 0")). Ancak rank3referans seviyesini (kullanarak mydata$rank <- relevel(mydata$rank, ref="3")) yapmak ve daha sonra normal regresyon çıktısını kullanmak çok daha kolay bir yol olacaktır . Faktörün her seviyesi referans seviyesiyle karşılaştırılır. İçin p değeri rank4istenen karşılaştırma olacaktır.
COOLSerdash

1
glht0.591linfct = c("rank3 - rank4= 0")mcp(rank="Tukey")rank

9

İkili veya başka bir şeyse, değişkenlerinizi belirtmediniz. Bence ikili değişkenlerden bahsediyorsunuz. Probit ve logit modelinin çok terimli versiyonları da vardır.

Genel olarak, test yaklaşımlarının üçlüsünü kullanabilirsiniz;

Olabilirlik-oran testi

LM-Testi

Wald-Testi

Her test farklı test istatistikleri kullanır. Standart yaklaşım üç testten birini almak olacaktır. Her üçü de ortak testler yapmak için kullanılabilir.

LR testi, kısıtlanmış ve kısıtlanmamış bir modelin logaritma olasılığının farkını kullanır. Kısıtlı model, belirtilen katsayıların sıfıra ayarlandığı modeldir. Kısıtlanmamış olan "normal" modeldir. Wald testinin avantajı vardır, sadece sınırsız model tahmin edilir. Temel olarak, kısıtlamanın MLE'de değerlendirilip değerlendirilmediğini kısıtlamanın neredeyse karşılanıp karşılanmadığını sorar. Lagrange-Çarpan testi durumunda, sadece kısıtlı model tahmin edilmelidir. Kısıtlı ML tahmincisi, kısıtlanmamış modelin puanını hesaplamak için kullanılır. Bu puan genellikle sıfır olmayacaktır, bu nedenle bu tutarsızlık LR testinin temelini oluşturur. Bağlamınızdaki LM-Testi aynı zamanda hetero-esnekliği test etmek için de kullanılabilir.


7

Standart yaklaşımlar Wald testi, olabilirlik oranı testi ve skor testidir. Asimptotik olarak aynı olmalıdırlar. Deneyimlerime göre, olasılık oranı testleri sonlu örneklerin simülasyonlarında biraz daha iyi performans gösterme eğilimindedir, ancak bu konuların çok zorlu (küçük örnek) senaryolarda olacağı durumlarda tüm bu testleri sadece kaba bir yaklaşım olarak alacağım. Bununla birlikte, modelinize (ortak değişkenlerin sayısı, etkileşim etkilerinin varlığı) ve verilerinize (çoklu doğrusallık, bağımlı değişkeninizin marjinal dağılımı) bağlı olarak, "Asimptotinin harika krallığı" şaşırtıcı derecede az sayıda gözlemle iyi bir şekilde tahmin edilebilir.

Aşağıda, Stata'da sadece 150 gözlemden oluşan bir örnekte Wald, olasılık oranı ve skor testi kullanan böyle bir simülasyon örneği verilmiştir. Böyle küçük bir örnekte bile, üç test oldukça benzer p-değerleri üretir ve sıfır hipotezi doğru olduğunda p-değerlerinin örnekleme dağılımı, olması gerektiği gibi (veya en azından düzgün dağılımdan sapmalar) eşit bir dağılım izler gibi görünmektedir. Monte Carlo deneyinde rastlantısal kalıtım nedeniyle beklenenden daha büyük değildir).

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

resim açıklamasını buraya girin


2
skor testi @ jen-bohold'un Lagrange çarpanı (LM) testi olarak adlandırdığı şey için farklı bir isimdir.
Maarten Buis

Güzel cevap (+1). Özellikle simülasyonun çabalarını seviyorum. Stata'da skor testini nasıl hesaplayacağımı bilmiyordum. Teşekkürler.
COOLSerdash
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.