เราจะสร้างช่วงความมั่นใจสำหรับพารามิเตอร์ของการทดสอบการเปลี่ยนรูปได้อย่างไร


9

การทดสอบการเปลี่ยนรูปเป็นการทดสอบที่สำคัญโดยพิจารณาจากการสุ่มตัวอย่างซ้ำซากจากข้อมูลต้นฉบับ Resamples resamples จะถูกวาดโดยไม่มีการแทนที่ตรงกันข้ามกับ bootstrap ตัวอย่างซึ่งถูกวาดด้วยการแทนที่ นี่คือตัวอย่างที่ฉันทำในการทดสอบการเปลี่ยนรูปแบบง่าย ๆ (ความคิดเห็นของคุณยินดีต้อนรับ)

การทดสอบการเปลี่ยนรูปมีข้อดีอย่างมาก พวกเขาไม่ต้องการรูปร่างประชากรที่เฉพาะเจาะจงเช่นภาวะปกติ มันใช้กับสถิติที่หลากหลายไม่ใช่แค่สถิติที่มีการแจกแจงอย่างง่ายภายใต้สมมติฐานว่าง พวกเขาสามารถให้ค่า p ที่แม่นยำมากโดยไม่คำนึงถึงรูปร่างและขนาดของประชากร (หากมีการใช้การเปลี่ยนลำดับมากพอ)

ฉันได้อ่านด้วยว่ามันมักจะมีประโยชน์ที่จะให้ช่วงความมั่นใจพร้อมกับการทดสอบซึ่งสร้างขึ้นโดยใช้การเปลี่ยนรูป bootstrap แทนการเปลี่ยนรูปแบบการเปลี่ยนรูปแบบใหม่

คุณสามารถอธิบาย (หรือเพียงแค่ให้รหัส R) ว่าจะสร้างช่วงความมั่นใจอย่างไร (เช่นสำหรับความแตกต่างระหว่างค่าเฉลี่ยของตัวอย่างสองตัวอย่างในตัวอย่างด้านบน)

แก้ไข

หลังจาก googling ฉันพบการอ่านที่น่าสนใจนี้

คำตอบ:


7

มันก็โอเคที่จะใช้การเปลี่ยนรูปแบบการเปลี่ยนรูปแบบใหม่ มันขึ้นอยู่กับหลายปัจจัย หากการเรียงสับเปลี่ยนของคุณมีจำนวนค่อนข้างต่ำดังนั้นการประเมินช่วงความมั่นใจของคุณจึงไม่ค่อยดีนักเมื่อมีการเรียงสับเปลี่ยน การเรียงสับเปลี่ยนของคุณอยู่ในพื้นที่สีเทาและอาจใช้ได้

ข้อแตกต่างจากรหัสก่อนหน้าของคุณคือคุณจะต้องสุ่มตัวอย่างแบบสุ่มแทนที่จะใช้วิธีเรียงสับเปลี่ยน และคุณจะสร้างมันขึ้นมาตัวอย่างเช่น 1,000 ตัวอย่าง รับคะแนนต่างกันสำหรับการทดสอบซ้ำ 1,000 ครั้ง เข้าสู่ช่วงตัดค่ากลาง 950 (95%) นั่นเป็นช่วงความมั่นใจของคุณ มันตรงจาก bootstrap

คุณทำสิ่งนี้เป็นส่วนใหญ่ไปแล้วในตัวอย่างของคุณ dif.treat มีความยาว 462 รายการ ดังนั้นคุณต้องลดค่า 2.5% และ 2.5% ที่ต่ำกว่าลง (ประมาณ 11 รายการในแต่ละสิ้น)

ใช้รหัสของคุณก่อนหน้านี้ ...

y <- sort(dif.treat)
ci.lo <- y[11]
ci.hi <- y[462-11]

ปิดมือฉันพูดว่า 462 ต่ำเล็กน้อย แต่คุณจะพบ bootstrap ถึง 10,000 ออกมาพร้อมกับคะแนนที่แตกต่างกันเล็กน้อย (น่าจะใกล้กว่าค่าเฉลี่ย)

คิดว่าฉันยังเพิ่มรหัสง่าย ๆ ที่ต้องใช้ในไลบรารีการบูต (ตามรหัสก่อนหน้าของคุณ)

diff <- function(x,i) mean(x[i[6:11]]) - mean(x[i[1:5]])
b <- boot(total, diff, R = 1000)
boot.ci(b)

ขอบคุณ. มันโอเคที่จะสร้างตัวอย่างโดยใช้sampleและreplace=TRUE? มีเหตุผลที่จะใช้แพคเกจเป็นbootอย่างไร
George Dontas

โดยทั่วไปแล้วจะมีการแทนที่ดังนั้นคุณต้องการตั้งค่าเป็น TRUE สำหรับเหตุผล ... แพคเกจได้รับการปรับให้เหมาะสมจึงควรทำงานได้เร็วขึ้น .... ไม่เคยหมดเวลา นั่นอาจเป็นปัญหาหากคุณตั้งค่า R ใหญ่ และอย่างที่คุณเห็นรหัสนั้นดีและกระชับ นอกจากนี้ยังมีคุณสมบัติมากมายที่คุณจะไม่สามารถทำได้โดยง่าย
จอห์น

boot.ci ส่งคืนช่วงความมั่นใจ มีฟังก์ชั่นใด ๆ (บูต) ที่ให้ p.value หรือไม่ (ตามอัตราส่วนของจำนวนความแตกต่างอย่างน้อยสูงที่สุดเท่าที่สังเกตได้จากจำนวนตัวอย่างทั้งหมดที่สร้างขึ้น)
George Dontas

ตกลงฉันพบวิธีที่จะรับมัน:sum(b$t>=b$t0)/b$R
จอร์จ Dontas

@ gd047: พิจารณาว่านี่เป็นค่า p ด้านเดียวที่คุณกำลังคำนวณ
Joris Meys

4

เป็นการทดสอบการเปลี่ยนรูปเป็นการทดสอบที่แน่นอนทำให้คุณมีค่า p ที่แน่นอน การเริ่มการทดสอบการเรียงสับเปลี่ยนไม่สมเหตุสมผล

ถัดจากนั้นการกำหนดช่วงความมั่นใจรอบ ๆ สถิติทดสอบก็ไม่สมเหตุสมผลเช่นกันเนื่องจากคำนวณจากตัวอย่างและไม่ใช่ค่าประมาณ คุณกำหนดช่วงความมั่นใจเกี่ยวกับค่าประมาณเช่นค่าเฉลี่ยและค่าความชอบ แต่ไม่รวมถึงสถิติการทดสอบ

การทดสอบการเปลี่ยนรูปไม่ควรใช้กับชุดข้อมูลที่มีขนาดใหญ่มากจนคุณไม่สามารถคำนวณการเรียงสับเปลี่ยนที่เป็นไปได้ทั้งหมดอีกต่อไป หากเป็นกรณีนี้ให้ใช้โพรซีเดอร์บู๊ตสแตรปเพื่อกำหนดค่าการตัดสำหรับสถิติการทดสอบที่คุณใช้ แต่อีกครั้งสิ่งนี้มีส่วนเกี่ยวข้องเพียงเล็กน้อยกับช่วงความมั่นใจ 95%

ตัวอย่าง: ฉันใช้ T-statistic แบบคลาสสิกที่นี่ แต่ใช้วิธีง่าย ๆ ในการบูตสแตรปสำหรับการคำนวณการกระจายเชิงประจักษ์ของสถิติของฉัน จากนั้นฉันคำนวณค่าเชิงประจักษ์:

x <- c(11.4,25.3,29.9,16.5,21.1)
y <- c(23.7,26.6,28.5,14.2,17.9,24.3)

t.sample <- t.test(x,y)$statistic
t.dist <- apply(
      replicate(1000,sample(c(x,y),11,replace=F)),2,
      function(i){t.test(i[1:5],i[6:11])$statistic})

# two sided testing
center <- mean(t.dist)
t.sample <-abs(t.sample-center)
t.dist <- abs(t.dist - center)
p.value <- sum( t.sample < t.dist ) / length(t.dist)
p.value

คำนึงถึงว่าการทดสอบ 2 ด้านนี้ใช้ได้กับการกระจายแบบสมมาตรเท่านั้น การแจกแจงแบบไม่สมมาตรนั้นจะทำการทดสอบด้านเดียวเท่านั้น

แก้ไข:

ตกลงฉันเข้าใจผิดคำถาม หากคุณต้องการคำนวณช่วงความเชื่อมั่นในการประมาณความแตกต่างคุณสามารถใช้รหัสที่กล่าวถึงที่นี่สำหรับการบูตสแตรปภายในแต่ละตัวอย่าง ใจคุณนี่คือการประเมินแบบเอนเอียง: โดยทั่วไปนี่จะให้ CI ที่เล็กเกินไป ดูตัวอย่างที่ให้ไว้ที่นั่นด้วยเหตุผลที่คุณต้องใช้วิธีการที่แตกต่างกันสำหรับช่วงความมั่นใจและค่า p


1
คุณสามารถให้คำอธิบายว่าทำไมการทดสอบการเปลี่ยนรูปไม่ควรใช้กับชุดข้อมูลที่คุณไม่สามารถคำนวณการเรียงสับเปลี่ยนที่เป็นไปได้ทั้งหมด?
Andy W

@Andy W: ก่อนอื่นให้นิยาม "การทดสอบการเปลี่ยนแปลง" สำหรับฉันการทดสอบการเรียงสับเปลี่ยนเป็นการทดสอบที่แน่นอนโดยใช้การเปลี่ยนลำดับทุกครั้งที่เป็นไปได้ ที่เป็นไปไม่ได้ในชุดข้อมูลขนาดใหญ่ "การทดสอบการเปลี่ยนรูปโดยประมาณ" นั้นอันที่จริงแล้ววิธีการ Monte Monte Carlo รอบ ๆ และควรได้รับการยอมรับวิธีนี้ ถัดจากนั้นทฤษฎีบทขีด จำกัด กลางยืนยันในกรณีส่วนใหญ่ว่าข้อสันนิษฐานเกี่ยวกับการแจกแจงของสถิติการทดสอบจะเกิดขึ้นเมื่อใช้ชุดข้อมูลขนาดใหญ่ ในการทดสอบที่ซับซ้อนการใช้การทดสอบการเปลี่ยนแปลงบนชุดข้อมูลขนาดใหญ่ทำให้เวลาในการคำนวณยาวนานเกินกว่าที่จะทนได้โดยไม่ต้องเพิ่มคุณค่าใด ๆ my2cents
Joris

ฉันไม่ได้พูดอะไรอย่างการทดสอบการเรียงสับเปลี่ยน ฉันเข้ามาในคำถามนี้หลังจากอ่านย่อหน้าสุดท้ายของ [ส่วน 14.5 | สรุป] ในไฟล์ PDF ที่เชื่อมโยง
George Dontas

@ gd047 จากนั้นฉันได้อ่านคำถามของคุณผิด แต่คุณควรรักษาช่วงความมั่นใจและค่า p.value ไว้อย่างเคร่งครัด ช่วงความเชื่อมั่นนั้นประมาณจากการบูตสแตรปในแต่ละตัวอย่าง (แม้ว่ามันจะเอนเอียงไปตามคำจำกัดความ) การทดสอบการเปลี่ยนรูปจะกระทำโดยการเรียงสับเปลี่ยนของชุดข้อมูลที่สมบูรณ์ นั่นเป็นสองสิ่งที่แตกต่างอย่างสิ้นเชิง
Joris Meys

@ เควิน: รหัสถูกสาป อ่านรหัสอีกครั้ง: การx[6:11]อ้างอิงถึงอาร์กิวเมนต์xของฟังก์ชั่นที่ไม่ระบุชื่อภายในใช้ อาจสับสน แต่การแก้ไขของคุณให้ผลลัพธ์ที่ผิดมาก โปรดแสดงความคิดเห็นเกี่ยวกับสิ่งที่คุณคิดว่ามันควรจะเป็นก่อนที่จะแก้ไขรหัส ช่วยให้ฉันย้อนกลับ เพื่อหลีกเลี่ยงความสับสนเพิ่มเติมฉันเปลี่ยนสิ่งนั้นxเป็นi
Joris Meys

0

จากรหัส Joris Meys ใน Answers แต่มีการปรับเปลี่ยนเพื่อให้สามารถนำไปใช้ในสถานการณ์เดียวมากขึ้น:

ฉันพยายามแก้ไขอีกอัน แต่ฉันไม่มีเวลาให้เสร็จและด้วยเหตุผลบางอย่างที่ฉันไม่สามารถให้ความเห็นได้ (อาจเป็นเพราะนี่เป็นคำถามเก่า)

x <- c(11.4,25.3,29.9,16.5,21.1)
y <- c(23.7,26.6,28.5,14.2,17.9,24.3)

t.sample <- t.test(x,y)$statistic

t.dist <- apply(
          replicate(1000,sample(c(x,y),length(c(x,y)),replace=F)), 2,
          function(i){t.test(i[1:length(x)],i[length(x)+1:length(c(x,y))])$statistic})

# two sided testing
center <- mean(t.dist)
t.sample <-abs(t.sample-center)
t.dist <- abs(t.dist - center)
p.value <- sum( t.sample < t.dist ) / length(t.dist)
p.value
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.