SGoF 包:根据原始 p 值对调整后的 p 值进行排序
SGoF package: order the adjusted pvalues based on the original pvalues
我试图从生物学角度理解函数 SGoF (R package SGoF) 输出的调整后的 p 值。
我的输入是来自chi-square test on allele count的p值。因为我的实际数据集包含 100,000 个 SNP,所以我必须调整 pvalues 以进行多重比较。我选择了顺序拟合优度方法并应用于我的数据。
问题是函数 SGoF 以递增顺序输出 p 值,因此尽管命名了向量,但我丢失了重要信息(SNP 的顺序)。
这是我仅针对 10 个 SNP 的假装代码:
library("sgof")
# create SNP_ID
SNP_ID <- paste("SNP", rep(1:10, 1))
# create original pvalues
original_pvalues <- c(0.7547327676, 0.7759443024, 0.7892817386, 0.5900607320, 0.7085460882, 0.0004190683, 0.6020188578, 0.7898982175, 0.2780472452, 0.6160432682)
# give an ID to each pvalue
names(original_pvalues) <- SNP_ID
# adjust pvalues based on sequential goodness of fit (R package sgof)
sgof_res <- SGoF(original_pvalues, alpha = 0.05, gamma = 0.05)
# oh no, the adjusted pvalues are ordered by increasing values, see:
sgof_res$Adjusted.pvalues
# I would like a table like this:
corresponding_table <- cbind(SNP_ID, original_pvalues, sgof_res$Adjusted.pvalues)
目前对应的table没有生物学意义。我如何创建具有以下行的相应 table:SNP_ID、原始 pvalue 和调整后的 pvalue?
查看SGoF
函数的代码,我们会看到它正在对pvalues进行排序,并输出排序后的结果。但是,我们也可以看到它输出 sgof_res$data
与排序后的原始 pvalues 的顺序相同:
all(sgof_res$data == sort(original_pvalues))
# [1] TRUE
所以我们可以执行以下操作以获得预期的输出:
data.frame(SNP_ID = names(sort(original_pvalues)),
original_pvalues = sort(original_pvalues),
Adjusted.pvalues = sgof_res$Adjusted.pvalues)
# SNP_ID original_pvalues Adjusted.pvalues
# SNP 6 SNP 6 0.0004190683 0.7547328
# SNP 9 SNP 9 0.2780472452 0.7759443
# SNP 4 SNP 4 0.5900607320 0.7898982
# SNP 7 SNP 7 0.6020188578 1.0000000
# SNP 10 SNP 10 0.6160432682 1.0000000
# SNP 5 SNP 5 0.7085460882 1.0000000
# SNP 1 SNP 1 0.7547327676 1.0000000
# SNP 2 SNP 2 0.7759443024 1.0000000
# SNP 3 SNP 3 0.7892817386 1.0000000
# SNP 8 SNP 8 0.7898982175 1.0000000
我试图从生物学角度理解函数 SGoF (R package SGoF) 输出的调整后的 p 值。
我的输入是来自chi-square test on allele count的p值。因为我的实际数据集包含 100,000 个 SNP,所以我必须调整 pvalues 以进行多重比较。我选择了顺序拟合优度方法并应用于我的数据。
问题是函数 SGoF 以递增顺序输出 p 值,因此尽管命名了向量,但我丢失了重要信息(SNP 的顺序)。
这是我仅针对 10 个 SNP 的假装代码:
library("sgof")
# create SNP_ID
SNP_ID <- paste("SNP", rep(1:10, 1))
# create original pvalues
original_pvalues <- c(0.7547327676, 0.7759443024, 0.7892817386, 0.5900607320, 0.7085460882, 0.0004190683, 0.6020188578, 0.7898982175, 0.2780472452, 0.6160432682)
# give an ID to each pvalue
names(original_pvalues) <- SNP_ID
# adjust pvalues based on sequential goodness of fit (R package sgof)
sgof_res <- SGoF(original_pvalues, alpha = 0.05, gamma = 0.05)
# oh no, the adjusted pvalues are ordered by increasing values, see:
sgof_res$Adjusted.pvalues
# I would like a table like this:
corresponding_table <- cbind(SNP_ID, original_pvalues, sgof_res$Adjusted.pvalues)
目前对应的table没有生物学意义。我如何创建具有以下行的相应 table:SNP_ID、原始 pvalue 和调整后的 pvalue?
查看SGoF
函数的代码,我们会看到它正在对pvalues进行排序,并输出排序后的结果。但是,我们也可以看到它输出 sgof_res$data
与排序后的原始 pvalues 的顺序相同:
all(sgof_res$data == sort(original_pvalues))
# [1] TRUE
所以我们可以执行以下操作以获得预期的输出:
data.frame(SNP_ID = names(sort(original_pvalues)),
original_pvalues = sort(original_pvalues),
Adjusted.pvalues = sgof_res$Adjusted.pvalues)
# SNP_ID original_pvalues Adjusted.pvalues
# SNP 6 SNP 6 0.0004190683 0.7547328
# SNP 9 SNP 9 0.2780472452 0.7759443
# SNP 4 SNP 4 0.5900607320 0.7898982
# SNP 7 SNP 7 0.6020188578 1.0000000
# SNP 10 SNP 10 0.6160432682 1.0000000
# SNP 5 SNP 5 0.7085460882 1.0000000
# SNP 1 SNP 1 0.7547327676 1.0000000
# SNP 2 SNP 2 0.7759443024 1.0000000
# SNP 3 SNP 3 0.7892817386 1.0000000
# SNP 8 SNP 8 0.7898982175 1.0000000