आइए जानें कि यह एक अच्छा परीक्षण है या नहीं। यह दावा करने की तुलना में बहुत अधिक है कि यह खराब है या एक उदाहरण में दिखा रहा है कि यह अच्छी तरह से काम नहीं करता है। अधिकांश परीक्षण कुछ परिस्थितियों में खराब तरीके से काम करते हैं, इसलिए अक्सर हमें उन परिस्थितियों की पहचान करने का सामना करना पड़ता है जिनमें कोई प्रस्तावित परीक्षण संभवतः एक अच्छा विकल्प हो सकता है।
परीक्षण का विवरण
किसी भी परिकल्पना परीक्षण की तरह, यह (ए) एक शून्य और वैकल्पिक परिकल्पना और (बी) एक परीक्षण सांख्यिकीय (सहसंबंध गुणांक) परिकल्पना के बीच भेदभाव करने का इरादा रखता है।
अशक्त परिकल्पना यह है कि दो चर एक ही वितरण से आते हैं। सटीक होना, हमें चर नाम जाने और और मान लेते हैं हमने देखा है के उदाहरण , बुलाया , और के उदाहरण , कहा जाता । अशक्त परिकल्पना यह है कि एक्स और वाई के सभी उदाहरण स्वतंत्र और पहचान के साथ वितरित किए जाते हैं (आईआईडी)।वाई एन एक्स एक्स एक्स आई = ( एक्स 1 , एक्स 2 , … , एक्स एन एक्स ) एन वाई वाई वाई आईXYnxXxi=(x1,x2,…,xnx)nyYyiXY
आइए हम वैकल्पिक परिकल्पना के रूप में लेते हैं कि (ए) सभी उदाहरण कुछ अंतर्निहित वितरण एफ एक्स के अनुसार हैं और (बी) वाई के सभी उदाहरण कुछ अंतर्निहित वितरण एफ वाई के अनुसार हैं लेकिन (सी) एफ एक्स एफ से अलग हैं य । (इस प्रकार, हम x i के बीच संबंध, y i के बीच संबंध, x i और y j के बीच संबंध या x 's या y के बीच वितरण के अंतरों की तलाश नहीं करेंगे।XFXYFYFXFYxiyixiyjxyअलग से: यह माना जाता है कि प्रशंसनीय नहीं है।)
प्रस्तावित परीक्षण आंकड़ा मानता है कि (इस आम मूल्य फोन एन ) और के सहसंबंध गुणांक की गणना करता है ( एक्स [ मैं ] , y [ मैं ] ) हमेशा की तरह,, (जहां [ मैं ] निर्दिष्ट करता है जिनकी मैं वें सबसे छोटा डेटा का)। इस टी को बुलाओ ( x , y ) ।nx=nyn(x[i],y[i])[i]itht(x,y)
क्रमपरिवर्तन परीक्षण
इस स्थिति में - कोई बात नहीं कि सांख्यिकीय प्रस्तावित है - हम हमेशा एक क्रमचय परीक्षण कर सकते हैं । शून्य परिकल्पना के तहत, डेटा की संभावना ( ( x 1 , x 2 , … , x n ) , ( y 1 , y 2 , … , y n ) ) 2 n के किसी भी क्रमपरिवर्तन की संभावना के समान है। डेटा मान। दूसरे शब्दों में, X को आधे डेटा और दूसरे आधे Y को असाइनमेंटt( ( एक्स1, एक्स2, ... , एक्सn) , ( y1, वाई2, ... , yn) )2 एनएक्सYएक शुद्ध यादृच्छिक संयोग है। यह iid मान्यताओं और शून्य परिकल्पना का एक सरल, प्रत्यक्ष परिणाम है जो ।एफएक्स= एफY
इसलिए, , ओवल्यूशन पर सशर्त वितरण x i और y i , सभी के लिए प्राप्त t के सभी मानों का वितरण है ( 2 n ) ! डेटा के क्रमपरिवर्तन। हम इसमें रुचि रखते हैं क्योंकि किसी भी निर्धारित परीक्षण आकार α के लिए , जैसे कि α = .05 ( 95 % आत्मविश्वास के अनुरूप ), हम टी के नमूना वितरण से दो तरफा महत्वपूर्ण क्षेत्र का निर्माण करेंगे : इसमें सबसे चरम शामिल हैंt(x,y)xiyit(2n)!αα=.0595tटी के संभावित मूल्यों का 100 α %(उच्च पक्ष पर, क्योंकि उच्च सहसंबंध समान वितरण के अनुरूप है और कम सहसंबंध नहीं है)। यह इस तरह से है कि हम यह निर्धारित करने के बारे में जाते हैं कि विभिन्न वितरणों से आने वाले डेटा को तय करने के लिए सहसंबंध गुणांक कितना बड़ा होना चाहिए।100αt
शून्य नमूना वितरण का अनुकरण
क्योंकि (या, यदि आपको पसंद है, ( 2 एन)(2n)!, जो2nडेटा को आकार के दो टुकड़ों मेंविभाजित करने के तरीकों की संख्या को गिनता हैn) छोटेn केलिए भी बड़ा हो जाता है, यह बिल्कुल नमूना वितरण की गणना करने के लिए व्यावहारिक नहीं है, इसलिए हम इसे एक सिमुलेशन का उपयोग करके नमूना करते हैं। (उदाहरण के लिए, जबn=16, ( 2n)(2nn)/22nnnn=16और(2n)! ≈2.63×1035।) लगभग एक हजार नमूने अक्सर पीड़ित होते हैं (और निश्चित रूप से उन अन्वेषणों के लिए जो हम शुरू करने वाले हैं)।(2nn)/2=300 540 195(2n)!≈2.63×1035
दो बातें हमें पता लगाने की जरूरत है: पहला, नमूना वितरण शून्य परिकल्पना के तहत कैसा दिखता है। दूसरा, यह परीक्षण विभिन्न वितरणों के बीच कितना अच्छा भेदभाव करता है?
एक जटिलता है: नमूना वितरण डेटा की प्रकृति पर निर्भर करता है। हम जो कुछ भी कर रहे हैं वह यथार्थवादी आंकड़ों को देखने के लिए किया गया है, जो भी हम अध्ययन में रुचि रखते हैं, उसका अनुकरण करने के लिए बनाया गया है, और आशा है कि हम जो कुछ भी सिमुलेशन से सीखते हैं वह हमारी अपनी स्थिति पर लागू होगा।
कार्यान्वयन
समझाने के लिए, मैंने इस काम को अंजाम दिया R
। यह प्राकृतिक रूप से तीन टुकड़ों में गिरता है।
परीक्षण सांख्यिकीय गणना करने के लिए एक समारोह । क्योंकि मैं एक छोटे से अधिक सामान्य, मेरे संस्करण हैंडल विभिन्न आकार डेटासेट (होना चाहते हैं n एक्स ≠ n y ) रैखिक (क्रमबद्ध) बड़े डेटासेट में मूल्यों के बीच interpolating के साथ मैच बनाने के लिए द्वारा (क्रमबद्ध) छोटे डाटासेट। क्योंकि यह पहले से ही फ़ंक्शन द्वारा किया गया है , मैं अभी इसके परिणाम लेता हूं:t(x,y)nx≠nyR
qqplot
test.statistic <- function(x, y) {
transform <- function(z) -log(1-z^2)/2
fit <- qqplot(x,y, plot.it=FALSE)
transform(cor(fit$x, fit$y))
}
एक छोटा सा मोड़ - अनावश्यक लेकिन विज़ुअलाइज़ेशन के लिए सहायक - सहसंबंध गुणांक को एक तरह से फिर से व्यक्त करता है जो शून्य सांख्यिकीय के वितरण को लगभग सममित बना देगा। वही transform
कर रहा है।
नमूना वितरण का अनुकरण। इनपुट के लिए यह फ़ंक्शन n.iter
सरणियों में डेटा के दो सेटों के साथ पुनरावृत्तियों की संख्या को स्वीकार करता है x
और y
। यह n.iter
परीक्षण आँकड़ा के मूल्यों की एक सरणी का उत्पादन करता है । इसका आंतरिक कामकाज पारदर्शी होना चाहिए, यहां तक कि एक गैर R
उपयोगकर्ता के लिए भी :
permutation.test <- function(n.iter, x, y) {
z <- c(x,y)
n.x <- length(x)
n.y <- length(y)
n <- length(z)
k <- min(n.x, n.y)
divide <- function() {
i <- sample.int(n, size=k)
test.statistic(z[i], z[-i])
}
replicate(n.iter, divide())
}
हालांकि बस इतना ही है कि हम की जरूरत का संचालन परीक्षण, यह अध्ययन करने के लिए हम परीक्षण कई बार दोहराना चाहते हैं जाएगा क्रम में। इसलिए, हम एक बार परीक्षण का संचालन करते हैं और उस कोड को तीसरी कार्यात्मक परत के भीतर लपेटते f
हैं, जिसे आम तौर पर यहां नाम दिया गया है, जिसे हम बार-बार कॉल कर सकते हैं। व्यापक अध्ययन के लिए इसे पर्याप्त रूप से सामान्य बनाने के लिए, इनपुट के लिए यह डेटासेट के आकारों को अनुकरण करने के लिए स्वीकार करता है ( n.x
और n.y
), प्रत्येक क्रमपरिवर्तन परीक्षण ( n.iter
) के लिए पुनरावृत्तियों की संख्या test
, परीक्षण सांख्यिकीय की गणना करने के लिए फ़ंक्शन का एक संदर्भ (आप देखेंगे) क्षण भर में हम इसे हार्ड-कोड क्यों नहीं करना चाहते हैं), और आईआईडी यादृच्छिक मान उत्पन्न करने के लिए दो कार्य, लिए एक ( ) और वाई के लिए एक ( )। एक विकल्पXdist.x
Ydist.y
plot.it
क्या हो रहा है यह देखने में मदद करने के लिए उपयोगी है।
f <- function(n.x, n.y, n.iter, test=test.statistic, dist.x=runif, dist.y=runif,
plot.it=FALSE) {
x <- dist.x(n.x)
y <- dist.y(n.y)
if(plot.it) qqplot(x,y)
t0 <- test(x,y)
sim <- permutation.test(n.iter, x, y)
p <- mean(sim > t0) + mean(sim==t0)/2
if(plot.it) {
hist(sim, xlim=c(min(t0, min(sim)), max(t0, max(sim))),
main="Permutation distribution")
abline(v=t0, col="Red", lwd=2)
}
return(p)
}
आउटपुट एक सिम्युलेटेड "पी-वैल्यू" है: डेटा के लिए वास्तव में गणना की गई तुलना में अधिक चरम लग रहा है कि एक सांख्यिकीय उपज सिमुलेशन के अनुपात ।
भागों (2) और (3) बेहद सामान्य हैं: आप test.statistic
किसी अन्य गणना के साथ बदलकर एक अलग परीक्षा के लिए इस तरह का अध्ययन कर सकते हैं । हम नीचे ऐसा करते हैं।
पहला परिणाम
डिफ़ॉल्ट रूप से, हमारा कोड दो समान वितरण से तैयार किए गए डेटा की तुलना करता है। मैंने इसे ऐसा करने के लिए ( , जो कि काफी छोटे डेटासेट हैं और इसलिए मध्यम कठिन परीक्षण मामला प्रस्तुत करते हैं) और फिर इसे समान-सामान्य तुलना और एक समान-घातीय तुलना के लिए दोहराते हैं। (वर्दी वितरण सामान्य वितरण से अलग करना आसान नहीं है, जब तक कि आपके पास 16 से थोड़ा अधिक मूल्य न हों, लेकिन घातीय वितरण - उच्च तिरछा होना और लंबी दाएं पूंछ - आमतौर पर समान वितरण से आसानी से अलग होते हैं।)n.x=n.y=1616
set.seed(17) # Makes the results reproducible
n.per.rep <- 1000 # Number of iterations to compute each p-value
n.reps <- 1000 # Number of times to call `f`
n.x <- 16; n.y <- 16 # Dataset sizes
par(mfcol=c(2,3)) # Lay results out in three columns
null <- replicate(n.reps, f(n.x, n.y, n.per.rep))
hist(null, breaks=20)
plot(null)
normal <- replicate(n.reps, f(n.x, n.y, n.per.rep, dist.y=rnorm))
hist(normal, breaks=20)
plot(normal)
exponential <- replicate(n.reps, f(n.x, n.y, n.per.rep, dist.y=function(n) rgamma(n, 1)))
hist(exponential, breaks=20)
plot(exponential)
जब और Y दोनों समान हों तो बाईं ओर p- मानों का अशक्त वितरण होता है । हमें उम्मीद है कि हिस्टोग्राम वर्दी के करीब है (चरम बाएं छोर पर विशिष्ट ध्यान देना, जो "महत्वपूर्ण" परिणामों की सीमा में है) - और यह वास्तव में है - और यह है कि सिमुलेशन के दौरान प्राप्त मूल्यों का क्रम, इसके नीचे दिखाया गया है, यादृच्छिक लगता है - और यह करता है। अच्छी बात है। इसका मतलब है कि हम यह अध्ययन करने के लिए अगले कदम पर आगे बढ़ सकते हैं कि जब एक्स और वाई अलग-अलग वितरण से आते हैं तो यह कैसे बदलता है ।XYXY
मिडल प्लॉट्स समान वेरिएंट x i का 16 सामान्य वेरिएंट y i के खिलाफ परीक्षण करते हैं । अधिक बार नहीं, पी-मान अपेक्षा से कम थे। यह इस परीक्षण के लिए वास्तव में एक अंतर का पता लगाने की प्रवृत्ति को इंगित करता है। लेकिन यह एक बड़ा नहीं है। उदाहरण के लिए, हिस्टोग्राम में सबसे बाईं पट्टी से पता चलता है कि 1000 रनों में से (1000 अलग-अलग सिम्युलेटेड डेटासेट शामिल हैं), पी-वैल्यू केवल 0.05 से कम था 110 बार। यदि हम उस "महत्वपूर्ण" पर विचार करते हैं, तो इस परीक्षण में केवल 16 के आधार पर एक समान और सामान्य वितरण के बीच अंतर का पता लगाने का लगभग 11 % मौका है।16xi16yif
0.051116प्रत्येक से स्वतंत्र मूल्य। यह बहुत कम शक्ति है। लेकिन शायद यह अपरिहार्य है, तो चलिए आगे बढ़ते हैं।
दाएं हाथ के भूखंड इसी तरह एक घातांक के खिलाफ एक समान वितरण का परीक्षण करते हैं। यह परिणाम विचित्र है। यह परीक्षण, अधिक बार नहीं, यह निष्कर्ष निकालने के लिए जाता है कि समान डेटा और घातीय डेटा समान दिखते हैं। यह "लगता है" लगता है कि वर्दी और घातीय चर दो समान चर से अधिक समान हैं ! यहाँ क्या चल रहा है?
समस्या यह है कि एक घातांक वितरण के डेटा में कुछ अत्यंत उच्च मूल्य होंगे। जब आप समान रूप से वितरित मूल्यों के खिलाफ उन लोगों का एक बिखरा हुआ बनाते हैं, तो बाकी सभी के ऊपरी दाएं से कुछ बिंदु दूर होंगे। यह एक बहुत ही उच्च सहसंबंध गुणांक से मेल खाती है। इस प्रकार, जब भी वितरण में से कुछ चरम मान उत्पन्न करते हैं, तो सहसंबंध गुणांक मापने के लिए एक भयानक विकल्प होता है कि वितरण कितने अलग हैं। यह एक और भी बदतर समस्या की ओर जाता है: जैसे-जैसे डेटासेट का आकार बढ़ता है, कुछ चरम अवलोकन प्राप्त करने की संभावना बढ़ जाती है। इस प्रकार, हम इस परीक्षण की अपेक्षा कर सकते हैं कि डेटा की मात्रा में वृद्धि के रूप में यह बदतर और खराब प्रदर्शन करेगा। कितना भयंकर है ...?
एक बेहतर परीक्षा
मूल प्रश्न नकारात्मक में उत्तर दिया गया है। हालांकि, वितरण के बीच भेदभाव करने के लिए एक प्रसिद्ध, शक्तिशाली परीक्षण है: कोलमोगोरोव-स्मिरनोव परीक्षण। सहसंबंध गुणांक के बजाय, यह उनके QQ भूखंड में लाइन से सबसे बड़े ऊर्ध्वाधर विचलन की गणना करता है । (जब डेटा समान वितरण से आता है, तो QQ प्लॉट इस लाइन का अनुसरण करता है। अन्यथा, यह कहीं न कहीं विचलित हो जाएगा। KS आँकड़ा इस तरह के सबसे बड़े विचलन को उठाता है।)y=x
यहाँ एक R
कार्यान्वयन है:
test.statistic <- function(x, y) {
ks.test(x,y)$statistic
}
यह सही है: यह सॉफ़्टवेयर में बनाया गया है, इसलिए हमें केवल इसे कॉल करना होगा। लेकिन रुकें! यदि आप मैनुअल को ध्यान से पढ़ते हैं, तो आप सीखेंगे कि (ए) परीक्षण एक पी-मूल्य की आपूर्ति करता है लेकिन (बी) कि पी-मूल्य (सकल) गलत है जब दोनों x
और y
डेटासेट हैं। इसका उपयोग करने के लिए इरादा है जब आपको लगता है कि आपको पता है कि डेटा वास्तव में किस वितरण से x
आया है और आप देखना चाहते हैं कि क्या यह सच है। इस प्रकार परीक्षण से वितरण के बारे में अनिश्चितता को ठीक से समायोजित नहीं किया गया है जिसमें से डेटा y
आया था।
कोई दिक्कत नहीं है! क्रमपरिवर्तन परीक्षण की रूपरेखा अभी भी मान्य है। पूर्ववर्ती परिवर्तन करके test.statistic
, हम सभी को पिछले अध्ययन को फिर से चलाना है, अपरिवर्तित। यहाँ परिणाम हैं।
p=0.20
700.0511
30α=550α=100.10
निष्कर्ष
इस प्रकार, सहसंबंध परीक्षण के साथ समस्याएं इस सेटिंग में कुछ अंतर्निहित कठिनाई के कारण नहीं हैं। न केवल सहसंबंध परीक्षण बहुत खराब प्रदर्शन करता है, यह व्यापक रूप से ज्ञात और उपलब्ध परीक्षण की तुलना में खराब है। (मुझे लगता है कि यह नाकाफी है, इसका मतलब है कि यह हमेशा केएस परीक्षण के क्रमपरिवर्तन संस्करण की तुलना में औसतन, खराब प्रदर्शन करेगा, इसका अर्थ है कि इसका उपयोग करने का कोई कारण नहीं है।)