सरल ची वर्ग परीक्षण के विकल्प के रूप में glm () का उपयोग करना


15

मैं glm()आर का उपयोग करते हुए अशक्त परिकल्पनाओं को बदलने में रुचि रखता हूं ।

उदाहरण के लिए:

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

परिकल्पना का परीक्षण करता है कि p=0.5 । क्या होगा अगर मैं नल को p = कुछ मनमाना मूल्य में बदलना चाहता हूं glm()?

मुझे पता है कि यह prop.test()और भी किया जा सकता है chisq.test(), लेकिन मैं glm()स्पष्ट डेटा से संबंधित सभी परिकल्पनाओं का परीक्षण करने के लिए उपयोग करने के विचार का पता लगाना चाहूंगा ।


7
+1। स्पष्ट रूप से एक संभावना के रूप में व्यक्त किए गए द्विपद पैरामीटर को संदर्भित करता है के बाद से प्राकृतिक लिंक (और के द्वारा प्रयोग किया एक डिफ़ॉल्ट रूप से) logit है, से बचने के भ्रम को अलग करने के लिए महत्वपूर्ण है पी अपने logit, जो लॉग बाधाओं है से लॉग इन करें ( पी / ( 1 - पी ) )pglmplog(p/(1p))
whuber

जवाबों:


19

आप एक का उपयोग कर सकते ऑफसेट : glmके साथ family="binomial"लॉग-बाधाओं या logit पैमाने पर अनुमान मानकों, इसलिए लॉग-बाधाओं को 0 में से या 0.5 की सम्भावना मेल खाती है। यदि आप p की प्रायिकता से तुलना करना चाहते हैं , तो आप चाहते हैं कि आधार रेखा मान q = logit ( p ) = log ( p / ( 1 - p ) ) हो । सांख्यिकीय मॉडल अब हैβ0=0pq=logit(p)=log(p/(1p))

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

जहां केवल अंतिम पंक्ति मानक सेटअप से बदल गई है। आर कोड में:

  • offset(q)सूत्र में उपयोग करें
  • लॉगिट / लॉग-ऑड फ़ंक्शन है qlogis(p)
  • थोड़ा नाराज होकर, आपको प्रतिक्रिया चर में प्रत्येक तत्व के लिए एक ऑफसेट मूल्य प्रदान करना होगा - आर स्वचालित रूप से आपके लिए एक निरंतर मूल्य को दोहराएगा नहीं। यह एक डेटा फ्रेम स्थापित करके नीचे किया गया है, लेकिन आप इसका उपयोग कर सकते हैं 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) यह आपको वाल्ड टेस्ट देगा। एक LRT नल मॉडल फिटिंग glm(y ~ offset(q)-1, family=binomial, data=dd)और पैकेज lrtestसे उपयोग किया जा सकता है lmtest। पियर्सन का ची-स्क्वायर टेस्ट GLM मॉडल के लिए स्कोर टेस्ट है। वाल्ड / एलआरटी / स्कोर सभी सुसंगत परीक्षण हैं और यथोचित बड़े नमूना आकारों में समकक्ष निष्कर्ष प्रदान करना चाहिए।
एडमो

1
मुझे लगता है कि आप anova()एक आरआर टेस्ट पाने के लिए ग्लू पर बेस आर से भी इस्तेमाल कर सकते हैं
बेन बोल्कर

दिलचस्प है, मैंने एनोवा का उपयोग करने की आदत खो दी है। हालांकि, मुझे लगता है कि एनोवा परीक्षण के लिए पल्लु प्रिंट करने से इनकार lrtestकरती है, जबकि करती है।
एडमो

2
शायद anova(.,test="Chisq")?
बेन बोल्कर

6

अपने GLM के मापदंडों के लिए आत्मविश्वास अंतराल देखें:

> 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 

यह लॉग-ऑड्स के लिए एक आत्मविश्वास अंतराल है।

के लिए हमारे पास लॉग ( डी डी एस ) = लॉग पीp=0.5log(odds)=logp1p=log1=0p=0.5

p


1
p<0.05

2
confintp<0,05

2

यह एक परिकल्पना परीक्षण के रूप में glm.summary फ़ंक्शन में z- / t-मानों के आधार पर पी-मानों का उपयोग करने के लिए (पूरी तरह से) सही / सटीक नहीं है।

  1. यह भ्रामक भाषा है। रिपोर्ट किए गए मानों को z- मान कहा जाता है। लेकिन इस मामले में वे सच्चे विचलन के स्थान पर अनुमानित मानक त्रुटि का उपयोग करते हैं । इसलिए वास्तव में वे टी-वैल्यू के करीब हैं । निम्नलिखित तीन
    आउटपुटों की तुलना करें: 1) सारांश।
    2 एल ) टी-टेस्ट
    3) जेड-टेस्ट

    > 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. वे सटीक पी-वैल्यू नहीं हैं। द्विपद वितरण का उपयोग करते हुए पी-मूल्य की एक सटीक गणना बेहतर काम करेगी (आजकल कंप्यूटिंग शक्ति के साथ, यह कोई समस्या नहीं है)। त्रुटि के गॉसियन वितरण को मानते हुए टी-वितरण, सटीक नहीं है (यह पी को कम कर देता है, अल्फा स्तर से अधिक "वास्तविकता" में कम बार होता है)। निम्नलिखित तुलना देखें:

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

    CDF of rejection by alpha

    काला वक्र समानता का प्रतिनिधित्व करता है। लाल वक्र इसके नीचे है। इसका मतलब है कि glm समरी फंक्शन द्वारा दिए गए परिकलित पी-वैल्यू के लिए, हम इस स्थिति (या बड़े अंतर) को वास्तविकता में पी-वैल्यू संकेत की तुलना में कम बार पाते हैं।


हम्म .. मैं जीएलएम के लिए टी वितरण का उपयोग करने के औचित्य के बारे में भ्रमित हो सकता हूं। क्या आप संबंधित प्रश्न पर एक चोटी ले सकते हैं जो मैंने अभी यहां पूछा है ?
एडम

2
यह उत्तर दिलचस्प लेकिन समस्याग्रस्त है। (1) ओपी ने वास्तव में द्विपदीय प्रतिक्रियाओं के बारे में परिकल्पनाओं के परीक्षण के लिए स्कोर, ची-स्क्वायर्ड, "सटीक", या GLM- आधारित दृष्टिकोणों के बीच के अंतर के बारे में नहीं पूछा (वे वास्तव में यह सब सामान पहले से ही जान सकते हैं ), इसलिए यह नहीं है ' t उस प्रश्न का उत्तर दें जो पूछा गया था; (2) अवशिष्ट विचरण आदि के अनुमानों में रैखिक मॉडल से मान्यताओं और नमूना वितरण का एक अलग सेट है (जैसा कि @ एडमो प्रश्न में), इसलिए एक टी-टेस्ट का उपयोग बहस का मुद्दा है; ...
बेन बोल्कर

2
(3) द्विपद प्रतिक्रियाओं के लिए 'सटीक' विश्वास अंतराल वास्तव में मुश्किल हैं ('सटीक' [क्लोपर-विल्सन] अंतराल रूढ़िवादी हैं; स्कोर परीक्षण कुछ सीमाओं पर बेहतर प्रदर्शन कर सकते हैं
बेन बोल्कर

@ आप सही हैं कि जेड-टेस्ट सी वास्तव में टी-टेस्ट से बेहतर है। उत्तर में प्रदर्शित ग्राफ z- परीक्षण के लिए है। यह GLM फ़ंक्शन के आउटपुट का उपयोग करता है। मेरे उत्तर की लब्बोलुआब यह था कि "पी-मूल्य" एक मुश्किल बात है। इसलिए, मुझे यह स्पष्ट रूप से गणना करने के लिए बेहतर लगता है, उदाहरण के लिए, सामान्य वितरण का उपयोग करते हुए, एक glm फ़ंक्शन से पी-मान निकालने के बजाय, जिसे बहुत आसानी से ऑफसेट के साथ स्थानांतरित किया गया है लेकिन पी-मूल्य के लिए गणना की उत्पत्ति को छिपाता है ।
सेक्सटस एम्पिरिकस

1
@BenBolker, मेरा मानना ​​है कि सटीक परीक्षण वास्तव में रूढ़िवादी है, लेकिन ... केवल इसलिए कि वास्तव में हम सही द्विपद वितरण से नमूना नहीं ले रहे हैं। वैकल्पिक z- परीक्षण, केवल अनुभवजन्य दृष्टिकोण से बेहतर है । यह है कि दो "त्रुटियां" एक दूसरे को रद्द करती हैं 1) द्विपद वितरण व्यावहारिक स्थितियों में अवशिष्टों का वास्तविक वितरण नहीं है, 2) जेड-वितरण एक द्विपद वितरण के लिए सटीक अभिव्यक्ति नहीं है। यह संदिग्ध है कि क्या हमें गलत मॉडल के लिए गलत वितरण को प्राथमिकता देनी चाहिए , क्योंकि व्यवहार में यह 'ठीक' है।
सेक्स्टस एम्पिरिकस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.