ggplot2 geom_qq 更改理论数据

问题描述

我有一组pvalues,即0<=pval<=1 我想使用 ggplot2 绘制 qqplot 正如在 documentation 中一样,以下代码将绘制 q_q 图,但是如果我的数据是 pvalues 我希望理论值也是概率 即。 0<=therotical v<=1

df <- data.frame(y = rt(200,df = 5))
p <- ggplot(df,aes(sample = y))
p + stat_qq() + stat_qq_line()

我知道 gaston 包中的 qqplot.pvalues 可以完成这项工作,但情节不像 ggplot 版本那样可定制。 在 gaston 包中,理论数据绘制为 -log10((n:1)/(n + 1)),其中 n 是 pvalues 的数量。如何将这些值作为理论数据传递给 ggplot?

解决方法

假设你有一些 p 值,比如正态分布,你可以手动创建它

library(ggplot2)
data <- data.frame(outcome = rnorm(150))
data$pval <- pnorm(data$outcome)
data <- data[order(data$pval),]

ggplot(data = data,aes(y = pval,x = pnorm(qnorm(ppoints(nrow(data)))))) +
         geom_point() +
         geom_abline(slope = 1) + 
         labs(x = 'theoraetical p-val',y = 'observed p-val',title = 'qqplot (pval-scale)')

虽然我不确定这个情节是否适合用于结论。