如何对主题执行富集 p 值

问题描述 投票:0回答:1

我有一个如下所示的数据框。

Category,Total_Genes,UUAGGG_motif
Background,22591,18190
SetA,122,102
SetB,198,182
SetC,90,82

我计算了每个类别中可用主题的数量。现在我想计算三个 p 值(SetA 与背景 - SetB 与背景和 SetC 与背景),看看考虑到每个类别的大小,主题在三个类别中的哪一个类别中得到丰富。

我在 R 中想出了这种方法 - 这是正确的方法吗?预先感谢您。

library(hypeR)

# Number of background genes
N <- 22591
# Number of background genes with motif
K <- 18190

# Set A
n_A <- 122
k_A <- 102

# Set B
n_B <- 198
k_B <- 182

# Set C
n_C <- 90
k_C <- 82

# Perform hypergeometric test for Set A
p_value_A <- 1 - phyper(k_A - 1, K, N - K, n_A, lower.tail = TRUE)

# Perform hypergeometric test for Set B
p_value_B <- 1 - phyper(k_B - 1, K, N - K, n_B, lower.tail = TRUE)

# Perform hypergeometric test for Set C
p_value_C <- 1 - phyper(k_C - 1, K, N - K, n_C, lower.tail = TRUE)
r statistics
1个回答
0
投票

这些测试实施正确,但请注意,它们是片面的,这意味着它们只是测试主题在每个类别中比背景“更普遍”的假设,而不是测试主题的普遍性是“更普遍”的假设。与背景相比,每组之间存在不同 这可能是您想要的,但这将是一种不太传统的解释,如果您对统计显着性应用“传统”阈值,则可能会受到批评。

让我们将您的测试与单侧和两侧费舍尔精确测试进行比较:

对于 A 组,您有 2x2 表格(行上有“主题”,列上有“A 组”):

tabA = matrix(c(N-K - (n_A-k_A), K-k_A, n_A-k_A, k_A), nrow=2) tab_A [,1] [,2] [1,] 4381 20 [2,] 18088 102

然后费舍尔精确检验:
## Two sided test
> fisher.test(tab_A)$p.value
[1] 0.4244181

## One sided test
> fisher.test(tab_A, alternative="greater")$p.value
[1] 0.2301029

## Your p-value
p_value_A <- 1 - phyper(k_A - 1, K, N - K, n_A, lower.tail = TRUE)
> p_value_A
[1] 0.2301029

正如您所看到的,您的超几何测试实际上是单方面的费舍尔精确测试结果,用于与主题相关的基因。双面检验的 p 值大约是两倍大。
如果您打算使用“常规”阈值来实现统计显着性,那么我认为您应该使用该约定来应用双面检验,除非您有非常充分的理由。否则请注意,单侧测试的阈值 0.05 与两侧测试的阈值 0.1 大致相同,因此可以说它为与正常情况相比的差异证据设置了较低的标准。

© www.soinside.com 2019 - 2024. All rights reserved.