# What is the name of a plot of - log 10 of p values in multiple testing?

Under the null, the p-value is uniformly distributed between 0 and 1. Taking the negative of the log base 10 of many such p-values should follow an exponential distribution. You can show quantiles of their distribution under the null, but more importantly, logging them makes large differences very compelling. I can't remember the name of such a plot though: ## example R code
x <- replicate(100, rnorm(10), simplify=FALSE)
y <- replicate(100, rnorm(10), simplify=FALSE)

lm.sig <- function(x, y) {
coef(summary(lm(y ~ x)))[2, 4]
}

sigs <- mapply(lm.sig, x, y)

plot(-log(sigs, base=10), type='h', xlab='Comparison Index', ylab='-log p value')
abline(h=-log(0.05, base=10), lty=2)
legend('topleft', lty=2, 'Nominal 0.05 error rate')

• I don't know of a specific name of such a plot (though I'd bet it has probably been called by a couple of names before). I'd be inclined to put actual probabilities on the plot (or at the least, include them on the right side). – Glen_b -Reinstate Monica Mar 11 '14 at 21:16
• Agreed. That would be my mistake. The y-axis could be better labeled to represent the log-scale. The problem with presenting untransformed p-values is that 0.05 doesn't look much different from 0.01, nor 0.01 from 0.0001. Complementary log transformations allow such values to "pop". – AdamO Mar 11 '14 at 21:18
• I'm not sure if we misunderstand each other or it's just my own lack of comprehension of part of your response. I have no problem with the use of a log-scale, merely the value labels on the axis. I find it much easier to interpret "0.005" than "-2.3". I'm merely suggesting the use of tick marks and labels for $p$ rather than $\log_{10}p$*, or at least the use of two axes. $\quad\quad$*(while keeping the plot essentially unchanged -- well, I would also plot points rather than lines; what does the length of the line-segment mean on the plot?) – Glen_b -Reinstate Monica Mar 11 '14 at 21:25

Normally there is a shared baseline for the needles, making it conceptually like a bar chart. Your code suggests a baseline of 0 segments(seq(sigs), 0, seq(sigs), -log(sigs, base=10)), but your image looks more like lines centered at 0, segments(seq(sigs), log(sigs, base=10), seq(sigs), -log(sigs, base=10)).
• Thanks for the introduction to type='h' for generating verticle line (e.g. needle plots). However, Manhattan, as Harvey indicated, is the term for multiple testing and p-value context specifically. – AdamO Mar 14 '14 at 22:42