这是一个比较老的问题,但是我发现它在尝试首次解释QQPlot时很有用。我以为我会补充这些答案,以防将来有更多人偶然发现此问题。
我发现有些棘手的问题是,这些要点到底是什么?我发现查看代码可以很容易地弄清楚。
这是我改编而成的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值约为0.2 1. simpleQQPlot将对您的p值进行排序,并将每个p值与相应的生成值配对。因此,.2将与您的最低pvalue配对,1与您的最高pvalue配对,依此类推。然后,绘制这些配对值(取负对数后),其中X为生成的p值,Y为配对的观测值。如果您的观测值也从正态分布中拉出,则这些点应大致位于直线上。由于排序,这些点将始终单调增加。因此,每个后续点将具有更大的X和大于或等于的Y。
因此,在上面的原始示例中,第9,997个排序的p值约为5.2,但如果遵循正态分布,则预计约为4.1。(注意:我实际上不确定上面绘制了多少p值-我只是猜到了10k)。