我正在尝试通过GWAS研究创建一个100个对数转换的p值的QQPlot。想法是采用-log(p)将放大最小的p值,以使其更易于查看。 (reference)
我能够轻松地在base e的ggplot2中完成此操作,但是我的PI希望在base 10中看到它。不幸的是,我认为base 10没有内置的分位数功能,因此我写了一个手动(从reference中的代码修改而来)。
但是,这些图形看起来并不完全相同,所以我想知道自己是否正确执行了操作。如果有人能让我知道我的代码是否有意义或者是否有更好的方法,我将不胜感激!
library(tidyverse)
# Simulate 100 p values drawn from a uniform distribution
p.values <- tibble(p = runif(100))
# QQPlot with base e
ggplot(p.values, aes(sample = -log(p))) +
stat_qq(distribution = qexp) +
geom_abline(intercept = 0, slope = 1)
# Theoretical quantile function for -log10(p)
qlog10 <- function(p.values) {
theoretical <- rank(p.values)/length(p.values)
return(-log10(theoretical))
}
# QQplot with base 10
ggplot(p.values, aes(x = qlog10(p), y = -log10(p))) +
geom_point() +
geom_abline(intercept = 0, slope = 1)
由reprex package(v0.2.1)于2019-01-26创建