Yanıtlar:
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:
veya
vcov
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
wald.z <- (gre-gpa)/se
wald.z
[1] -2.413564
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 R
kullanarak multcomp
paketi. İş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 multcomp
için buraya veya buraya bakın .
mylogit2 <- glm(admit ~ I(gre + gpa) + rank, data = mydata, family = "binomial")
Bizim durumumuzda, logLik
bir 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 gre
ve gpa
tam 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
1-pchisq(D, df=1)
[1] 0.01458625
R, yerleşik olabilirlik oran testine sahiptir; anova
fonksiyonu 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 gre
ve gpa
birbirinden önemli ölçüde farklıdır.
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
multcomp
Paketler özellikle kolaylaştırır. Örneğin, bu deneyin: glht.mod <- glht(mylogit, linfct = c("rank3 - rank4= 0"))
. Ancak rank3
referans 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 rank4
istenen karşılaştırma olacaktır.
İ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.
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))
gre
gpa
gre
gpa