मैं d20 ​​की निष्पक्षता का परीक्षण कैसे कर सकता हूं?


29

मैं बीस पक्षीय मरने (d20) की निष्पक्षता का परीक्षण कैसे कर सकता हूं? जाहिर है कि मैं समान वितरण के खिलाफ मूल्यों के वितरण की तुलना करूंगा। मुझे कॉलेज में ची-स्क्वायर टेस्ट का उपयोग करने की याद है। मैं यह देखने के लिए कैसे आवेदन कर सकता हूं कि क्या एक मरना उचित है?


मैंने एक डी 6 (छह पक्षीय मरने) के लिए एक परीक्षण के बारे में सोचा है। इसमें परीक्षण के लिए आवश्यक रोल की संख्या का पता लगाना शामिल था। यह बहुत बुनियादी है लेकिन फिर भी गणना करने में लंबा समय लगता है। Localtrainbeplac.bplaced.net/die.php पर एक नज़र डालें

जवाबों:


15

यहां R कोड के साथ एक उदाहरण दिया गया है। आउटपुट # 's से पहले है। एक निष्पक्ष मरो:

rolls <- sample(1:20, 200, replace = T)
table(rolls)
#rolls
# 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 
# 7  8 11  9 12 14  9 14 11  7 11 10 13  8  8  5 13  9 10 11 
 chisq.test(table(rolls), p = rep(0.05, 20))

#         Chi-squared test for given probabilities
#
# data:  table(rolls) 
# X-squared = 11.6, df = 19, p-value = 0.902

एक पक्षपातपूर्ण मृत्यु - संख्या 1 से 10 प्रत्येक में 0.045 की संभावना है; उन 11-20 में 0.055 की संभावना है - 200 फेंकता:

rolls <- sample(1:20, 200, replace = T, prob=cbind(rep(0.045,10), rep(0.055,10)))
table(rolls)
#rolls
# 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 
# 8  9  7 12  9  7 14  5 10 12 11 13 14 16  6 10 10  7  9 11 
chisq.test(table(rolls), p = rep(0.05, 20))

#        Chi-squared test for given probabilities
#
# data:  table(rolls) 
# X-squared = 16.2, df = 19, p-value = 0.6439

हमारे पास पूर्वाग्रह के अपर्याप्त सबूत हैं (पी = 0.64)।

एक पक्षपाती मरो, 1000 फेंको:

rolls <- sample(1:20, 1000, replace = T, prob=cbind(rep(0.045,10), rep(0.055,10)))
table(rolls)
#rolls
# 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 
# 42 47 34 42 47 45 48 43 42 45 52 50 57 57 60 68 49 67 42 63 
chisq.test(table(rolls), p = rep(0.05, 20))

#        Chi-squared test for given probabilities
#
# data:  table(rolls) 
# X-squared = 32.36, df = 19, p-value = 0.02846

अब p <0.05 और हम पूर्वाग्रह के सबूत देखना शुरू कर रहे हैं। आप पूर्वाग्रह के स्तर का अनुमान लगाने के लिए इसी तरह के सिमुलेशन का उपयोग कर सकते हैं जो आप किसी दिए गए पी-स्तर के साथ इसका पता लगाने के लिए आवश्यक थ्रेश की संख्या और पता लगाने की आवश्यकता है।

वाह, मैंने टाइपिंग खत्म करने से पहले ही 2 अन्य उत्तर दिए।


सभी उत्तर समान हैं, लेकिन थोड़ा अलग हैं। मुझे नहीं लगता कि यह वास्तव में मायने रखता है।
13g पर csgillespie

जवाब के लिए धन्यवाद। मैंने इसे स्वीकार किया क्योंकि इसमें पी मूल्यों और अस्वीकार के बारे में सभी नौसिखिया सामान शामिल थे।
सी। रॉस

10

क्या आप इसे हाथ से, या एक्सेल में करना चाहते हैं?

यदि आप इसे R में करना चाहते हैं , तो आप इसे इस तरह से कर सकते हैं:

चरण 1: अपने मरने को रोल करें (मान लें) 100 बार।

चरण 2: गिनती करें कि आपको अपनी प्रत्येक संख्या कितनी बार मिली है

चरण 3: उन्हें इस तरह से आर में रखें (आपके द्वारा लिखे गए अंकों के बजाय प्रत्येक डाई रोल की संख्या को लिखें)

x <- as.table(c(1,2,3,4,5,6,7,80,9,10,11,12,13,14,15,16,17,18,19,20))

चरण 4: बस इस कमांड को चलाएं:

chisq.test(x)

यदि P मान कम है (उदाहरण: bellow 0.05) - तो आपकी डाई संतुलित नहीं है।

यह आदेश संतुलित डाई (P = ~ .5) का अनुकरण करता है:

chisq.test(table(sample(1:20, 100, T)))

और यह एक असंतुलित मौत का अनुकरण करता है:

chisq.test(table(c(rep(20,10),sample(1:20, 100, T))))

(यह पी = ~ .005 के बारे में हो सकता है)

अब असली सवाल यह है कि कितने मरने वालों को रोल ऑफ किया जाना चाहिए। अगर कोई इसे हल करना चाहता है, तो उसका स्वागत है ...

अपडेट: यहां इस विषय पर एक अच्छा लेख भी है


5
संदर्भ के लिए +1: यह व्यावहारिक डाई परीक्षण पर एक लंबा ग्रंथ है। लेखक के आधे रास्ते केएस परीक्षण का उपयोग करने का सुझाव देता है और फिर निष्पक्षता से विचलन के विशिष्ट रूपों की पहचान करने के तरीकों में जाता है। वह यह भी अच्छी तरह से जानता है कि ची-स्क्वायर प्रति चेहरे की छोटी संख्या के लिए एक सन्निकटन है (उदाहरण के लिए, 20-पक्षीय मरने के 100 रोल के लिए), वह शक्ति भिन्न होती है, आदि, आदि। संक्षेप में, ओपी को कुछ भी पसंद हो सकता है। पता स्पष्ट रूप से निर्धारित किया गया है।
whuber

8

किसी ने अभी तक एक बायेसियन दृष्टिकोण का सुझाव नहीं दिया है? मुझे पता है कि प्रश्न का उत्तर पहले ही दिया जा चुका है, लेकिन क्या। नीचे केवल 3-पक्षीय मरने के लिए है, लेकिन मैं अनुमान लगा रहा हूं कि यह स्पष्ट है कि इसे पक्षों के लिए कैसे ठीक किया जाए ।n=37

सबसे पहले, @Glen_b ने जो कहा, उसके अनुसार, एक बायेसियन को वास्तव में दिलचस्पी नहीं है कि मरना बिल्कुल उचित है या नहीं - यह नहीं है। वह (ओं) को परवाह है कि क्या यह काफी करीब है , जो भी संदर्भ में "पर्याप्त" का अर्थ है, कहते हैं, प्रत्येक पक्ष के 5% के भीतर।

यदि , , और क्रमशः 1, 2, और 3 को रोल करने की संभावनाओं का प्रतिनिधित्व करते हैं, तो हम एक पूर्व वितरण के साथ बारे में हमारे पूर्व ज्ञान का प्रतिनिधित्व करते हैं , और गणित को आसान बनाने के लिए हम कर सकते हैं एक Dirichlet वितरण चुनें । ध्यान दें कि । गैर-सूचनात्मक पूर्व के लिए हम पूर्व पैरामीटर चुन सकते हैं, कहते हैं, ।p1p2p3p=(p1,p2,p3)p1+p2+p3=1α0=(1,1,1)

तो 1,2,3 निश्चित रूप से तब की प्रेक्षित मायने रखता है का प्रतिनिधित्व करता है एक है बहुपद वितरण पैरामीटर के साथ , और सिद्धांत का कहना है कि पीछे भी एक है मापदंडों के साथ वितरण । (ड्यूरिचलेट को पहले एक संयुग्म कहा जाता है , यहाँ)X=(X1,X2,X3)Xp=(p1,p2,p3)α=(x1+1,x2+1,x3+1)

हम डेटा का निरीक्षण करते हैं, बेयर्स नियम के साथ पीछे पाते हैं, फिर सभी निष्कर्ष पीछे के आधार पर हैं। लिए एक अनुमान चाहते हैं ? पश्च का अर्थ ज्ञात कीजिए। विश्वास अंतराल चाहते हैं (नहीं, बल्कि विश्वसनीय अंतराल )? पीछे के क्षेत्र के तहत कुछ क्षेत्रों की गणना करें। वास्तविक दुनिया में जटिल समस्याओं के लिए हम आमतौर पर पीछे से अनुकरण करते हैं और उपरोक्त सभी के लिए नकली अनुमान प्राप्त करते हैं।p

वैसे भी, यहाँ है कैसे (आर के साथ):

सबसे पहले, कुछ डेटा प्राप्त करें। हम 500 बार मरते हैं।

set.seed(1)
y <- rmultinom(1, size = 500, prob = c(1,1,1))

(हम एक निष्पक्ष मौत के साथ शुरू कर रहे हैं; व्यवहार में इन आंकड़ों को देखा जाएगा।)

अगला, हम पीछे से 5000 टिप्पणियों का अनुकरण करते हैं और परिणामों पर एक नज़र डालते हैं।p

library(MCMCpack)
A <- MCmultinomdirichlet(y, alpha0 = c(1,1,1), mc = 5000)
plot(A)
summary(A)

अंत में, आइए हमारी पश्च-संभाव्यता (आंकड़ों के अवलोकन के बाद) का अनुमान करें कि प्रत्येक समन्वय में मेले की अवधि 0.05 के भीतर है।

B <- as.matrix(A)
f <- function(x) all((x > 0.28)*(x < 0.38))
mean(apply(B, MARGIN = 1, FUN = f))

परिणाम मेरी मशीन पर लगभग 0.9486 है। (आश्चर्य की बात नहीं, वास्तव में। हमने एक निष्पक्ष मृत्यु के साथ शुरुआत की।)

त्वरित टिप्पणी: यह हमारे लिए संभव नहीं है कि हम इस उदाहरण में गैर-सूचनात्मक उपयोग करें। चूंकि यहां तक ​​कि एक सवाल यह है कि संभवत: पहली बार में डाई लगभग संतुलित दिखाई देती है, इसलिए बेहतर हो सकता है कि सभी निर्देशांकों में 1/3 के करीब ध्यान केंद्रित किया जाए। इसके ऊपर "हमारी निष्पक्षता के करीब" होने की संभावना को और भी अधिक बढ़ा देता है।


8

फिट टेस्ट की ची-स्क्वायर्ड अच्छाई का उद्देश्य सख्त एकरूपता से सभी प्रकार के विचलन को खोजना है। यह एक d4 या d6 के साथ उचित है, लेकिन d20 के साथ, आप शायद यह जांचने में अधिक रुचि रखते हैं कि आप जिस संभावना के तहत रोल करते हैं (या संभवतः अधिक) प्रत्येक परिणाम के करीब है कि यह क्या होना चाहिए।

मुझे जो मिल रहा है, वह यह है कि निष्पक्षता से कुछ प्रकार के विचलन होते हैं, जो आपके लिए एक डी 20 का उपयोग कर रहे हैं और अन्य प्रकार के विचलन जो कि बिल्कुल भी मायने नहीं रखते हैं, पर बहुत अधिक प्रभाव डालेंगे, और ची-स्क्वैर्ड परीक्षण अधिक दिलचस्प के बीच शक्ति को विभाजित करेगा और कम दिलचस्प विकल्प। परिणाम यह है कि निष्पक्षता से भी काफी मध्यम विचलन उठाने के लिए पर्याप्त शक्ति है, आपको बड़ी संख्या में रोल की आवश्यकता होती है - जितना आप बैठना और उत्पन्न करना चाहते हैं, उससे कहीं अधिक।

(संकेत: आपके d20 के लिए गैर-समान संभावनाओं के कुछ सेट के साथ आते हैं जो उस परिणाम पर सबसे अधिक प्रभाव डालेंगे जो आप d20 के लिए उपयोग कर रहे हैं और सिमुलेशन और ची-स्क्वेर परीक्षणों का उपयोग करके यह पता लगा सकते हैं कि आपके पास उनके लिए क्या शक्ति है। रोल की विभिन्न संख्याएँ, इसलिए आपको उन रोल की संख्या के बारे में कुछ पता चलेगा जिनकी आपको आवश्यकता होगी। "

"दिलचस्प" विचलन के लिए जाँच करने के कई तरीके हैं (वे जो एक d5 के विशिष्ट उपयोगों को महत्वपूर्ण रूप से प्रभावित करने की संभावना रखते हैं)

मेरी सिफारिश ईसीडीएफ टेस्ट (कोलमोगोरोव-स्मिर्नोव / एंडरसन-डार्लिंग-टाइप टेस्ट) करने की है - लेकिन आप शायद रूढ़िवाद के लिए समायोजित करना चाहते हैं, जिसके परिणामस्वरूप वितरण असतत है - कम से कम नाममात्र अल्फा स्तर उठाने पर, लेकिन यहां तक ​​कि वितरण का अनुकरण करके यह देखना बेहतर होगा कि परीक्षण आँकड़ा का वितरण d20 के लिए कैसे होता है)।

ये अभी भी किसी भी प्रकार के विचलन को उठा सकते हैं, लेकिन वे अधिक महत्वपूर्ण प्रकार के विचलन पर अपेक्षाकृत अधिक भार डालते हैं।

एक और अधिक शक्तिशाली दृष्टिकोण विशेष रूप से एक परीक्षण सांख्यिकीय का निर्माण करना है जो विशेष रूप से आपके लिए सबसे महत्वपूर्ण विकल्पों के प्रति संवेदनशील है, लेकिन इसमें थोड़ा और काम शामिल है।


में इस सवाल का जवाब मैं एक मरने व्यक्ति विचलन के आकार के आधार पर परीक्षण के लिए एक ग्राफिकल विधि सुझाव देते हैं। ची-स्क्वेर्ड टेस्ट की तरह यह कुछ पक्षों के साथ d4 या d6 जैसे पासा के लिए अधिक समझ में आता है।


7

यदि आप प्रत्येक बार प्रकट होने वाली संख्या की जांच करने में रुचि रखते हैं, तो एक ची-स्क्वेर्ड परीक्षण उपयुक्त होगा। मान लीजिए कि आप एक बार एन मरते हैं। आप प्रत्येक मान के एन / 20 बार आने की उम्मीद करेंगे। सभी ची-स्क्वायर परीक्षण करता है कि आपने जो प्राप्त किया है, उसकी तुलना करें। यदि यह अंतर बहुत बड़ा है, तो यह एक समस्या का संकेत देगा।

अन्य परीक्षण

यदि आप असभ्यता के अन्य पहलुओं में रुचि रखते हैं, उदाहरण के लिए, यदि आपने पासा निम्नलिखित आउटपुट दिया है:

1, 2, 3, 4...., 20,1,2,..

फिर हालांकि इस आउटपुट में प्रत्येक व्यक्तिगत मूल्य की सही संख्या है, यह स्पष्ट रूप से यादृच्छिक नहीं है। इस मामले में, इस प्रश्न पर एक नज़र डालें । यह शायद केवल इलेक्ट्रॉनिक पासा के लिए समझ में आता है।

आर में ची-स्क्वेर्ड टेस्ट

आर में, यह होगा

##Roll 200 times
> rolls = sample(1:20, 200, replace=TRUE)
> chisq.test(table(rolls), p = rep(0.05, 20))
    Chi-squared test for given probabilities
data:  table(rolls) 
X-squared = 16.2, df = 19, p-value = 0.6439

## Too many 1's in the sample
> badrolls = cbind(rolls, rep(1, 10))   
> chisq.test(table(badrolls), p = rep(0.05, 20))

    Chi-squared test for given probabilities

data:  table(badrolls) 
X-squared = 1848.1, df = 19, p-value < 2.2e-16

0

शायद एक रोल के सेट पर उतना ध्यान केंद्रित नहीं करना चाहिए।

एक 6 तरफ से 10 बार मरने की कोशिश करें और इस प्रक्रिया को 8 बार दोहराएं।

> xy <- rmultinom(10, n = N, prob = rep(1, K)/K)
> xy
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    3    1    0    0    1    1    2    1
[2,]    0    0    1    2    1    1    0    1
[3,]    1    3    6    0    1    3    2    4
[4,]    2    1    0    5    2    0    2    1
[5,]    3    2    0    2    1    3    3    0
[6,]    1    3    3    1    4    2    1    3

आप जांच सकते हैं कि प्रत्येक दोहराने के लिए योग 10 तक है।

> apply(xy, MARGIN = 2, FUN = sum)
[1] 10 10 10 10 10 10 10 10

प्रत्येक दोहराने (स्तंभ-वार) के लिए आप ची ^ 2 परीक्षण का उपयोग करके फिट की अच्छाई की गणना कर सकते हैं।

unlist(unname(sapply(apply(xy, MARGIN = 2, FUN = chisq.test), "[", "p.value")))
[1] 0.493373524 0.493373524 0.003491841 0.064663031 0.493373524 0.493373524 0.669182902
[8] 0.235944538

जितना अधिक आप फेंकते हैं, उतना कम पक्षपाती आप देखेंगे। इसे बड़ी संख्या के लिए करते हैं।

K <- 20
N <- 10000

xy <- rmultinom(100, n = N, prob = rep(1, K)/K)
hist(unlist(unname(sapply(apply(xy, MARGIN = 2, FUN = chisq.test), "[", "p.value"))))

यहां छवि विवरण दर्ज करें

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