आर के साथ बूटस्ट्रैप का उपयोग करते हुए पी-मूल्य की गणना करना


28

मैं एक अनुमानित 2-पक्षीय बूटस्ट्रैप किए गए पी-मान की गणना करने के लिए "बूट" पैकेज का उपयोग करता हूं लेकिन परिणाम t.test का उपयोग करने के पी-मूल्य से बहुत दूर है। मैं यह पता नहीं लगा सकता कि मैंने अपने आर कोड में क्या गलत किया है। क्या कोई मुझे इसके लिए संकेत दे सकता है

time = c(14,18,11,13,18,17,21,9,16,17,14,15,
         12,12,14,13,6,18,14,16,10,7,15,10)
group=c(rep(1:2, each=12))
sleep = data.frame(time, group)

require(boot)
diff = function(d1,i){
    d = d1[i,]
    Mean= tapply(X=d$time, INDEX=d$group, mean)
    Diff = Mean[1]-Mean[2]
    Diff
}

set.seed(1234)
b3 = boot(data = sleep, statistic = diff, R = 5000, strata=sleep$group)

pvalue = mean(abs(b3$t) > abs(b3$t0))
pvalue 

2-पक्षीय बूटस्ट्रैप्ड p-value (pvalue) = 0.4804 लेकिन t.test का 2-पक्षीय p-value 0.04342 है। दोनों पी-वैल्यू लगभग 11 गुना अंतर हैं। ये केसे हो सकता हे?


कैसे आता है b3 $ t0 में दो प्रविष्टियाँ हैं?
शीआन

1
यह एक कॉलनाम है!
एल्विस

2
तुम एक गणना कर रहे हैं -value गलत तरीके से। प्रलेखन का कहना है कि मनाया गया आँकड़ा है, नॉट वितरण के रूप में नोटेशन सुझाव देगा। आपको null के तहत नमूने dist-n के अनुमान के साथ आने की जरूरत है। अधिक जानकारी के लिए मेरा जवाब देखें। पूर्वाग्रह रहित परीक्षण के लिए प्रयास करें । pt0mean(abs(b3$t0) < abs(b3$t-mean(b3$t)))
एडमो

जवाबों:


31

आप प्रेक्षित डेटा के अनुभवजन्य वितरण के तहत डेटा उत्पन्न करने के लिए बूटस्ट्रैप का उपयोग कर रहे हैं। यह दो साधनों के बीच अंतर पर एक विश्वास अंतराल देने के लिए उपयोगी हो सकता है:

> quantile(b3$t,c(0.025,0.975))
     2.5%     97.5% 
0.4166667 5.5833333 

एक प्राप्त करने के लिए -value, यदि आप शून्य परिकल्पना के तहत क्रमपरिवर्तन उत्पन्न करने के लिए की जरूरत है। इसे इस तरह किया जा सकता है:p

diff2 = function(d1,i){
    d = d1; 
    d$group <- d$group[i];  # randomly re-assign groups
    Mean= tapply(X=d$time, INDEX=d$group, mean)
    Diff = Mean[1]-Mean[2]
    Diff
}

> set.seed(1234)
> b4 = boot(data = sleep, statistic = diff2, R = 5000)
> mean(abs(b4$t) > abs(b4$t0))
[1] 0.046

इस समाधान में, समूहों का आकार तय नहीं किया गया है, आप प्रारंभिक समूह सेट से बूटस्ट्रैप करके प्रत्येक समूह को यादृच्छिक रूप से पुन: असाइन करते हैं। यह मेरे लिए वैध लगता है, हालांकि एक अधिक शास्त्रीय समाधान प्रत्येक समूह के व्यक्तियों की संख्या को ठीक करना है, इसलिए आप बूटस्ट्रैपिंग के बजाय केवल समूहों को अनुमति देते हैं (यह आमतौर पर प्रयोग के डिजाइन से प्रेरित होता है, जहां समूह के आकार पहले से तय होते हैं। ):

> R <- 10000; d <- sleep
> b5 <- numeric(R); for(i in 1:R) { 
+    d$group <- sample(d$group, length(d$group)); 
+    b5[i] <- mean(d$time[d$group==1])-mean(d$time[d$group==2]); 
+ }
> mean(abs(b5) > 3)
[1] 0.0372

5
यह तकनीकी रूप से क्रमपरिवर्तन परीक्षण है, बूटस्ट्रैप पी-मूल्य नहीं।
एडमो

@ अदमो मैं सहमत हूँ कि इस उत्तर में प्रस्तुत क्या है क्रमपरिवर्तन परीक्षण (और इसका थोड़ा संशोधित संस्करण); ऐसा इसलिए है क्योंकि रेज़मैपलिंग के दौरान समूहों को पूल किया जाता है। इसके विपरीत, बूटस्ट्रैप-आधारित परीक्षण में, प्रत्येक समूह के लिए मान उसी समूह के डेटा का उपयोग करके नमूना होना चाहिए। यहाँ एक उत्तर दिया गया है कि यह कैसे करना है: बताइए : सांख्यिकी.स्टैकएक्सचेंज . com / a / 187630 / 28666
अमीबा का कहना है कि मोनिका

@amoeba मुझे लगता है कि आप जिस उत्तर को लिंक करते हैं, वह भी एक क्रमपरिवर्तन परीक्षण है, जो बूटस्ट्रैप से संबंधित है केवल इनोफार के रूप में वे फिर से संगठित करना शामिल करते हैं। रिपोर्ट करना पूरी तरह से ठीक है, लेकिन रिपोर्ट करने के लिए यह दो तरीके हैं जिनका उपयोग किया जा रहा है। एक nonparametric बूटस्ट्रैप तकनीकी रूप से एक शून्य परिकल्पना के तहत डेटा उत्पन्न करने में असमर्थ है। बूटस्ट्रैप वितरण से पी-वैल्यू कैसे उत्पन्न होती है, इसके लिए मेरा जवाब देखें
एडमो

@ अडामो मुझे लगता है कि यह शब्दावली का प्रश्न है, लेकिन मैं यह नहीं देखता कि लिंक किए गए उत्तर में वर्णित प्रक्रिया को "क्रमपरिवर्तन" परीक्षण कैसे कहा जा सकता है क्योंकि वहाँ कुछ भी अनुमति नहीं है: प्रत्येक समूह के लिए पुन: जारी किए गए मान उसी से डेटा का उपयोग करके उत्पन्न किए जाते हैं केवल समूह।
अमीबा का कहना है कि मोनिका

1
एल्विस, मुझे लगता है कि आपके उत्तर में कोड का पहला टुकड़ा क्रमपरिवर्तन परीक्षण भी है। जब आप फिर से तैयार करते हैं, तो आप समूहों को एक साथ पूल करते हैं! यह वह है जो क्रमपरिवर्तन परीक्षण को परिभाषित करता है।
अमीबा का कहना है कि मोनिका

25

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

आपके मूल अनुकरण की महत्वपूर्ण समस्या यह है कि बूटस्ट्रैप आपको हमेशा टेस्ट स्टेटिस्टिक के TRUE वितरण के साथ प्रदान करता है। हालाँकि, जब पी-वैल्यू की गणना की जाती है, तो आपको परीक्षण वितरण के प्राप्त मूल्य की उसके वितरण UNDER H0 से तुलना करनी होगी, न कि सच्चे वितरण के साथ!

[चलिए इसे स्पष्ट करते हैं। उदाहरण के लिए, यह ज्ञात है कि शास्त्रीय टी-परीक्षण के परीक्षण सांख्यिकीय टी में एच 0 के तहत शास्त्रीय "केंद्रीय" टी-वितरण है और सामान्य रूप से एक गैर-केंद्रीय वितरण है। हालांकि, हर कोई इस तथ्य से परिचित है कि टी के मनाया मूल्य की तुलना शास्त्रीय "केंद्रीय" टी-वितरण से की जाती है, अर्थात कोई भी टी के साथ तुलना करने के लिए सही [गैर-सामान्य] टी-वितरण प्राप्त करने की कोशिश नहीं करता है।]

आपका पी-वैल्यू 0.4804 बहुत बड़ा है, क्योंकि टेस्ट स्टेटिस्टिक मीन [1] -मेन [2] का मनाया गया मान "t0" बूटस्ट्रैप्ड नमूना "t" के केंद्र के बहुत करीब है। यह स्वाभाविक है और आमतौर पर यह हमेशा ऐसा होता है [अर्थात H0 की वैधता के बावजूद], क्योंकि बूटस्ट्रैप्ड नमूना "t" मीन [1] -Mean [2] के वास्तविक वितरण का अनुकरण करता है। लेकिन, जैसा कि ऊपर [और एल्विस द्वारा भी] उल्लेख किया गया है, आपको वास्तव में मीन [1] -मेन [2] के वितरण की आवश्यकता है। यह स्पष्ट है कि

1) H0 के तहत मीन का वितरण [1] -मन [2] 0 के आसपास केंद्रित होगा,

2) इसका आकार H0 की वैधता पर निर्भर नहीं करता है।

इन दो बिंदुओं का तात्पर्य है कि H0 के तहत मीन [1] -मेन [2] का वितरण बूटस्ट्रैप्ड नमूना "t" SHIFTED द्वारा किया जा सकता है ताकि यह लगभग 0. आर में केंद्रित हो।

b3.under.H0 <- b3$t - mean(b3$t)

और संबंधित पी-मूल्य होगा:

mean(abs(b3.under.H0) > abs(b3$t0))

जो आपको 0.0232 का "बहुत अच्छा" मूल्य देता है। :-)

मुझे ध्यान दें कि ऊपर उल्लिखित बिंदु "2)" को टेस्ट स्टेटिस्टिक का "ट्रांसलेशन इक्वेरिअर्स" कहा जाता है और इसे सामान्य रूप से धारण नहीं करना पड़ता है! यानी कुछ परीक्षण आँकड़ों के लिए, बूटस्ट्रैप्ड "t" की शिफ्टिंग आपको HO के अंतर्गत परीक्षण आँकड़ा के वितरण का एक वैध अनुमान प्रदान नहीं करता है! इस चर्चा पर और विशेष रूप से पी। डेलगार्ड के उत्तर पर एक नज़र डालें: http://tolstoy.newcastle.edu.au/R/e6/help/09/04/11096.html

आपके परीक्षण की समस्या परीक्षण सांख्यिकीय के पूरी तरह से सममित वितरण को जन्म देती है, लेकिन ध्यान रखें कि परीक्षण सांख्यिकीय के विषम बूटस्ट्रैप्ड वितरण के मामले में TWO-SIDED पी-मान प्राप्त करने के साथ कुछ समस्याएं हैं। फिर से, ऊपर दिए गए लिंक को पढ़ें।

[और अंत में, मैं आपकी स्थिति में "शुद्ध" क्रमचय परीक्षण का उपयोग करूंगा; यानी एल्विस के उत्तरार्ध का दूसरा भाग। :-)]


17

बूटस्ट्रैप CI और पी-वैल्यू की गणना के कई तरीके हैं। मुख्य मुद्दा यह है कि बूटस्ट्रैप के लिए अशक्त परिकल्पना के तहत डेटा उत्पन्न करना असंभव है। क्रमपरिवर्तन परीक्षण इसके लिए एक व्यवहार्य पुनरुत्पादन आधारित विकल्प है। एक उचित बूटस्ट्रैप का उपयोग करने के लिए आपको परीक्षण आँकड़ा के नमूने वितरण के बारे में कुछ धारणाएँ बनानी होंगी।

परीक्षण के अदर्शन की कमी के बारे में एक टिप्पणी: यह 95% सीआई को खोजने के लिए पूरी तरह से संभव है, अशक्त नहीं अभी तक एपी> 0.05 या इसके विपरीत। बेहतर समझौता करने के लिए, अशक्त के तहत बूटस्ट्रैप के नमूनों की गणना बजाय रूप में होनी चाहिए। । कहने का मतलब यह है कि अगर बूटस्ट्रैप नमूने में घनत्व को तिरछा किया जाता है, तो घनत्व को शून्य में छोड़ दिया जाना चाहिए। गैर-विश्लेषणात्मक (उदाहरण के लिए रेज़म्पलिंग) जैसे समाधानों के साथ CI के लिए परीक्षणों को उलटना संभव नहीं है।β * 0 = β * - ββ0=β^β^β0=β^β^

सामान्य बूटस्ट्रैप

एक दृष्टिकोण एक सामान्य बूटस्ट्रैप है जहां आप बूटस्ट्रैप वितरण के औसत और मानक विचलन लेते हैं, वितरण को शिफ्ट करके नल वितरण के तहत नमूना वितरण की गणना करते हैं और मूल बूटस्ट्रैप नमूने में अनुमान के बिंदु पर अशक्त वितरण से सामान्य प्रतिशत का उपयोग करते हैं। । यह एक उचित दृष्टिकोण है जब बूटस्ट्रैप वितरण सामान्य होता है, दृश्य निरीक्षण आमतौर पर यहां होता है। इस दृष्टिकोण का उपयोग करने वाले परिणाम आम तौर पर मजबूत के करीब होते हैं, या सैंडविच आधारित त्रुटि अनुमान जो कि विषमलैंगिकता और / या परिमित नमूना भिन्नता मान्यताओं के खिलाफ मजबूत होता है। एक सामान्य परीक्षण सांख्यिकीय की धारणा अगले बूटस्ट्रैप परीक्षण में मान्यताओं की एक मजबूत स्थिति है जिसकी मैं चर्चा करूंगा।

प्रतिशतक बूटस्ट्रैप

एक और तरीका है पर्सेंटाइल बूटस्ट्रैप जो कि मुझे लगता है कि हम में से ज्यादातर लोग बूटस्ट्रैप की बात करते हैं। यहां, पैरामीटर का बूटस्ट्रैप्ड वितरण वैकल्पिक परिकल्पना के तहत नमूने के एक अनुभवजन्य वितरण का अनुमान लगाता है। यह वितरण संभवतः गैर-सामान्य हो सकता है। एक 95% CI को आसानी से आनुभविक मात्राओं को ले कर गणना की जाती है। लेकिन एक महत्वपूर्ण धारणा यह है कि इस तरह का वितरण महत्वपूर्ण है । इसका मतलब यह है कि यदि अंतर्निहित पैरामीटर बदलता है, तो वितरण का आकार केवल एक स्थिरांक द्वारा स्थानांतरित किया जाता है, और स्केल जरूरी नहीं बदलता है। यह एक मजबूत धारणा है! यदि यह माना जाता है, तो आप "शून्य परिकल्पना के तहत सांख्यिकीय का वितरण" (DSNH या उत्पन्न कर सकते हैंF0) अनुमानों से बूटस्ट्रैप वितरण को घटाकर, फिर का उपयोग करके अपने अनुमान से DSNH का कितना प्रतिशत "अधिक चरम" है, की गणना2×min(F0(β^),1F0(β^))

छात्र बूटस्ट्रैप

-values ​​की गणना करने के लिए सबसे आसान बूटस्ट्रैप समाधान छात्र बूटस्ट्रैप का उपयोग करना है। प्रत्येक बूटस्ट्रैप पुनरावृत्ति के साथ, सांख्यिकीय और इसकी मानक त्रुटि की गणना करें और छात्र सांख्यिकीय को वापस करें। यह परिकल्पना के लिए एक बूटस्ट्रैप्ड छात्र वितरण देता है जिसका उपयोग सीआईएस और पी-मानों की गणना करने के लिए बहुत आसानी से किया जा सकता है। यह पूर्वाग्रह-सुधारित बूटस्ट्रैप के पीछे अंतर्ज्ञान को भी रेखांकित करता है। टी-डिस्ट्रीब्यूशन बहुत आसानी से नल के नीचे शिफ्ट हो जाता है क्योंकि आउटलाइंग परिणाम उनके संबंधित उच्च विचरण से कम हो जाते हैं।p

प्रोग्रामिंग उदाहरण

एक उदाहरण के रूप में, मैं cityबूटस्ट्रैप पैकेज में डेटा का उपयोग करूँगा । बूटस्ट्रैप विश्वास अंतराल की गणना इस कोड के साथ की जाती है:

ratio <- function(d, w) sum(d$x * w)/sum(d$u * w)
city.boot <- boot(city, ratio, R = 999, stype = "w", sim = "ordinary")
boot.ci(city.boot, conf = c(0.90, 0.95),
        type = c("norm", "basic", "perc", "bca"))

और इस उत्पादन का उत्पादन:

BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 999 bootstrap replicates

CALL : 
boot.ci(boot.out = city.boot, conf = c(0.9, 0.95), type = c("norm", 
    "basic", "perc", "bca"))

Intervals : 
Level      Normal              Basic         
90%   ( 1.111,  1.837 )   ( 1.030,  1.750 )   
95%   ( 1.042,  1.906 )   ( 0.895,  1.790 )  

Level     Percentile            BCa          
90%   ( 1.291,  2.011 )   ( 1.292,  2.023 )   
95%   ( 1.251,  2.146 )   ( 1.255,  2.155 )  
Calculations and Intervals on Original Scale

सामान्य बूटस्ट्रैप के लिए 95% CI की गणना करके प्राप्त की जाती है:

with(city.boot, 2*t0 - mean(t) + qnorm(c(0.025, 0.975)) %o% sqrt(var(t)[1,1]))

पी-मान इस प्रकार प्राप्त होता है:

> with(city.boot, pnorm(abs((2*t0 - mean(t) - 1) / sqrt(var(t)[1,1])), lower.tail=F)*2)
[1] 0.0315

जो इस बात से सहमत है कि 95% सामान्य CI में 1 का शून्य अनुपात मान शामिल नहीं है।

प्रतिशतक CI प्राप्त होता है (संबंधों के लिए तरीकों के कारण कुछ अंतरों के साथ):

quantile(city.boot$t, c(0.025, 0.975))

और प्रतिशतक बूटस्ट्रैप का p- मान है:

cvs <- quantile(city.boot$t0 - city.boot$t + 1, c(0.025, 0.975))
mean(city.boot$t > cvs[1] & city.boot$t < cvs[2])

0.035 की एपी देता है जो मूल्य से 1 के बहिष्कार के संदर्भ में विश्वास अंतराल से भी सहमत है। हम सामान्य रूप से इसका निरीक्षण नहीं कर सकते हैं, जबकि प्रतिशत सीआई की चौड़ाई सामान्य सीआई की तरह लगभग चौड़ी है और यह प्रतिशत सीआई अधिक शून्य से आगे है कि प्रतिशत सीआई को कम पी-मान प्रदान करना चाहिए। इसका कारण यह है कि प्रतिशतक विधि के लिए CI में अंतर्निहित नमूना वितरण का आकार गैर-सामान्य है।


यह एक बहुत ही दिलचस्प जवाब है @AdamO, लेकिन क्या आप कुछ उदाहरण प्रदान कर सकते हैं? आर पर, आप फ़ंक्शन boot.ciका उपयोग कर सकते हैं और छात्र सीआई चुनने के लिए तर्क "प्रकार" का उपयोग कर सकते हैं (आप बीसीए सीआई भी चुन सकते हैं)। हालांकि, आप पी-वैल्यू की गणना कैसे कर सकते हैं? क्या आप अनुमान या परीक्षण सांख्यिकीय का उपयोग कर रहे हैं? मेरे पास एक ऐसा ही सवाल था जिसका जवाब बहुत सराहा जाएगा।
केविन ज़र्का

1
छात्र बूटस्ट्रैप के लाभों की स्पष्ट व्याख्या के लिए +1।
eric_kernfeld

@KevinOunet मैंने बूट पैकेज में CI से पी-मानों की प्रतिकृति के दो उदाहरण दिए। क्या यह मदद करता है?
16

1
धन्यवाद @AdamO, जो वास्तव में मदद करता है! क्या आप छात्र बूटस्ट्रैप के लिए एक अंतिम उदाहरण प्रदान कर सकते हैं?
केविन ज़र्का
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.