问题描述
我有一组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)')
虽然我不确定这个情节是否适合用于结论。