मुख्य सामग्री पर जाएँ

R कंटिजेंसी टेबल्स ट्यूटोरियल

इस ट्यूटोरियल में, आप कंटिजेंसी टेबल्स बनाना और उनमें दिखने वाले संबंधों का परीक्षण व परिमाणीकरण करना सीखेंगे।
· 10 मि॰ पढ़ें

AI के साथ खोजें

टेबल कैसे बनाएं

सबसे पहले, कुछ डेटा लेते हैं। MASS पैकेज में 1993 में USA में बिक्री पर 93 कारों का डेटा है। ये Cars93 ऑब्जेक्ट में संग्रहीत हैं और प्रत्येक कार के लिए 27 फीचर्स शामिल करते हैं, जिनमें से कुछ श्रेणीबद्ध हैं। तो आइए MASS पैकेज लोड करें और cars93 में शामिल वाहनों के प्रकार देखें:

library(MASS)
Cars93$Type

##  [1] Small   Midsize Compact Midsize Midsize Midsize Large   Large  
##  [9] Midsize Large   Midsize Compact Compact Sporty  Midsize Van    
## [17] Van     Large   Sporty  Large   Compact Large   Small   Small  
## [25] Compact Van     Midsize Sporty  Small   Large   Small   Small  
## [33] Compact Sporty  Sporty  Van     Midsize Large   Small   Sporty
## [41] Sporty  Small   Compact Small   Small   Sporty  Midsize Midsize
## [49] Midsize Midsize Midsize Large   Small   Small   Compact Van    
## [57] Sporty  Compact Midsize Sporty  Midsize Small   Midsize Small  
## [65] Compact Van     Midsize Compact Midsize Van     Large   Sporty
## [73] Small   Compact Sporty  Midsize Large   Compact Small   Small  
## [81] Small   Compact Small   Small   Sporty  Midsize Van     Small  
## [89] Van     Compact Sporty  Compact Midsize
## Levels: Compact Large Midsize Small Sporty Van

यहाँ हमारे पास 6 प्रकार की कारें हैं। table फ़ंक्शन बताता है कि प्रत्येक प्रकार की कितनी कारें हैं:

table(Cars93$Type)

##
## Compact   Large Midsize   Small  Sporty     Van
##      16      11      22      21      14       9

prop.table इसे भिन्नों में बदल देता है:

prop.table(table(Cars93$Type))

##
##    Compact      Large    Midsize      Small     Sporty        Van
## 0.17204301 0.11827957 0.23655914 0.22580645 0.15053763 0.09677419

कारों की उत्पत्ति के साथ भी यही:

table(Cars93$Origin)

##
##     USA non-USA
##      48      45

prop.table(table(Cars93$Origin))

##
##      USA  non-USA
## 0.516129 0.483871

कंटिजेंसी टेबल कैसे बनाएं

अच्छा, हमने देखा कि हमारे डेटासेट में US और non-US कारों की संख्या लगभग समान है और सबसे अधिक प्रचलित प्रकार Midsize और Small हैं। हालांकि, हो सकता है US और non-US प्रकार में भिन्न हों?

आइए कारों के प्रकारों को उनकी उत्पत्ति के संदर्भ में देखें। हम फिर से table का उपयोग कर सकते हैं, लेकिन अब दो आर्ग्युमेंट्स के साथ। पहला पंक्ति (row) वेरिएबल बनेगा और दूसरा स्तंभ (column) वेरिएबल:

table(Cars93$Type, Cars93$Origin)

##          
##           USA non-USA
##   Compact   7       9
##   Large    11       0
##   Midsize  10      12
##   Small     7      14
##   Sporty    8       6
##   Van       5       4

अब, हमने वही देखा जो सब जानते हैं: अमेरिकियों को बड़े वाहन पसंद हैं! ऊपर की टेबल दो श्रेणीबद्ध वेरिएबल्स (Type और Origin) का संयुक्त वितरण दिखाती है। ऐसी टेबल्स को कंटिजेंसी टेबल्स कहा जाता है।

कंटिजेंसी टेबल से मार्जिनल्स कैसे पाएं

rowSums और colSums फ़ंक्शंस अपने-आप में स्पष्ट हैं

(tab1<-table(Cars93$Type, Cars93$Origin))

##          
##           USA non-USA
##   Compact   7       9
##   Large    11       0
##   Midsize  10      12
##   Small     7      14
##   Sporty    8       6
##   Van       5       4

rowSums(tab1)

## Compact   Large Midsize   Small  Sporty     Van
##      16      11      22      21      14       9

colSums(tab1)

##     USA non-USA
##      48      45

कंटिजेंसी टेबल से प्रतिशत कैसे पाएं

table के साथ नेस्ट किया हुआ prop.table आवृत्तियाँ देता है

prop.table(table(Cars93$Type, Cars93$Origin))

##          
##                  USA    non-USA
##   Compact 0.07526882 0.09677419
##   Large   0.11827957 0.00000000
##   Midsize 0.10752688 0.12903226
##   Small   0.07526882 0.15053763
##   Sporty  0.08602151 0.06451613
##   Van     0.05376344 0.04301075

प्रतिशत में बदलना बस 100 से गुणा करना है:

prop.table(table(Cars93$Type, Cars93$Origin))*100

##          
##                 USA   non-USA
##   Compact  7.526882  9.677419
##   Large   11.827957  0.000000
##   Midsize 10.752688 12.903226
##   Small    7.526882 15.053763
##   Sporty   8.602151  6.451613
##   Van      5.376344  4.301075

ध्यान दें, कि यह संयुक्त प्रायिकता वितरण है, जिससे हम देख सकते हैं कि उदाहरण के लिए लगभग 7.5% कारें छोटी हैं और अमेरिकी मूल की हैं।

अधिकतर, हमें एक वेरिएबल का वितरण दूसरे द्वारा बनाए गए समूहों के भीतर रुचिकर लगता है। यहाँ, US और (अलग से) non-US कारों में कार प्रकारों का वितरण दिलचस्प है। इसे पाने के लिए, हम prop.table फ़ंक्शन में margin आर्ग्युमेंट का उपयोग करते हैं। यह बताता है कि समूहीकरण वेरिएबल पंक्तियों में है (margin=1) या स्तंभों में (margin=2):

prop.table(table(Cars93$Type, Cars93$Origin), margin=2)*100

##          
##                 USA   non-USA
##   Compact 14.583333 20.000000
##   Large   22.916667  0.000000
##   Midsize 20.833333 26.666667
##   Small   14.583333 31.111111
##   Sporty  16.666667 13.333333
##   Van     10.416667  8.888889

अब हम आसानी से देख सकते हैं कि छोटे वाहनों की आवृत्ति non-USA हिस्से में USA की तुलना में दोगुनी है।

साथ ही ध्यान दें कि प्रतिशत स्तंभों में 100 तक जुड़ते हैं, जबकि संयुक्त वितरण टेबल (जिसमें margin आर्ग्युमेंट नहीं था) में 100 पूरी टेबल का योग था।

(tab2<-prop.table(table(Cars93$Type, Cars93$Origin), margin=2)*100)

##          
##                 USA   non-USA
##   Compact 14.583333 20.000000
##   Large   22.916667  0.000000
##   Midsize 20.833333 26.666667
##   Small   14.583333 31.111111
##   Sporty  16.666667 13.333333
##   Van     10.416667  8.888889

colSums(tab2)

##     USA non-USA
##     100     100

काई-स्क्वेयर्ड परीक्षण

कंटिजेंसी टेबल्स से उठने वाला सबसे आम सवाल यह है कि क्या पंक्ति और स्तंभ वेरिएबल्स स्वतंत्र हैं। इसका सबसे बुनियादी तरीका काई-स्क्वेयर्ड परीक्षण चलाना है। इसे इस ट्यूटोरियल में विस्तार से कवर किया गया है। आइए जाँचें कि Type और Origin स्वतंत्र हैं या नहीं:

chisq.test(Cars93$Type, Cars93$Origin)

## Warning in chisq.test(Cars93$Type, Cars93$Origin): Chi-squared
## approximation may be incorrect

##
##  Pearson's Chi-squared test
##
## data:  Cars93$Type and Cars93$Origin
## X-squared = 14.08, df = 5, p-value = 0.01511

स्पष्ट है, वे स्वतंत्र नहीं हैं, लेकिन हमें Chi-squared approximation may be incorrect की चेतावनी भी मिली। इसका कारण यह है कि काई-स्क्वेयर्ड सांख्यिकी काई-स्क्वेयर्ड वितरण का केवल लगभग पालन करती है। हमारे पास जितने अधिक प्रेक्षण होंगे, यह लगभग उतना ही बेहतर होगा। chisq.test फ़ंक्शन ऊपर दी गई चेतावनी तब देता है जब अपेक्षित गणनाओं में से कोई एक 5 से कम हो ("expected count" क्या है, इसके लिए ऊपर लिंक किए गए ट्यूटोरियल को देखें)।

फिशर का सटीक परीक्षण

फिशर का सटीक परीक्षण काई-स्क्वेयर्ड परीक्षण का एक विकल्प है, जिसका उपयोग मुख्यतः तब किया जाता है जब काई-स्क्वेयर्ड का अनुरूपण संतोषजनक न हो। आइए इसे चलाते हैं:

fisher.test(Cars93$Type, Cars93$Origin)

##
##  Fisher's Exact Test for Count Data
##
## data:  Cars93$Type and Cars93$Origin
## p-value = 0.007248
## alternative hypothesis: two.sided

परिणाम काई-स्क्वेयर्ड के समान ही हैं, लेकिन ऐसा हमेशा नहीं होता। फिशर के सटीक परीक्षण की एक बड़ी कमी यह है कि बड़ी टेबल्स (या बड़े सैंपल्स) के लिए यह संगणकीय रूप से अलाभकारी हो जाता है।

G-परीक्षण

एक अन्य विकल्प तथाकथित G-परीक्षण है। इसकी सांख्यिकी भी लगभग काई-स्क्वेयर्ड वितरित होती है, लेकिन छोटे सैंपल्स के लिए यह अनुरूपण काई-स्क्वेयर्ड परीक्षण की तुलना में अधिक निकट होता है। G-परीक्षण के लिए हम DescTools पैकेज के GTest फ़ंक्शन का उपयोग कर सकते हैं। परिणाम फिर से पिछले दो परीक्षणों के काफी समान हैं: Type और Origin स्वतंत्र नहीं हैं।

library(DescTools)
GTest(Cars93$Type, Cars93$Origin)

##
##  Log likelihood ratio (G-test) test of independence without
##  correction
##
## data:  Cars93$Type and Cars93$Origin
## G = 18.362, X-squared df = 5, p-value = 0.002526

येट्स का संशोधन

2x2 कंटिजेंसी टेबल्स में, काई-स्क्वेयर्ड परीक्षण को येट्स के कंटिन्युटी करेक्शन से बेहतर किया जा सकता है। यह बस काई-स्क्वेयर्ड सांख्यिकी के प्रत्येक | Observed - Expected | पद से 0.5 घटा देता है। अगर आप यहाँ भ्रमित हों तो फिर से इस ट्यूटोरियल का संदर्भ लें। और भी, R जब भी आवश्यक होता है येट्स का करेक्शन अपने-आप लागू करता है। आइए US और non-US कारों में मैनुअल ट्रांसमिशन उपलब्धता देखें:

(tab3<-table(Cars93$Man.trans.avail, Cars93$Origin))

##      
##       USA non-USA
##   No   26       6
##   Yes  22      39

chisq.test(tab3)

##
##  Pearson's Chi-squared test with Yates' continuity correction
##
## data:  tab3
## X-squared = 15.397, df = 1, p-value = 8.712e-05

येट्स का करेक्शन स्वचालित रूप से लागू हुआ, और R ने हमें इसके बारे में बताया।

3 (या अधिक) आयामी टेबल

एक साथ Man.trans.avail, Origin, और Type देखें। table डेटासेट को तीसरे के रूप में दिए गए वेरिएबल के अनुसार विभाजित करता है:

table(Cars93$Man.trans.avail, Cars93$Origin, Cars93$Type)

## , ,  = Compact
##
##      
##       USA non-USA
##   No    2       0
##   Yes   5       9
##
## , ,  = Large
##
##      
##       USA non-USA
##   No   11       0
##   Yes   0       0
##
## , ,  = Midsize
##
##      
##       USA non-USA
##   No    9       4
##   Yes   1       8
##
## , ,  = Small
##
##      
##       USA non-USA
##   No    0       0
##   Yes   7      14
##
## , ,  = Sporty
##
##      
##       USA non-USA
##   No    0       0
##   Yes   8       6
##
## , ,  = Van
##
##      
##       USA non-USA
##   No    4       2
##   Yes   1       2

ftable अधिक संक्षिप्त दृश्य देता है:

ftable(Cars93$Man.trans.avail, Cars93$Origin, Cars93$Type)

##              Compact Large Midsize Small Sporty Van
##                                                    
## No  USA            2    11       9     0      0   4
##     non-USA        0     0       4     0      0   2
## Yes USA            5     0       1     7      8   1
##     non-USA        9     0       8    14      6   2

कोक्रेन-मेंटेल-हैंज़़ेल परीक्षण

ऊपर table के परिणामों से स्पष्ट होना चाहिए कि Origin और Man.trans.avail के बीच संबंध Type के साथ बदलता है। उदाहरण के लिए, छोटी और स्पोर्टी कारों के लिए कोई एसोसिएशन नहीं है: हर US और हर non-US छोटी या स्पोर्टी कार मैनुअल संस्करण में आती है। दूसरी ओर, अधिकांश midsize US कारों में मैनुअल संस्करण नहीं है, जबकि इस प्रकार की अधिकांश non-US कारों में है। स्तरों (strata) में संभावित रूप से भिन्न संबंधों का हिसाब रखने के लिए, कोक्रेन-मेंटेल-हैंज़़ेल परीक्षण का उपयोग किया जा सकता है:

mantelhaen.test(Cars93$Man.trans.avail, Cars93$Origin, Cars93$Type)

##
##  Mantel-Haenszel chi-squared test with continuity correction
##
## data:  Cars93$Man.trans.avail and Cars93$Origin and Cars93$Type
## Mantel-Haenszel X-squared = 8.0153, df = 1, p-value = 0.004638
## alternative hypothesis: true common odds ratio is not equal to 1
## 95 percent confidence interval:
##   2.226531 76.891307
## sample estimates:
## common odds ratio
##          13.08438

mantelhaen.test को दिया गया तीसरा आर्ग्युमेंट स्तरों की पहचान करता है। उपरोक्त परिणामों की तुलना उन परिणामों से करें जिनमें स्तरीकरण नहीं है (येट्स करेक्शन वाला उदाहरण ऊपर)। एसोसिएशन अब भी मौजूद है, लेकिन उसके पक्ष में साक्ष्य काफी कमजोर है।

सहसंबंध के माप

एक बार जब हमने वेरिएबल्स के बीच कुछ एसोसिएशन खोज लिए, तो अब उनकी ताकत नापने का समय है। संभावित मापों के कई प्रकार हैं। उनमें से कई का वर्णन यहाँ किया गया है। अब मैं दो सबसे व्यापक रूप से उपयोग होने वालों पर ध्यान दूँगा।

क्रेमर का V

V काई-स्क्वेयर्ड सांख्यिकी पर आधारित है:

$$ V = \sqrt{\frac{\chi^2/N}{\min(C-1, R-1)}}, $$ जहाँ:

  • N कंटिजेंसी टेबल का ग्रैंड टोटल है (इसकी सभी कोशिकाओं का योग),
  • C स्तंभों की संख्या है
  • R पंक्तियों की संख्या है।

V ∈ [0; 1]। V जितना बड़ा होगा, वेरिएबल्स के बीच संबंध उतना ही मजबूत होगा। V = 0 को स्वतंत्रता के रूप में व्याख्यायित किया जा सकता है (क्योंकि V = 0 तभी और केवल तभी जब χ2 = 0)। V की मुख्य कमी सटीक व्याख्या का अभाव है। क्या V = 0.6 मजबूत, मध्यम या कमजोर एसोसिएशन है?

DescTools के CramerV फ़ंक्शन से हम इसे निकाल सकते हैं:

CramerV(Cars93$Type, Cars93$Origin)

## [1] 0.3890967

फिर वही सवाल: यह मजबूत है, मध्यम है या कमजोर एसोसिएशन?

गुडमैन और क्रुस्कल लैम्ब्डा

गुडमैन और क्रुस्कल लैम्ब्डा, प्रपोर्शनल रिडक्शन इन वेरिएशन पर आधारित माप का उदाहरण है। ऐसे माप लिनियर रिग्रेशन के निर्धारण गुणांक R2 की तर्ज पर होते हैं:

  • इनके मान [0, 1] के बीच होते हैं
  • ये स्वतंत्र वेरिएबल द्वारा समझाई गई विविधता के अंश को व्यक्त करते हैं।

मान लेते हैं कि कॉलम-वेरिएबल स्वतंत्र है। तब गुडमैन और क्रुस्कल का लैम्ब्डा सूत्र है: $$\lambda = \frac{L - \sum_j L_j}{L},$$ जहाँ:

  • Lj j-वें स्तंभ में नॉन-मोडल आवृत्तियों का योग है,
  • L "कुल" स्तंभ में नॉन-मोडल आवृत्तियों का योग है

यह एक उदाहरण से सबसे अच्छी तरह समझ आता है। आइए Type और Origin देखें, जिसमें बाद वाला स्वतंत्र है:

table(Cars93$Type, Cars93$Origin)

##          
##           USA non-USA
##   Compact   7       9
##   Large    11       0
##   Midsize  10      12
##   Small     7      14
##   Sporty    8       6
##   Van       5       4

US स्तंभ का मोड 11 है, तो L1 = 7 + 10 + 7 + 8 + 5 = 37। non-US स्तंभ का मोड 14 है, तो L2 = 9 + 0 + 12 + 6 + 4 = 31। "कुल" स्तंभ है

rowSums(table(Cars93$Type, Cars93$Origin))

## Compact   Large Midsize   Small  Sporty     Van
##      16      11      22      21      14       9

मोड 22 है, तो L = 16 + 11 + 21 + 14 + 9 = 71 और $$\lambda = \frac{71 - (37+31)}{71}=0.042$$

हम DescTools पैकेज के Lambda फ़ंक्शन का उपयोग कर सकते हैं:

Lambda(Cars93$Type, Cars93$Origin, direction='row')

## [1] 0.04225352

direction पैरामीटर निर्धारित करता है कि आश्रित वेरिएबल कहाँ है (row या column में)।

Origin, Type में विविधता का केवल लगभग 4% समझाता है। सूत्र से ध्यान दें कि लैम्ब्डा विविधता को सबसे बड़े समूह में होना और न होना—इस द्विभाजन के रूप में परिभाषित करता है।

यह उल्लेखनीय है कि जब भी प्रत्येक स्तंभ की मोडल श्रेणी समान हो, लैम्ब्डा शून्य होता है। इस टेबल पर नज़र डालें:

(lambdaTab<-cbind(c(0,100), c(49,51)))

##      [,1] [,2]
## [1,]    0   49
## [2,]  100   51

chisq.test(lambdaTab)

##
##  Pearson's Chi-squared test with Yates' continuity correction
##
## data:  lambdaTab
## X-squared = 62.279, df = 1, p-value = 2.981e-15

प्रत्येक स्तंभ के लिए मोडल श्रेणी समान है (यह दूसरी पंक्ति है)। इसलिए स्पष्ट और महत्वपूर्ण एसोसिएशन के बावजूद लैम्ब्डा शून्य होना चाहिए:

Lambda(lambdaTab, direction='row')

## [1] 0

यदि आप R में सांख्यिकी के बारे में और सीखना चाहते हैं, तो DataCamp का Statistical Modeling in R (Part 1) कोर्स करें।

विषय