R Language
एक क्रमपरिवर्तन परीक्षण करना
खोज…
एक काफी सामान्य कार्य
हम बिल्ट इन टूथ ग्रोथ डेटासेट का उपयोग करेंगे। हम इस बात में रुचि रखते हैं कि क्या दांतों की वृद्धि में सांख्यिकीय रूप से महत्वपूर्ण अंतर है जब गिनी सूअरों को विटामिन सी बनाम संतरे का रस दिया जाता है।
यहां देखें पूरा उदाहरण:
teethVC = ToothGrowth[ToothGrowth$supp == 'VC',]
teethOJ = ToothGrowth[ToothGrowth$supp == 'OJ',]
permutationTest = function(vectorA, vectorB, testStat){
N = 10^5
fullSet = c(vectorA, vectorB)
lengthA = length(vectorA)
lengthB = length(vectorB)
trials <- replicate(N,
{index <- sample(lengthB + lengthA, size = lengthA, replace = FALSE)
testStat((fullSet[index]), fullSet[-index]) } )
trials
}
vec1 =teethVC$len;
vec2 =teethOJ$len;
subtractMeans = function(a, b){ return (mean(a) - mean(b))}
result = permutationTest(vec1, vec2, subtractMeans)
observedMeanDifference = subtractMeans(vec1, vec2)
result = c(result, observedMeanDifference)
hist(result)
abline(v=observedMeanDifference, col = "blue")
pValue = 2*mean(result <= (observedMeanDifference))
pValue
CSV में पढ़ने के बाद, हम फ़ंक्शन को परिभाषित करते हैं
permutationTest = function(vectorA, vectorB, testStat){
N = 10^5
fullSet = c(vectorA, vectorB)
lengthA = length(vectorA)
lengthB = length(vectorB)
trials <- replicate(N,
{index <- sample(lengthB + lengthA, size = lengthA, replace = FALSE)
testStat((fullSet[index]), fullSet[-index]) } )
trials
}
यह फ़ंक्शन दो वैक्टर लेता है, और उनकी सामग्री को एक साथ फेरबदल करता है, फिर फेरबदल किए गए वैक्टर पर फ़ंक्शन testStat
करता है। teststat
का परिणाम trials
में जोड़ा जाता trials
, जो कि वापसी मूल्य है।
यह इस N = 10^5
बार करता है। ध्यान दें कि मान N
बहुत अच्छी तरह से फ़ंक्शन का पैरामीटर हो सकता है।
यह हमें डेटा के एक नए सेट के साथ छोड़ देता है, trials
, इसका मतलब है कि परिणाम हो सकता है अगर वास्तव में दो चर के बीच कोई संबंध नहीं है।
अब हमारे परीक्षण आँकड़ा को परिभाषित करने के लिए:
subtractMeans = function(a, b){ return (mean(a) - mean(b))}
परीक्षण करें:
result = permutationTest(vec1, vec2, subtractMeans)
हमारे वास्तविक देखे गए माध्य अंतर की गणना करें:
observedMeanDifference = subtractMeans(vec1, vec2)
आइए देखें कि हमारे परीक्षण सांख्यिकीय के हिस्टोग्राम पर हमारा अवलोकन कैसा दिखता है।
hist(result)
abline(v=observedMeanDifference, col = "blue")
ऐसा नहीं लगता कि हमारे देखे गए परिणाम यादृच्छिक संयोग से होने की संभावना है ...
हम पी-मान की गणना करना चाहते हैं, मूल अवलोकन परिणाम की संभावना यदि उनके दो चर के बीच कोई संबंध नहीं है।
pValue = 2*mean(result >= (observedMeanDifference))
चलो इसे थोड़ा नीचे तोड़ दें:
result >= (observedMeanDifference)
बूलियन वेक्टर बनाएंगे, जैसे:
FALSE TRUE FALSE FALSE TRUE FALSE ...
TRUE
साथ, हर बार result
का मान ओवल्यूमिन से अधिक या उसके बराबर होता observedMean
।
फ़ंक्शन का mean
इस वेक्टर को TRUE
लिए 1
और FALSE
लिए 0
रूप में व्याख्या करेगा, और हमें मिश्रण में 1
का प्रतिशत देता है, अर्थात हमारे फेरबदल वेक्टर अंतर के अंतर की संख्या जितनी बार हमने देखी या उससे अधिक की बराबरी की।
अंत में, हम 2 से गुणा करते हैं क्योंकि हमारे परीक्षण सांख्यिकीय का वितरण अत्यधिक सममित है, और हम वास्तव में जानना चाहते हैं कि हमारे देखे गए परिणाम की तुलना में कौन से परिणाम "अधिक चरम" हैं।
जो कुछ बचा है, वह पी-वैल्यू आउटपुट करने के लिए है, जो 0.06093939
। इस मूल्य की व्याख्या व्यक्तिपरक है, लेकिन मैं कहूंगा कि ऐसा लगता है कि विटामिन सी दांतों के विकास को बढ़ावा देता है जो ऑरेंज जूस की तुलना में काफी अधिक है।