Basit chi kare testi yerine glm () kullanımı


15

glm()R'de kullanılan sıfır hipotezlerini değiştirmekle ilgileniyorum.

Örneğin:

x = rbinom(100, 1, .7)  
summary(glm(x ~ 1, family = "binomial"))

olduğu hipotezini test eder . Boş değeri p = içinde rasgele bir değere değiştirmek istersem ne olur ? p=0.5pglm()

Ben bu konuda da yapılabilir biliyorum prop.test()ve chisq.test()ama kullanma fikrini keşfetmek istediğiniz glm()kategorik verilerle ilgili tüm hipotezleri test etmek.


7
+1. açıkça bir olasılık olarak ifade edilen Binom parametresini ifade eder . Doğal bağlantı (ve varsayılan olarak kullanılan bağlantı ) logit olduğundan, karışıklığı önlemek için p'yi log olasılık günlüğü ( p / ( 1 - p ) ) olan logit'ten ayırmak önemlidir . pglmplog(p/(1p))
whuber

Yanıtlar:


19

Bir kullanabilir ofset : glmile family="binomial"log-oran veya logit ölçekte tahmin parametreleri, yani , 0 ya da 0.5 kadar bir olasılık-oran giriş karşılık gelir. P olasılığıyla karşılaştırmak isterseniz, taban çizgisi değerinin q = logit ( p ) = log ( p / ( 1 - p ) ) olmasını istiyorsunuz . İstatistiksel model şimdiβ0=0pq=logit(p)=log(p/(1p))

YBinom(μ)μ=1/(1+exp(η))η=β0+q

standart kurulumdan yalnızca son satır değişti. R kodunda:

  • kullanmak offset(q)formül
  • logit / log-odds işlevi qlogis(p)
  • biraz can sıkıcı bir şekilde, yanıt değişkenindeki her öğe için bir ofset değeri sağlamanız gerekir - R sizin için sabit bir değeri otomatik olarak çoğaltmaz. Bu, aşağıda bir veri çerçevesi ayarlanarak yapılır, ancak kullanabilirsiniz rep(q,100).
x = rbinom(100, 1, .7)
dd <- data.frame(x, q = qlogis(0.7)) 
summary(glm(x ~ 1 + offset(q), data=dd, family = "binomial"))

2
(+1) bu size Wald testi verecektir. Bir lrt boş modelin yerleştirilmesi yapılabilir glm(y ~ offset(q)-1, family=binomial, data=dd)kullanarak lrtestgelen lmtestpaket. Pearson ki-kare testi GLM modeli için skor testidir. Wald / LRT / Skorun tümü tutarlı testlerdir ve oldukça büyük örnek boyutlarında eşdeğer çıkarım sağlamalıdır.
AdamO

1
Bence bir anova()RR testi almak için glm üzerindeki R tabanından da kullanabilirsiniz
Ben Bolker

İlginç, ANOVA kullanma alışkanlığını kaybettim. Bununla birlikte, anova'nın test için değeri yazmayı reddettiğini gözlemliyorum lrtest.
AdamO

2
belki anova(.,test="Chisq")?
Ben Bolker

6

GLM'nizin parametreleri için güven aralığına bakın:

> set.seed(1)
> x = rbinom(100, 1, .7)
> model<-glm(x ~ 1, family = "binomial")
> confint(model)
Waiting for profiling to be done...
    2.5 %    97.5 % 
0.3426412 1.1862042 

Bu log-odds için bir güven aralığıdır.

İçin Elimizdeki log ( O d d ler ) = log Pp=0.5günlük(Ödds)=günlükp1-p=günlük1=0p=0.5

p


1
p<0.05

2
confintp<0,05

2

Glm.summary işlevindeki z- / t değerlerine dayalı p değerlerini hipotez testi olarak kullanmak (tamamen) doğru / doğru değildir.

  1. Dil kafa karıştırıcı. Bildirilen değerlere z-değerleri adı verilir. Ancak bu durumda , gerçek sapma yerine tahmini standart hatayı kullanırlar . Bu nedenle gerçekte t-değerlerine daha yakındırlar . Aşağıdaki üç çıktıyı karşılaştırın:
    1) özet.glm
    2) t-testi
    3) z-testi

    > set.seed(1)
    > x = rbinom(100, 1, .7)
    
    > coef1 <- summary(glm(x ~ 1, offset=rep(qlogis(0.7),length(x)), family = "binomial"))$coefficients
    > coef2 <- summary(glm(x ~ 1, family = "binomial"))$coefficients
    
    > coef1[4]  # output from summary.glm
    [1] 0.6626359
    > 2*pt(-abs((qlogis(0.7)-coef2[1])/coef2[2]),99,ncp=0) # manual t-test
    [1] 0.6635858
    > 2*pnorm(-abs((qlogis(0.7)-coef2[1])/coef2[2]),0,1) # manual z-test
    [1] 0.6626359
  2. Bunlar kesin p değerleri değildir. Binom dağılımını kullanarak p-değerinin tam olarak hesaplanması daha iyi sonuç verecektir (günümüzde hesaplama gücü ile bu bir sorun değildir). Gauss dağılımının hatanın olduğu varsayıldığında, t-dağılımı kesin değildir (p'yi fazla tahmin eder, alfa düzeyini aşmak "gerçeklik" te daha az görülür). Aşağıdaki karşılaştırmaya bakın:

    # trying all 100 possible outcomes if the true value is p=0.7
    px <- dbinom(0:100,100,0.7)
    p_model = rep(0,101)
    for (i in 0:100) {
      xi = c(rep(1,i),rep(0,100-i))
      model = glm(xi ~ 1, offset=rep(qlogis(0.7),100), family="binomial")
      p_model[i+1] = 1-summary(model)$coefficients[4]
    }
    
    
    # plotting cumulative distribution of outcomes
    outcomes <- p_model[order(p_model)]
    cdf <- cumsum(px[order(p_model)])
    plot(1-outcomes,1-cdf, 
         ylab="cumulative probability", 
         xlab= "calculated glm p-value",
         xlim=c(10^-4,1),ylim=c(10^-4,1),col=2,cex=0.5,log="xy")
    lines(c(0.00001,1),c(0.00001,1))
    for (i in 1:100) {
      lines(1-c(outcomes[i],outcomes[i+1]),1-c(cdf[i+1],cdf[i+1]),col=2)
    #  lines(1-c(outcomes[i],outcomes[i]),1-c(cdf[i],cdf[i+1]),col=2)
    }
    
    title("probability for rejection as function of set alpha level")

    Alfa tarafından reddedilme CDF'si

    Siyah eğri eşitliği temsil eder. Kırmızı eğri altında. Bu, glm özeti işlevi tarafından belirli bir hesaplanmış p değeri için, bu durumu (veya daha büyük farkı) gerçekte p değerinin gösterdiklerinden daha az bulduğumuz anlamına gelir.


Hmm .. Bir GLM için T dağılımını kullanma gerekçesi konusunda kafam karışabilir. Burada sorduğum ilgili soruya zirve yapabilir misiniz ?
AdamO

2
Bu cevap ilginç ama sorunlu. (1) OP, binom tepkileri hakkındaki hipotezleri test etmek için skor, ki kare, "tam" veya GLM tabanlı yaklaşımlar arasındaki farkı gerçekten sormadı ( bu zaten hepsini biliyor olabilir ). t sorulan soruya cevap vermek; (2) artık varyans vb. Tahminler doğrusal modellerden farklı bir varsayım ve örnekleme dağılımına sahiptir (@ AdamO'nun sorusundaki gibi), bu nedenle bir t-testinin kullanılması tartışmalıdır; ...
Ben Bolker

2
(3) Binom tepkileri için 'kesin' güven aralıkları aslında zor ('kesin' [Clopper-Wilson] aralıkları muhafazakar; puan testleri bazı aralıklarda daha iyi performans gösterebilir
Ben Bolker

@Ben Z-test si'nin t-testinden daha iyi olduğu konusunda haklısınız. Yanıtta görüntülenen grafik z-testi içindir. GLM fonksiyonunun çıkışını kullanır. Cevabımın alt satırında "p-değeri" zor bir şeydi. Bu nedenle, p-değerini ofset ile çok uygun bir şekilde kaydırılmış, ancak p-değeri için hesaplamaların kökenlerini gizleyen bir glm fonksiyonundan çıkarmak yerine, örneğin normal dağılımı kullanarak açık bir şekilde hesaplamayı daha iyi buluyorum. .
Sextus Empiricus

1
@BenBolker, tam testin gerçekten muhafazakar olduğuna inanıyorum, ama ... sadece gerçekte mükemmel binom dağılımlarından örneklemediğimiz için. Alternatif z-testi, sadece ampirik bir bakış açısından daha iyidir . İki "hatanın" birbirini iptal etmesidir 1) binom dağılımı pratik durumlarda artıkların gerçek dağılımı değil, 2) z-dağılımı binom dağılımı için kesin bir ifade değildir. Sadece pratikte 'tamam' olduğu için yanlış model için yanlış dağıtımı tercih edip etmeyeceğimiz sorgulanabilir .
Sextus Empiricus
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.