Đưa ra một danh sách các giá trị p được tạo ra từ các thử nghiệm độc lập, được sắp xếp theo thứ tự tăng dần, người ta có thể sử dụng thủ tục Stewamini-Hochberg để điều chỉnh nhiều thử nghiệm . Đối với mỗi giá trị p, quy trình Stewamini-Hochberg cho phép bạn tính Tỷ lệ khám phá sai (FDR) cho từng giá trị p. Nghĩa là, tại mỗi "vị trí" trong danh sách giá trị p được sắp xếp, nó sẽ cho bạn biết tỷ lệ nào trong số đó có khả năng là sự từ chối sai của giả thuyết khống.
Câu hỏi của tôi là, những giá trị FDR này được gọi là " giá trị q " hay " giá trị p được sửa " hay là một cái gì đó hoàn toàn khác?
EDIT 2010-07-12: Tôi muốn mô tả đầy đủ hơn về quy trình sửa lỗi mà chúng tôi đang sử dụng. Đầu tiên, chúng tôi sắp xếp các kết quả thử nghiệm theo thứ tự tăng dần theo giá trị p gốc chưa được sửa của chúng. Sau đó, chúng tôi lặp lại danh sách, tính toán những gì tôi đã diễn giải là "FDR dự kiến nếu chúng tôi từ chối giả thuyết khống cho điều này và tất cả các thử nghiệm trước trong danh sách", sử dụng hiệu chỉnh BH, với alpha bằng với quan sát , giá trị p chưa được hiệu chỉnh cho lần lặp tương ứng. Sau đó, chúng tôi lấy, như cái mà chúng tôi đã gọi là "giá trị q" của chúng tôi, tối đa của giá trị được sửa trước đó (FDR ở lần lặp i - 1) hoặc giá trị hiện tại (tại i), để duy trì tính đơn điệu.
Dưới đây là một số mã Python đại diện cho thủ tục này:
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