这是一个较老的问题,但我发现它在第一次尝试解释 QQPlots 时很有帮助。我想我会添加到这些答案中,以防将来有更多人偶然发现这个问题。
我发现有点难以理解的是这些点到底是什么?我发现查看代码很容易弄清楚。
这是我改编的一些 R 代码,GWASTools::qqPlot
它在 3 行中实现了 QQPlot:
simpleQQPlot = function (observedPValues) {
plot(-log10(1:length(observedPValues)/length(observedPValues)),
-log10(sort(observedPValues)))
abline(0, 1, col = "red")
}
这是一个例子。您有 5 个 p 值。simpleQQPlot 将从 0 和 1 之间的均匀分布中生成 5 个相应的 p 值。它们将是:.2 .4 .6 .8 和 1。所以 simpleQQPlot 预计您的最低 p 值约为 0.2,而您的最高 p 值约为1. simpleQQPlot 将对您的 pvalues 进行排序,并将每个 pvalues 与相应的生成值配对。所以 .2 将与您的最低 pvalue 配对,1 与您的最高 pvalue 配对,依此类推。然后,绘制这些成对的值(在取负对数之后),X 是生成的 p 值,Y 是成对的观察值。如果您的观察值也是从均匀分布中提取的,那么这些点应该大致位于直线上。由于排序,点总是会单调增加。所以每个后续点都会有一个更大的 X 和一个大于或等于 Y 的值。
所以在上面的原始示例中,第 9,997 个排序的 p 值约为 5.2,但如果遵循均匀分布,则预计约为 4.1。(注意:我实际上不确定上面绘制了多少 p 值——我只是猜到了 10k)。