यह देखने के लिए कि डेटा सामान्य वितरण का अनुसरण करता है, R का उपयोग करके परीक्षण कैसे करें


44

मेरे पास निम्नलिखित संरचना के साथ एक डेटा सेट है:

a word | number of occurrence of a word in a document | a document id 

मैं आर में सामान्य वितरण के लिए एक परीक्षण कैसे कर सकता हूं? संभवतः यह एक आसान सवाल है लेकिन मैं एक आर नौसिखिया हूं।


5
जिपफ के नियम ( j.mp/9er2lv ) के अनुसार, @ सकारब शायद मैं पूरी तरह से बंद हूं, लेकिन क्या आप यह उम्मीद नहीं करेंगे कि किसी भी शब्द की आवृत्ति शब्दों की आवृत्ति तालिका में व्युत्क्रमानुपाती होगी ? इस मामले में, zipfRपैकेज देखें।
chl

1
मैं @chl से सहमत हूं - यह मामूली चमत्कार होगा यदि आपका डेटा सामान्य रूप से वितरित किया गया था। शायद आप डेटा के साथ क्या करना चाहते हैं, इसके बारे में एक और सवाल सार्थक होगा। पहिया को मजबूत मत करो!
csgillespie

3
आपके डेटा को एक मॉडल के अनुसार कैसे वितरित किया जा सकता है जो नकारात्मक घटना को गैर शून्य संभावना देता है?
user603

1
इस परीक्षण को करने का कारण क्या है?
whuber

यदि सूचना निकालना का विशाल परिणाम सही है, तो मैं अनुमान लगाना चाहता हूं। मैं जांच करना चाहता हूं कि क्या पाठ में पाई गई संस्थाओं का वितरण मेरी अपेक्षाओं का पालन करता है (मैं डोमेन और पाठ कोष को जानता हूं)।
स्कारब

जवाबों:


47

यदि मैं आपके प्रश्न को सही ढंग से समझता हूं, तो यह जांचने के लिए कि क्या दस्तावेजों के एक सेट में शब्द की घटना एक सामान्य वितरण का अनुसरण करती है, आप सिर्फ एक आकार-विल्क परीक्षण और कुछ qqplots का उपयोग कर सकते हैं। उदाहरण के लिए,

## Generate two data sets
## First Normal, second from a t-distribution
words1 = rnorm(100); words2 = rt(100, df=3)

## Have a look at the densities
plot(density(words1));plot(density(words2))

## Perform the test
shapiro.test(words1); shapiro.test(words2)

## Plot using a qqplot
qqnorm(words1);qqline(words1, col = 2)
qqnorm(words2);qqline(words2, col = 2)

Qqplot कमांड देते हैं: वैकल्पिक शब्द

आप देख सकते हैं कि भारी पूंछ ( अधिक जानकारी ) द्वारा दूसरा डेटा सेट स्पष्ट रूप से सामान्य नहीं है ।

शापिरो-वॉक नॉर्मलिटी टेस्ट में, पी-वैल्यू पहले डेटा सेट (> .9) के लिए बड़ी है लेकिन दूसरे डेटा सेट (<.01) के लिए बहुत छोटी है। यह आपको दूसरे के लिए अशक्त परिकल्पना को अस्वीकार करने के लिए प्रेरित करेगा।


7
यह स्पष्ट रूप से सामान्य क्यों नहीं है?
हरमन टूथ्रोट

मुझे लगता है कि प्लॉट किए गए बिंदुओं को I-III क्वाड्रंट बाइसेक्टर पर झूठ बोलना चाहिए क्योंकि वे एक सामान्य वितरण आकर्षित करते हैं।
कैम्पा

आम तौर पर (मतलब! = 0), में qqline1 ढलान और म्यू अवरोधन होगा।
कैम्पा

@ हर्मटूथ यह दूसरा प्लॉट देखते समय सामान्य नहीं है क्योंकि पूंछ के मूल्यों में एक बहुत बड़ा विचलन है। क्यूक्यू प्लॉट सैद्धांतिक क्वांटाइल (यदि यह सामान्य था) का एक नमूना नमूना क्वांटली (डेटा से) छंद है। यदि नमूना डेटा सामान्य है, तो हम टिप्पणियों को लाइन के करीब होने की उम्मीद करते हैं, क्योंकि वे पहले भूखंड के लिए हैं। उन भूखंडों के लिए y अक्ष पर बहुत अंतर पैमाने पर भी ध्यान दें।
शेल्डन

15

मान लें कि आपके डेटासेट को कॉल किया गया है wordsऔर countsउसमें एक कॉलम है, तो आप वितरण के दृश्य के लिए हिस्टोग्राम की साजिश कर सकते हैं:

hist(words$counts, 100, col="black")

जहां 100 डिब्बे की संख्या है

आप एक सामान्य QQ प्लॉट का उपयोग करके भी कर सकते हैं

qqnorm(words$counts)

अंत में, आप सामान्यता के लिए शापिरो-विल्क परीक्षण का भी उपयोग कर सकते हैं

shapiro.test(word$counts)

हालाँकि, इस चर्चा को देखें: सामान्यता परीक्षण: 'अनिवार्य रूप से बेकार?'


14

कोई भी परीक्षण आपको यह नहीं दिखाएगा कि आपके डेटा का सामान्य वितरण है - यह आपको केवल तभी दिखाएगा जब डेटा सामान्य रूप से पर्याप्त रूप से असंगत है कि आप अशक्त अस्वीकार कर देंगे।

लेकिन मायने किसी भी मामले में सामान्य नहीं हैं, वे सकारात्मक पूर्णांक हैं - क्या संभावना है कि सामान्य वितरण से एक अवलोकन एक ऐसा मूल्य लेगा जो पूर्णांक नहीं है? (... यह संभावना 1 की घटना है)।

आप इस मामले में सामान्यता के लिए परीक्षण क्यों करेंगे? यह स्पष्ट रूप से असत्य है।

[कुछ मामलों में यह जरूरी नहीं है कि आप बता सकते हैं कि आपका डेटा वास्तव में सामान्य नहीं है। वास्तविक डेटा कभी नहीं (या लगभग कभी नहीं) वास्तव में एक सामान्य वितरण से तैयार होने जा रहे हैं।]

यदि आपको वास्तव में एक परीक्षण करने की आवश्यकता है, शापिरो-विल्क परीक्षण ( ?shapiro.test) सामान्यता का एक अच्छा सामान्य परीक्षण है, जो कि व्यापक रूप से उपयोग किया जाता है।


9

सामान्यता को देखने का एक और अधिक औपचारिक तरीका यह परीक्षण करना है कि क्या कुर्तोसिस और तिरछापन शून्य से काफी अलग है।

ऐसा करने के लिए, हमें प्राप्त करने की आवश्यकता है:

kurtosis.test <- function (x) {
m4 <- sum((x-mean(x))^4)/length(x)
s4 <- var(x)^2
kurt <- (m4/s4) - 3
sek <- sqrt(24/length(x))
totest <- kurt/sek
pvalue <- pt(totest,(length(x)-1))
pvalue 
}

कर्टोसिस के लिए, और:

skew.test <- function (x) {
m3 <- sum((x-mean(x))^3)/length(x)
s3 <- sqrt(var(x))^3
skew <- m3/s3
ses <- sqrt(6/length(x))
totest <- skew/ses
pt(totest,(length(x)-1))
pval <- pt(totest,(length(x)-1))
pval
}

स्केवनेस के लिए।

ये दोनों परीक्षण एक-पूंछ वाले हैं, इसलिए आपको दो-पूंछ बनने के लिए पी-मान को 2 से गुणा करना होगा। यदि आपका पी-मूल्य एक से बड़ा हो जाता है, तो आपको कुर्टोसिस.टेस्ट के बजाय 1-कर्टोसिस.टेस्ट () का उपयोग करने की आवश्यकता होगी।

यदि आपके कोई अन्य प्रश्न हैं तो आप मुझे j.bredman@gmail.com पर ईमेल कर सकते हैं


उपर्युक्त दो कार्यों के क्या अंतर हैं, क्षण पैकेज से kurtosis()और skewness()कार्यों के बारे में ? नमूनों का उपयोग करने वाले परिणाम अलग हैं। rnorm()
निकोस एलेक्जेंड्रिस

5

आँकड़ों के पैकेज के शापिरो-विल्क परीक्षण के अलावा, सबसे छोटा पैकेज (सीआरएएन पर उपलब्ध) अन्य सामान्यता परीक्षण प्रदान करता है।


4

nortestR के पैकेज का उपयोग करके , ये परीक्षण किए जा सकते हैं:

  • एंडरसन-डार्लिंग नॉर्मलिटी टेस्ट करें

    ad.test(data1)
  • सामान्यता के लिए Cramér-von Mises परीक्षण करें

    cvm.test(data1)
  • सामान्यता के लिए पियर्सन ची-स्क्वायर टेस्ट करें

    pearson.test(data1)
  • सामान्यता के लिए शापिरो-फ्रांसिया परीक्षण करें

    sf.test(data1)

normtestपैकेज का उपयोग करके कई अन्य परीक्षण किए जा सकते हैं । विवरण देखें https://cran.r-project.org/web/packages/normtest/normtest.pdf पर


@Nick; मैंने 'नॉर्टेस्ट' पैकेज से इन परीक्षणों का उल्लेख यहां पाया है: ( cran.r-project.org/web/packages/nortest/nortest.pdf )। जैसा कि ऊपर बताया गया है अन्य उपयोगी पैकेज 'नॉर्मास्टेस्ट' है।
डॉ। निशा अरोड़ा

ठीक है धन्यवाद। अपने अज्ञान में मैंने मान लिया कि एक नाम टाइपो था।
निक कॉक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.