ฉันจะทดสอบความเป็นธรรมของผู้ตายยี่สิบคน (d20) ได้อย่างไร? เห็นได้ชัดว่าฉันจะเปรียบเทียบการกระจายตัวของค่าเทียบกับการกระจายตัวแบบสม่ำเสมอ ฉันจำไม่ได้ว่าใช้การทดสอบ Chi-Square ในวิทยาลัย ฉันจะใช้สิ่งนี้เพื่อดูว่าผู้ตายมีความยุติธรรมได้อย่างไร
ฉันจะทดสอบความเป็นธรรมของผู้ตายยี่สิบคน (d20) ได้อย่างไร? เห็นได้ชัดว่าฉันจะเปรียบเทียบการกระจายตัวของค่าเทียบกับการกระจายตัวแบบสม่ำเสมอ ฉันจำไม่ได้ว่าใช้การทดสอบ Chi-Square ในวิทยาลัย ฉันจะใช้สิ่งนี้เพื่อดูว่าผู้ตายมีความยุติธรรมได้อย่างไร
คำตอบ:
นี่คือตัวอย่างที่มีรหัส 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
เรามีหลักฐานการอคติไม่เพียงพอ (p = 0.64)
ผู้มีอคติตาย 1,000 โยน:
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 และเราเริ่มเห็นหลักฐานการมีอคติ คุณสามารถใช้แบบจำลองที่คล้ายกันเพื่อประเมินระดับความลำเอียงที่คุณคาดว่าจะตรวจพบและจำนวนการโยนที่จำเป็นในการตรวจจับด้วยระดับ p ที่กำหนด
ว้าวอีก 2 คำตอบก่อนที่ฉันจะพิมพ์เสร็จ
คุณต้องการที่จะทำมันด้วยมือหรือใน excel?
หากคุณต้องการทำในRคุณสามารถทำได้ด้วยวิธีนี้:
ขั้นตอนที่ 1: กลิ้งตายของคุณ (สมมติว่า) 100 ครั้ง
ขั้นตอนที่ 2: นับจำนวนครั้งที่คุณได้รับแต่ละหมายเลข
ขั้นตอนที่ 3: ใส่ไว้ใน R ดังนี้ (เขียนจำนวนครั้งที่คุณได้รับแต่ละม้วนตายแทนตัวเลขที่ฉันเขียน):
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))))
(มันเป็นเรื่องเกี่ยวกับ P = ~ .005)
ตอนนี้คำถามที่แท้จริงคือจำนวนที่ควรรีดตายไปจนถึงระดับของการตรวจจับระดับใด หากมีคนต้องการที่จะแก้ปัญหานั้นเขายินดี ...
ครั้งแรกในสอดคล้องกับสิ่งที่ @Glen_b กล่าวว่าคชกรรมไม่สนใจจริงหรือไม่ตายเป็นว่ายุติธรรม - มันไม่ได้ สิ่งที่เขาใส่ใจคือว่ามันใกล้พอหรือไม่อะไรก็ตามที่ "พอ" หมายถึงในบริบทนั้นพูดว่าภายใน 5% ของความยุติธรรมสำหรับแต่ละด้าน
อย่างไรก็ตามนี่คือวิธี (กับ R):
ก่อนอื่นรับข้อมูล เรากลิ้งผู้ตาย 500 ครั้ง
set.seed(1)
y <- rmultinom(1, size = 500, prob = c(1,1,1))
(เราเริ่มต้นด้วยการตายอย่างยุติธรรมในทางปฏิบัติข้อมูลเหล่านี้จะถูกสังเกต)
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 ในทุกพิกัด เหนือสิ่งนี้จะทำให้ความน่าจะเป็นด้านหลังของเราที่ "ใกล้ยุติธรรม" สูงขึ้น
การทดสอบความฟิตแบบไคสแควร์มีจุดมุ่งหมายเพื่อค้นหาความเบี่ยงเบนทุกประเภทที่เป็นไปได้จากความสม่ำเสมอที่เข้มงวด สิ่งนี้สมเหตุสมผลกับ d4 หรือ d6 แต่ด้วย d20 คุณอาจสนใจในการตรวจสอบว่าความน่าจะเป็นที่คุณหมุน (หรืออาจเกิน) แต่ละผลลัพธ์นั้นใกล้เคียงกับที่ควรจะเป็น
สิ่งที่ฉันได้รับคือมีความเบี่ยงเบนบางอย่างจากความเป็นธรรมที่จะส่งผลกระทบอย่างหนักกับสิ่งที่คุณใช้ d20 และความเบี่ยงเบนประเภทอื่น ๆ ที่แทบไม่มีความสำคัญเลยและการทดสอบไคสแควร์จะแบ่งอำนาจระหว่างสิ่งที่น่าสนใจมากขึ้น และทางเลือกที่น่าสนใจน้อยกว่า ผลที่ตามมาก็คือว่าจะมีพลังมากพอที่จะรับแม้กระทั่งการเบี่ยงเบนค่อนข้างปานกลางจากความเป็นธรรม, คุณจำเป็นต้องมีขนาดใหญ่จำนวนม้วน - ไกลมากขึ้นกว่าที่คุณเคยต้องการที่จะนั่งและสร้าง
(คำแนะนำ: หาค่าความน่าจะเป็นแบบไม่สม่ำเสมอสองสามชุดสำหรับ d20 ของคุณที่จะส่งผลกระทบอย่างหนักกับผลลัพธ์ที่คุณใช้กับ d20 และใช้การจำลองและการทดสอบไคสแควร์เพื่อหาพลังที่คุณมีต่อพวกเขาสำหรับ จำนวนม้วนต่าง ๆ ดังนั้นคุณจะได้ทราบจำนวนม้วนที่คุณต้องการ)
มีหลากหลายวิธีในการตรวจสอบการเบี่ยงเบนที่ "น่าสนใจ" (วิธีที่มีแนวโน้มที่จะส่งผลกระทบอย่างมากต่อการใช้งานทั่วไปของ d20)
คำแนะนำของฉันคือทำการทดสอบ ECDF (การทดสอบประเภท Kolmogorov-Smirnov / Anderson-Darling) - แต่คุณอาจต้องการปรับเพื่อการอนุรักษ์ที่เป็นผลมาจากการกระจายแบบไม่ต่อเนื่อง - อย่างน้อยก็ยกระดับอัลฟาเล็กน้อย ดีกว่าโดยการจำลองการแจกแจงเพื่อดูว่าการกระจายตัวของสถิติทดสอบเป็นอย่างไรสำหรับ d20)
สิ่งเหล่านี้ยังคงสามารถรับความเบี่ยงเบนใด ๆ ได้ แต่พวกมันให้น้ำหนักที่มากกว่าสำหรับการเบี่ยงเบนที่สำคัญกว่า
แนวทางที่มีประสิทธิภาพยิ่งขึ้นคือการสร้างสถิติการทดสอบที่เฉพาะเจาะจงกับทางเลือกที่สำคัญที่สุดสำหรับคุณโดยเฉพาะ แต่มันเกี่ยวข้องกับการทำงานอีกเล็กน้อย
ในคำตอบนี้ฉันขอแนะนำวิธีกราฟิกสำหรับการทดสอบแม่พิมพ์ตามขนาดของการเบี่ยงเบนของแต่ละบุคคล เช่นเดียวกับการทดสอบไคสแควร์ทำให้มีความเหมาะสมมากขึ้นสำหรับลูกเต๋าที่มีด้านน้อยเช่น d4 หรือ d6
หากคุณสนใจเพียงแค่ตรวจสอบจำนวนครั้งที่แต่ละหมายเลขปรากฏขึ้นการทดสอบ Chi-squared จะเหมาะสม สมมติว่าคุณหมุนตาย N ครั้ง คุณคาดว่าแต่ละค่าจะเกิดขึ้น N / 20 ครั้ง การทดสอบไคสแควร์ทั้งหมดเป็นการเปรียบเทียบสิ่งที่คุณสังเกตเห็นกับสิ่งที่คุณได้รับ หากความแตกต่างนี้มีขนาดใหญ่เกินไปก็จะบ่งบอกถึงปัญหา
การทดสอบอื่น ๆ
หากคุณมีความสนใจในด้านอื่น ๆ ของความแรนด์เช่นถ้าคุณให้ลูกเต๋าต่อไปนี้:
1, 2, 3, 4...., 20,1,2,..
จากนั้นแม้ว่าเอาต์พุตนี้มีจำนวนที่ถูกต้องของแต่ละค่า แต่ก็ไม่ได้สุ่มอย่างชัดเจน ในกรณีนี้ลองดูคำถามนี้ นี่อาจเป็นเหตุผลสำหรับลูกเต๋าอิเล็กทรอนิกส์เท่านั้น
การทดสอบไคสแควร์ใน R
ใน R นี้จะเป็น
##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
บางทีหนึ่งไม่ควรมุ่งเน้นมากในชุดม้วนหนึ่ง
ลองกลิ้ง 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
สำหรับการทำซ้ำแต่ละครั้ง (คอลัมน์ฉลาด) คุณสามารถคำนวณความดีของความพอดีโดยใช้การทดสอบ Chi ^ 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"))))