दो से अधिक नमूनों के बीच मध्यस्थों में अंतर के लिए परिकल्पना परीक्षण


12

सवाल

आर में अलग-अलग वैक्टर के रूप में लोगों के तीन समूहों के परीक्षण स्कोर को बचाया जाता है।

set.seed(1)
group1 <- rnorm(100, mean = 75, sd = 10)
group2 <- rnorm(100, mean = 85, sd = 10)
group3 <- rnorm(100, mean = 95, sd = 10)

मैं जानना चाहता हूं कि क्या इन समूहों के बीच मध्यस्थों में महत्वपूर्ण अंतर है । मुझे पता है कि मैं समूह 1 बनाम समूह 2 का परीक्षण कर सकता हूं ताकि विलकॉक्सन परीक्षण का उपयोग किया जा सके।

wilcox.test(group1, group2)

हालाँकि, यह एक समय में केवल दो समूहों की तुलना करता है, और मैं तीनों की एक साथ तुलना करना चाहूंगा। मैं एक सांख्यिकीय परीक्षण चाहूंगा जो 0.05 महत्व स्तर पर एपी वैल्यू देता है। कृपया कोई मदद कर सकता है?

# 1 संपादित करें - मूड की औसत परीक्षा

उपयोगकर्ता हाइबरनेटिंग के सुझाए गए उत्तर के बाद, मैंने मूड के औसत परीक्षण की कोशिश की।

median.test <- function(x, y){
    z <- c(x, y)
    g <- rep(1:2, c(length(x), length(y)))
    m <- median(z)
    fisher.test(z < m, g)$p.value
}

median.test(group1, group2)

हालांकि, यह दृष्टिकोण मुझे एक समय में केवल दो समूहों के मध्यस्थों के बीच एक महत्वपूर्ण अंतर के लिए परीक्षण करने की अनुमति देता है। मुझे इस बात पर यकीन नहीं है कि एक साथ तीनों के मध्यस्थों की तुलना करने के लिए इसका उपयोग कैसे किया जाए।

# 2 संपादित करें - क्रुस्कल-वालिस परीक्षण

उपयोगकर्ता के डैमार्टिन का सुझाया गया उत्तर कम या ज्यादा मुझे लगता है कि मुझे क्या चाहिए, और मुझे एक साथ सभी तीन समूहों का परीक्षण करने की अनुमति देता है।

kruskal.test(list(group1, group2, group3))

# 3 संपादित करें

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


इस साइट पर पहले से ही इसी तरह के कई सवाल हैं। की जांच करें median test। मेरा अपना जवाब / टिप्पणी यहाँ है
ttnphns

जैसा कि सभी तीनों के मध्यस्थों की एक साथ तुलना करते हैं, थोड़ा संशोधित आर कोड के लिए मेरा संपादन देखें।
हाइबरनेटिंग

जवाबों:


4

क्रुस्कल-वालिस परीक्षण भी इस्तेमाल किया जा सकता है, क्योंकि यह एक गैर पैरामीट्रिक एनोवा है। इसके अतिरिक्त, इसे अक्सर मूड के औसत परीक्षण की तुलना में अधिक शक्तिशाली माना जाता है । यह R में सांख्यिकी पैकेज में kruskal.test फ़ंक्शन का उपयोग करके आर में लागू किया जा सकता है।

अपने संपादन का जवाब देने के लिए, KW की व्याख्या करना एक तरह से एनोवा के समान है। एक महत्वपूर्ण पी-मूल्य शून्य को अस्वीकार करने से मेल खाता है कि सभी तीन साधन समान हैं। आपको विशिष्ट समूहों के बारे में प्रश्नों का उत्तर देने के लिए एक अनुवर्ती परीक्षा (फिर से, एनोवा की तरह) का उपयोग करना चाहिए। यह आमतौर पर आपके द्वारा किए जाने वाले विशिष्ट अनुसंधान प्रश्नों का अनुसरण करता है। यदि आप अनुवर्ती परीक्षण करते हैं, तो बस सिमुलेशन के मापदंडों को देखकर, सभी तीन समूह एक दूसरे से काफी भिन्न होने चाहिए (जैसा कि वे सभी 1 एसडी हैं एन = 100 के अलावा)।


1
एक दो बातें स्पष्ट करने के लिए। 1) क्रुस्कल-वालिस मंझधारियों की परीक्षा नहीं है, जब तक कि समूहों में टिप्पणियों का वितरण कुछ मान्यताओं को पूरा नहीं करता है। यदि आप वास्तव में मध्यस्थों की तुलना करना चाहते हैं तो यह उपयुक्त परीक्षा नहीं हो सकती है। परीक्षण का चयन करना सबसे अच्छा है जो वास्तव में उस परिकल्पना का परीक्षण करता है जिसे आप परीक्षण में रुचि रखते हैं। 2) क्रुस्कल-वालिस एक "एनोवा" नहीं है। यही है, यह विचरण का विश्लेषण नहीं है। 3) इस उत्तर में "साधन" का उल्लेख गलत है।
साल मंगियाफिको

10

सबसे पहले, विलकॉक्सन टेस्ट (या मान-व्हिटनी टेस्ट) मेडियंस का परीक्षण नहीं है (जब तक कि आप बहुत सख्त धारणाएं नहीं बनाते हैं जो इसे साधनों की परीक्षा भी बनाते हैं)। और 2 से अधिक समूहों की तुलना करने के लिए विल्कोक्सन परीक्षण से कुछ विरोधाभास परिणाम हो सकते हैं (देखें एफ्रॉन का पासा )।

चूंकि विलकॉक्सन परीक्षण सिर्फ एक क्रमपरिवर्तन परीक्षण का एक विशेष मामला है और आप विशेष रूप से मध्यस्थों में रुचि रखते हैं, इसलिए मैं मध्यस्थों पर क्रमपरिवर्तन परीक्षण का सुझाव दूंगा।

पहले अंतर का एक माप चुनें, 3 मीडियन्स में से सबसे बड़ा माइनस 3 का सबसे छोटा (या 3 मीडियन का प्रसरण, या एमएडी, आदि)।

अब मूल डेटा के लिए अपनी स्टेट की गणना करें।

सभी डेटा को एक सेट में पूल करें और मानों को यादृच्छिक रूप से 3 समूहों में विभाजित करें

मूल के समान आकार और समान आंकड़े की गणना करते हैं।

कई बार दोहराएं (जैसे 9998)

तुलना करें कि वास्तविक डेटा से आँकड़ा आपके परीक्षण के लिए सभी आँकड़ों के वितरण की तुलना कैसे करता है।


मान लीजिए कि मैं विल्कोक्स परीक्षण के लिए आवश्यक मान्यताओं को तैयार करने के लिए तैयार हूं जो इसे साधनों का परीक्षण भी बना देगा। क्या मुझे ऊपर लिखे R कोड को बदलने की आवश्यकता होगी? क्या यह क्रुस्कल-वालिस परीक्षण के लिए भी किया जा सकता है?
अलेक्जेंडर

1
@ अलेक्जेंडर, यदि आप उन मान्यताओं को बनाने के लिए तैयार हैं तो आर कोड ठीक है और क्रुस्क्ल वालिस भी ठीक हो जाएगा। लेकिन फिर अगर आप उन मान्यताओं तो बनाने के लिए तैयार हैं t.testऔर aovशायद के साथ-साथ ठीक होगा।
ग्रेग स्नो

+1। यदि आप के बारे में बोल रहे हैं तो आप Wilcoxon sum-rank test"विलकॉक्स" को उस नाम में परिवर्तित करने के लिए बुरा नहीं मानेंगे?
ttnphns 23

@GregSnow +1 किए गए बिंदुओं के लिए ... लेकिन मुझे लगता है कि 'Wilcox' से आपका मतलब फ्रैंक Wilcoxon के नाम पर परीक्षण से है। (यह भ्रम दुर्भाग्य से आर द्वारा मिश्रित है, जो - भ्रामक रूप से - संबंधित परीक्षण कहता है wilcox.test)। क्या आप संपादित कर सकते हैं?
Glen_b -Reinstate मोनिका

8

मूड ऑफ़ मेडियन टेस्ट एक नॉनपैमेट्रिक टेस्ट है जिसका उपयोग दो या दो से अधिक आबादी के मध्यस्थों की समानता का परीक्षण करने के लिए किया जाता है। अपने प्रश्न के आर भाग के लिए यहाँ देखें । एक संबंधित प्रश्न यहां भी देखें । यहाँ से भी :

मूड का माध्यिका परीक्षण हाथ से करने के लिए सबसे आसान है: समग्र मध्यस्थ (सभी आंकड़ों में से) का काम करें, और यह गिनें कि प्रत्येक समूह में कितने मान ऊपर और नीचे के हैं। यदि समूह सभी के बारे में समान हैं, तो अवलोकन प्रत्येक समूह में समग्र मंझला के ऊपर और नीचे लगभग 50-50 होना चाहिए ... नीचे-मध्य और ऊपर-मध्य के मायने ... एक दो तरफ़ा तालिका बनाते हैं, जो फिर ची-स्क्वेर्ड परीक्षण का उपयोग करके विश्लेषण किया जाता है। मूड का माध्य परीक्षण दो या दो से अधिक समूहों के सामान्यीकृत साइन टेस्ट की तरह होता है।

संपादित करें: तीन समूहों के लिए, आप R कोड I से जुड़े इस साधारण सामान्यीकरण पर विचार कर सकते हैं:

median.test2 <- function(x, y, z) {
  a <- c(x, y, z)
  g <- rep(1:3, c(length(x), length(y), length(z)))
  m <- median(a)
  fisher.test(a < m, g)$p.value
}

1
परीक्षण के नामकरण के लिए +1। मुझे नहीं पता था कि माध्य परीक्षण को मूड का परीक्षण भी कहा जाता है।
ttnphns 23

+1 यह मदद करने के लिए धन्यवाद, मैं वास्तव में इसकी सराहना करता हूं!
अलेक्जेंडर

मुझे पता है mood.medtestकि RVAideMemoire पैकेज में R में कुछ कार्यान्वयन हैं, सामान्य परीक्षण प्रतीत होता है सिवाय इसके कि यह छोटे नमूना आकारों के लिए डिफ़ॉल्ट रूप से फिशर सटीक परीक्षण का उपयोग करता है। median_testसिक्का पैकेज में समारोह एक asymptotic परीक्षण प्रदान करते हैं या मोंटे कार्लो उपयोग कर सकते हैं।
साल मंगियाफिको

0

मुझे पता है कि इस तरह से देर हो चुकी है, लेकिन मुझे मूड के औसत परीक्षण के लिए एक अच्छा पैकेज नहीं मिला, इसलिए मैंने इसे आर में एक समारोह बनाने के लिए खुद पर ले लिया जो कि ऐसा लगता है।

#Mood's median test for a data frame with one column containing data (d),
#and another containing a factor/grouping variable (f)

moods.median = function(d,f) {

    #make a new matrix data frame
    m = cbind(f,d)
    colnames(m) = c("group", "value")


    #get the names of the factors/groups
    facs = unique(f)

    #count the number of factors/groups
    factorN = length(unique(f))


    #Make a 2 by K table that will be saved to the global environment by using "<<-":
    #2 rows (number of values > overall median & number of values <= overall median)
    #K-many columns for each level of the factor
    MoodsMedianTable <<- matrix(NA, nrow = 2, ncol = factorN)

    rownames(MoodsMedianTable) <<- c("> overall median", "<= overall median")
    colnames(MoodsMedianTable) <<- c(facs[1:factorN])
    colnames(MoodsMedianTable) <<- paste("Factor: ",colnames(MoodsMedianTable))


    #get the overall median
    overallmedian = median(d)



    #put the following into the 2 by K table:
    for(j in 1:factorN){ #for each factor level

        g = facs[j] #assign a temporary "group name"


        #count the number of observations in the factor that are greater than
        #the overall median and save it to the table
        MoodsMedianTable[1,j] <<- sum(m[,2][ which(m[,1]==g)] > overallmedian)


        #count the number of observations in the factor that are less than
        # or equal to the overall median and save it to the table
        MoodsMedianTable[2,j] <<- sum(m[,2][ which(m[,1]==g)] <= overallmedian)

    }


    #percent of cells with expected values less than 5
    percLT5 = ((sum(chisq.test(MoodsMedianTable)$expected < 5)) /
        (length(chisq.test(MoodsMedianTable)$expected)))


    #if >20% of cells have expected values less than 5
    #then give chi-squared stat, df, and Fisher's exact p.value
    if (percLT5 > 0.2) {
        return(list(
            "Chi-squared" = chisq.test(MoodsMedianTable)$statistic,
            "df" = chisq.test(MoodsMedianTable)$parameter,
            "Fisher's exact p.value" = fisher.test(MoodsMedianTable)$p.value))

    }


    #if <= 20% of cells have expected values less than 5
    #then give chi-squared stat, df, and chi-squared p.value
    if (percLT5 <= 0.2) {
        return(list(
            "Chi-squared" = chisq.test(MoodsMedianTable)$statistic,
            "df" = chisq.test(MoodsMedianTable)$parameter,
            "Chi-squared p.value" = chisq.test(MoodsMedianTable)$p.value))

    }

}

ओपी के प्रश्न के लिए, आप पहले एक मिलान किए गए "समूह" चर के साथ अपने तीन समूह वैक्टर से मूल्यों को धारण करने के लिए एक नया डेटा फ्रेम बनाने के लिए इसे चलाएंगे।

require(reshape2)
df = cbind(group1, group2, group3)
df = melt(df)
colnames(df) = c("observation", "group", "value")

और मूड के मध्यिका परीक्षण के लिए फ़ंक्शन चलाते हैं moods.median(df$value, df$group)


ऐसा लगता है कि क्रूसकल-वालिस परीक्षण का जवाब था। ओपी को 3 समूहों के साथ एक समाधान की आवश्यकता थी। ऐसा प्रतीत होता है कि ttnphns ने पहले ही Mood परीक्षण के लिए R कोड प्रदान कर दिया है।
माइकल आर। चेरनिक

1
कोड ttnphns ने केवल एपी मूल्य प्रदान किया है, जो मैंने लिखा था वह ची स्क्वेर्ड स्टेट और डीएफ भी देता है, और यह किसी भी संख्या में समूहों के लिए काम करता है। मैं ज्यादातर इस पोस्ट के बाद से ही यहां आया हूं, यह पहला
मौका है
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.