R 3.1.1中p值的局部FDR

时间:2014-10-06 16:14:12

标签: r

我试图找到一个包来计算Efron的本地FDR进行一系列测试。我有超过1000个协变量,所以多次校正肯定是有序的。

查找本地FDR,请参阅CRAN上不再提供locfdr软件包。知道它被删除的原因吗?这似乎与当地罗斯福的原始出版物密切相关。

我确实找到了fdrtool,但无法从p值计算本地FDR。我发现的其他软件包不适用于3.1.1 - LocalFDR,localFDR,kerfdr,twilight。当然,所有这些包都使用略有不同的方法。即使我能找到他们,可以选择哪个?

1 个答案:

答案 0 :(得分:1)

twilight包可以执行此操作(也在评论中建议)。如下所示,它易于使用,并且在生物传导器中可以获得非常清晰的晕影。

首先我们安装包。

# Install twilight
source("http://bioconductor.org/biocLite.R")
biocLite("twilight")

接下来,我们模拟一些测试分数和p值。

# Simulate p p-values
set.seed(1)
p <- 10000 # Number of "genes"
prob <- 0.2 # Proportion of true alternatives

# Simulate draws from null (=0) or alternatives (=1)
null <- rbinom(p, size = 1, prob = prob) 
# Simulate some t-scores, all non-null genes have an effect of 2
t.val <- (1-null)*rt(p, df = 15) + null*rt(p, df = 15, ncp = 2)
# Compute p-values
p.val <- 2*pt(-abs(t.val), df = 15)

# Plot the results
par(mfrow = c(1,2))
hist(t.val, breaks = 70, col = "grey",
     xlim = c(-10, 10), prob = TRUE, ylim = c(0, .35))
hist(p.val, breaks = 70, prob = TRUE)

Imgur

接下来我们加载库并运行fdr分析:

library(twilight)
ans <- twilight(p.val)

我们看到真实替代比例的估计非常好:

print(1 - ans$pi0)
#[1] 0.1529
print(prob)
#[1] 0.2

包按递增顺序重新排序p值,q值和fdr值,因此我们做了一个技巧来重建原始订单。

o <- order(order(p.val)) 
fdr <- ans$result$fdr[o]
plot(p.val, fdr, pch = 16, col = "red", cex = .2) 

Imgur

最后,我们可以将重要性与真实相反:

table(estimate = fdr < 0.5, truth = as.logical(null))
#        truth
#estimate FALSE TRUE
#   FALSE  7564 1172
#   TRUE    368  896

因此,我们在这个玩具示例中的准确率为84.6%。我希望这有帮助。 twilight函数还包含fdr的引导配置文件,您可以在?twilight中找到该引导配置文件以及其他参考文献。

修改 似乎fdrtool包(在CRAN上)实际上可以从p值计算本地fdr。在我们的例子中,我们执行以下操作:

library("fdrtool")
fdr <- fdrtool(p.val, statistic="pvalue")
fdr$lfdr # The local fdr values