การแก้ไขการทดสอบสมมติฐานหลายครั้งด้วย Benjamini-Hochberg, p-values ​​หรือ q-values


22

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

คำถามของฉันคือค่า FDR เหล่านี้จะเรียกว่า " ค่า q " หรือ " แก้ไขค่า p " หรือเป็นอย่างอื่นหรือไม่

แก้ไขปี 2010-07-12:ฉันต้องการอธิบายขั้นตอนการแก้ไขที่เรากำลังใช้อย่างสมบูรณ์ยิ่งขึ้น อันดับแรกเราจัดเรียงผลการทดสอบตามลำดับที่เพิ่มขึ้นโดยใช้ค่า p ดั้งเดิมที่ไม่ได้รับการแก้ไข จากนั้นเราวนซ้ำในรายการโดยคำนวณสิ่งที่ฉันได้ตีความว่าเป็น "FDR ที่คาดไว้ถ้าเราปฏิเสธสมมติฐานว่างสำหรับสิ่งนี้และการทดสอบทั้งหมดก่อนหน้านี้ในรายการ" โดยใช้การแก้ไข BH ด้วยอัลฟาเท่ากับค่าที่สังเกต p-value ที่ไม่ได้แก้ไขสำหรับการวนซ้ำตามลำดับ จากนั้นเราจึงรับสิ่งที่เราเรียกว่า "q-value" ซึ่งเป็นค่าสูงสุดของค่าที่ถูกแก้ไขก่อนหน้านี้ (FDR ที่การวนซ้ำ i - 1) หรือค่าปัจจุบัน (ที่ i) เพื่อรักษา monotonicity

ด้านล่างเป็นรหัสไพ ธ อนบางตัวที่แสดงถึงขั้นตอนนี้:

def calc_benjamini_hochberg_corrections(p_values, num_total_tests):
    """
    Calculates the Benjamini-Hochberg correction for multiple hypothesis
    testing from a list of p-values *sorted in ascending order*.

    See
    http://en.wikipedia.org/wiki/False_discovery_rate#Independent_tests
    for more detail on the theory behind the correction.

    **NOTE:** This is a generator, not a function. It will yield values
    until all calculations have completed.

    :Parameters:
    - `p_values`: a list or iterable of p-values sorted in ascending
      order
    - `num_total_tests`: the total number of tests (p-values)

    """
    prev_bh_value = 0
    for i, p_value in enumerate(p_values):
        bh_value = p_value * num_total_tests / (i + 1)
        # Sometimes this correction can give values greater than 1,
        # so we set those values at 1
        bh_value = min(bh_value, 1)

        # To preserve monotonicity in the values, we take the
        # maximum of the previous value or this one, so that we
        # don't yield a value less than the previous.
        bh_value = max(bh_value, prev_bh_value)
        prev_bh_value = bh_value
        yield bh_value

การอ้างอิงของคุณเกี่ยวกับค่า q ควรเป็นprojecteuclid.org/…
robin girard

ขั้นตอน Benjamini-Hochberg ไม่ได้สำหรับการคำนวณ FDR แต่เป็นสำหรับการควบคุม FDR (ทำให้มันอยู่ภายใต้เกณฑ์ที่กำหนดไว้ล่วงหน้า)
robin girard

คำถามของคุณนั้นยากที่จะเข้าใจ "อ้างอิงถึง" หมายความว่าอย่างไร
robin girard

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

คำตอบ:


17

อย่างที่โรบินพูดคุณมีวิธีของเบนจามินิ - โฮชเบิร์กย้อนหลัง ด้วยวิธีการนั้นคุณตั้งค่าสำหรับ Q (ตัวพิมพ์ใหญ่ Q; FDR ที่ต้องการสูงสุด) จากนั้นเรียงลำดับการเปรียบเทียบของคุณเป็นสองกอง เป้าหมายคือไม่เกิน Q% ของการเปรียบเทียบในกอง "ค้นพบ" เป็นเท็จและอย่างน้อย 100% -Q% เป็นจริง

หากคุณคำนวณค่าใหม่สำหรับการเปรียบเทียบแต่ละครั้งซึ่งเป็นค่า Q ที่การเปรียบเทียบนั้นเพิ่งจะถูกพิจารณาว่าเป็นการค้นพบค่าใหม่เหล่านั้นคือค่า q (ตัวพิมพ์เล็ก q, ดูลิงก์ไปยังกระดาษโดย John Storey ในคำถามเดิม)


เราเรียงลำดับผลลัพธ์การทดสอบตามลำดับที่เพิ่มขึ้นด้วยค่า p เดิมที่ยังไม่ได้แก้ไขแล้ววนซ้ำรายการคำนวณ FDR ที่คาดไว้หากเราปฏิเสธสมมติฐานว่างสำหรับการทดสอบนี้และการทดสอบทั้งหมดก่อนหน้าในรายการโดยใช้ BH การแก้ไขด้วยการใช้อัลฟ่าเท่ากับค่า p ที่ตรวจพบและไม่ถูกแก้ไข จากนั้นเราจึงรับสิ่งที่เราเรียกว่า "q-value" ซึ่งเป็นค่าสูงสุดของค่าที่ถูกแก้ไขก่อนหน้านี้ (FDR ที่การวนซ้ำi - 1) หรือค่าปัจจุบัน (at i) เพื่อรักษา monotonicity เสียงนี้เหมือนขั้นตอนที่คุณอธิบายไว้ในย่อหน้าที่สองหรือไม่?
gotgenes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.