ค่า P เท่ากับ 0 ในการทดสอบการเรียงสับเปลี่ยน


15

ฉันมีสองชุดข้อมูลและฉันต้องการที่จะทราบว่าพวกเขาแตกต่างกันอย่างมีนัยสำคัญหรือไม่ (นี้มาจาก " สองกลุ่มมีความแตกต่างอย่างมีนัยสำคัญ? ทดสอบที่จะใช้ ")

ฉันตัดสินใจใช้การทดสอบการเปลี่ยนรูปโดยทำสิ่งต่อไปนี้ใน R:

permutation.test <- function(coding, lncrna) {
    coding <- coding[,1] # dataset1
    lncrna <- lncrna[,1] # dataset2

    ### Under null hyphotesis, both datasets would be the same. So:
    d <- c(coding, lncrna)

    # Observed difference
    diff.observed = mean(coding) - mean(lncrna)
    number_of_permutations = 5000
    diff.random = NULL

    for (i in 1:number_of_permutations) {
        # Sample from the combined dataset
        a.random = sample (d, length(coding), TRUE)
        b.random = sample (d, length(lncrna), TRUE)
        # Null (permuated) difference
        diff.random[i] = mean(b.random) - mean(a.random)
    }

    # P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
    pvalue = sum(abs(diff.random) >= abs(diff.observed)) / number_of_permutations
    pvalue
}

อย่างไรก็ตามค่า p ไม่ควรเป็น 0 ตามเอกสารนี้: http://www.statsci.org/smyth/pubs/permp.pdf

คุณแนะนำให้ฉันทำอะไร เป็นวิธีนี้ในการคำนวณค่า p:

pvalue = sum(abs(diff.random) >= abs(diff.observed)) / number_of_permutations

เป็นวิธีที่ดี? หรือจะทำสิ่งต่อไปนี้ดีกว่า?

pvalue = sum(abs(diff.random) >= abs(diff.observed)) + 1 / number_of_permutations + 1

(1) บรรทัดสุดท้ายของคำถามไม่ถูกต้องเนื่องจากไม่รวมวงเล็บที่จำเป็นสำหรับดำเนินการคำนวณที่ต้องการ (รับประกันได้ว่าจะให้ผลลัพธ์ที่มากกว่าซึ่งเป็นไปไม่ได้สำหรับค่า p ใด ๆ ) (2) คุณไม่ได้ทำการทดสอบการเปลี่ยนแปลง: ทั้งสองตัวอย่างและแทบจะไม่ประกอบด้วยพาร์ติชันแบบสุ่มของข้อมูล แต่โดยทั่วไปจะทับซ้อนกัน อย่างเป็นจริงเป็นจัง แต่คำนวณเป็นส่วนประกอบของภายในสหภาพของและ 1a.randomb.randomb.randoma.randomcodinglncrna
whuber

เนื่องจากค่า p-value เป็นชุดของค่าอย่างน้อยที่สุดเท่าที่สังเกตถ้ามีใครประเมินการกระจายการเปลี่ยนแปลงสถิติที่สังเกตได้จะอยู่ใน "พีชคณิต" ที่นับ เมื่อทำการสุ่มมันเป็นเรื่องธรรมดาที่จะนับสถิติที่สังเกตได้จากสถิติการเปลี่ยนแปลงที่พิจารณา (ด้วยเหตุผลที่คล้ายกัน)
Glen_b -Reinstate Monica

คำตอบ:


15

อภิปรายผล

การทดสอบการเปลี่ยนรูปจะสร้างการเรียงสับเปลี่ยนที่เกี่ยวข้องทั้งหมดของชุดข้อมูลคำนวณสถิติการทดสอบที่กำหนดสำหรับการเปลี่ยนแปลงแต่ละครั้งและประเมินสถิติการทดสอบจริงในบริบทของการแจกแจงการเปลี่ยนแปลงที่เกิดขึ้นของสถิติ วิธีทั่วไปในการประเมินก็คือการรายงานสัดส่วนของสถิติที่ (ในบางแง่มุม) "ในฐานะหรือมากกว่านั้นมาก" กว่าสถิติที่เกิดขึ้นจริง ซึ่งมักเรียกว่า "p-value"

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

ยกเว้นว่าชุดข้อมูลนั้นมีขนาดเล็กมาก (โดยทั่วไปจะมีตัวเลขน้อยกว่าประมาณ 20-30 ตัว) หรือสถิติการทดสอบมีรูปแบบทางคณิตศาสตร์ที่ดีโดยเฉพาะไม่สามารถสร้างการเรียงสับเปลี่ยนได้ทั้งหมด (ตัวอย่างที่สร้างการเรียงสับเปลี่ยนทั้งหมดจะปรากฏขึ้นที่การทดสอบการเปลี่ยนรูปใน R. ) ดังนั้นการใช้งานคอมพิวเตอร์ของการทดสอบการเปลี่ยนรูปมักจะเป็นตัวอย่างจากการกระจายการเปลี่ยนแปลง พวกเขาทำเช่นนั้นโดยสร้างการสุ่มเรียงสับเปลี่ยนอิสระและหวังว่าผลลัพธ์จะเป็นตัวอย่างที่เป็นตัวแทนของพีชคณิตทั้งหมด

ดังนั้นตัวเลขใด ๆ (เช่น "p-value") ที่ได้จากตัวอย่างดังกล่าวเป็นเพียงตัวประมาณของคุณสมบัติของการกระจายการเปลี่ยนแปลง เป็นไปได้ทีเดียว - และมักเกิดขึ้นเมื่อเอฟเฟกต์มีขนาดใหญ่ - ค่า p โดยประมาณเป็นศูนย์ ไม่มีอะไรผิดปกติกับสิ่งนั้น แต่มันทำให้เกิดปัญหาที่ถูกทอดทิ้งไปก่อนหน้านี้ทันทีว่าค่า p-value ที่ประเมินอาจแตกต่างจากค่าที่ถูกต้องมากแค่ไหน? เพราะการกระจายการสุ่มตัวอย่างจากสัดส่วน (เช่นประมาณ p-value) เป็นทวินาม, ความไม่แน่นอนนี้ได้รับการแก้ไขด้วยช่วงความเชื่อมั่นทวินาม


สถาปัตยกรรม

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

diff.means <- function(control, treatment) mean(treatment) - mean(control)

เขียนชุดคำสั่งอื่นเพื่อสร้างการเรียงสับเปลี่ยนแบบสุ่มของชุดข้อมูลและใช้สถิติการทดสอบ อินเทอร์เฟซสำหรับสิ่งนี้อนุญาตให้ผู้เรียกส่งสถิติการทดสอบเป็นอาร์กิวเมนต์ มันจะเปรียบเทียบmองค์ประกอบแรกของอาร์เรย์ (สันนิษฐานว่าเป็นกลุ่มอ้างอิง) กับองค์ประกอบที่เหลือ (กลุ่ม "การรักษา")

f <- function(..., sample, m, statistic) {
  s <- sample(sample)
  statistic(s[1:m], s[-(1:m)])
}

การทดสอบการเปลี่ยนรูปจะดำเนินการก่อนโดยการหาสถิติสำหรับข้อมูลจริง (สันนิษฐานว่าที่นี่จะถูกเก็บไว้ในสองอาร์เรย์controlและtreatment) จากนั้นหาสถิติสำหรับการสุ่มเรียงสับเปลี่ยนอิสระมากมาย:

z <- stat(control, treatment) # Test statistic for the observed data
sim<- sapply(1:1e4, f, sample=c(control,treatment), m=length(control), statistic=diff.means)

ตอนนี้คำนวณประมาณการทวินามของ p-value และช่วงความมั่นใจสำหรับมัน วิธีหนึ่งใช้binconfขั้นตอนในตัวในHMiscแพ็คเกจ:

require(Hmisc)                                    # Exports `binconf`
k <- sum(abs(sim) >= abs(z))                      # Two-tailed test
zapsmall(binconf(k, length(sim), method='exact')) # 95% CI by default

ไม่ใช่ความคิดที่ดีที่จะเปรียบเทียบผลลัพธ์กับการทดสอบอื่นแม้ว่าจะเป็นที่ทราบกันดีว่าไม่เหมาะสม: อย่างน้อยคุณอาจได้รับลำดับความสำคัญว่าผลลัพธ์ควรอยู่ที่ใด ในตัวอย่างนี้ (จากวิธีเปรียบเทียบ) นักเรียนมักจะให้ผลการทดสอบที่ดีอยู่แล้ว:

t.test(treatment, control)

สถาปัตยกรรมนี้แสดงอยู่ในสถานการณ์ที่ซับซ้อนมากขึ้นกับการทำงานRรหัสที่ตัวแปรทดสอบไม่ว่าจะทำตามการกระจายเดียวกัน


ตัวอย่าง

100201.5

set.seed(17)
control <- rnorm(10)
treatment <- rnorm(20, 1.5)

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

h <- hist(c(z, sim), plot=FALSE)
hist(sim, breaks=h$breaks)
abline(v = stat(control, treatment), col="Red")

รูป

การคำนวณขีดจำกัดความเชื่อมั่นแบบทวินามส่งผลให้

 PointEst Lower        Upper
        0     0 0.0003688199

00.000373.16e-050.000370.000370.050.010.001


ความคิดเห็น

kยังไม่มีข้อความ k/ยังไม่มีข้อความ(k+1)/(ยังไม่มีข้อความ+1)ยังไม่มีข้อความนั้นน้อยเกินไป ใช้ตัวอย่างที่ใหญ่ขึ้นของการกระจายการเปลี่ยนรูปแทนที่จะเป็นวิธีที่ fudging ประเมินค่า p

10102=1000.0000051.611.7ส่วนต่อล้าน: เล็กกว่ารายงานการทดสอบของนักเรียนเล็กน้อย แม้ว่าข้อมูลจะถูกสร้างขึ้นด้วยเครื่องกำเนิดตัวเลขสุ่มแบบธรรมดาซึ่งจะใช้เหตุผลในการทดสอบ t-test นักเรียนผลการทดสอบการเปลี่ยนรูปแตกต่างจากผลการทดสอบของนักเรียน t เนื่องจากการแจกแจงภายในการสังเกตแต่ละกลุ่มไม่ปกติอย่างสมบูรณ์


บทความโดย Smyth & Phipson ที่อ้างถึงข้างต้นแสดงให้เห็นอย่างชัดเจนว่าเหตุใด k / N จึงเป็นตัวเลือกที่ไม่ดีสำหรับตัวประมาณค่า p โดยสรุปสำหรับระดับนัยสำคัญที่เกี่ยวข้องเช่น alpha = 0.05, P ((k / N) <alpha | H0) อาจมีค่ามากกว่า alpha อย่างน่าประหลาดใจ ซึ่งหมายความว่าการทดสอบการเปลี่ยนแปลงแบบสุ่มโดยใช้ k / N เป็นตัวประมาณค่า p และ 0.05 ตามเกณฑ์การปฏิเสธของมันจะปฏิเสธสมมติฐานว่างมากกว่า 5% ของเวลา! ศูนย์ p-value เป็นกรณีที่รุนแรงของปัญหานี้ - ด้วยเกณฑ์ของ alpha = 0 เราคาดว่าจะไม่ปฏิเสธ null แต่ b / m สามารถเท่ากับศูนย์ภายใต้ null ซึ่งนำไปสู่การปฏิเสธที่ผิด
Trisoloriansunscreen

1
@Tal "ตัวเลือกที่แย่" สำหรับวัตถุประสงค์เฉพาะ สิ่งที่ทำให้เราแตกต่างจากนักสถิติจากคนอื่นคือความเข้าใจในบทบาทของความแปรปรวนในการวิเคราะห์ข้อมูลและการตัดสินใจรวมถึงความสามารถของเราในการวัดความแปรปรวนที่เหมาะสม นั่นคือวิธีการแบบสุดขั้ว (และสนับสนุนโดยนัย) ในคำตอบของฉันที่นี่ เมื่อดำเนินการแล้วจะไม่มีปัญหาดังกล่าวตามที่คุณอธิบายเนื่องจากผู้ใช้ขั้นตอนการเปลี่ยนแปลงนั้นนำไปสู่การเข้าใจข้อ จำกัด และจุดแข็งของมันและจะมีอิสระในการดำเนินการตามวัตถุประสงค์ของเขาหรือเธอ
whuber

13

BMB+1M+1

(B คือจำนวนสุ่มเรียงสับเปลี่ยนที่สถิติมากกว่าหรือเท่ากับที่สังเกตได้และ M คือจำนวนสุ่มเรียงสับเปลี่ยนสุ่มตัวอย่างทั้งหมด)

BM


1
+1 นี่เป็นบทสรุปที่ดีของประเด็นหลักของกระดาษ ฉันขอขอบคุณเป็นอย่างยิ่งที่คุณให้ความสนใจกับความแตกต่างระหว่าง p-value โดยประมาณและ p-value ที่มีการเปลี่ยนแปลงจริง
whuber
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.