I'm studying for an exam in experimental design. I know from previous exams that I will need to construct normal probability plots manually but strangely, this hasn't been mentioned in the literature.

I have been forced forced to rely on less reputable sources to get the gist of it, the method used here seems to reflect the one used in previous exams:


If I summarize:

First you rank all observations according to size, then you determine their cumulative probability via the formula $$p_i=\frac{i-0,5}{n}$$ I don't quite understand the purpose behind this formula but I think it tries to describe the theoretical distribution of the observations, "if" they were perfectly spread out and "if" they followed the normal distribution perfectly.

These values will constitute the y-values for our observations in our plot

Next, we check which z values correspond to our (theoretical) y-values, and plot these on our x-axis.

But if we plot our theoretical p values vs our theoretical z values, wouldn't every single value lie on the line? Shouldn't the actual value of the observations somehow determine there placement in the plot?

  • 3
    $\begingroup$ The essence of this plot is to take observed values and plot them against what would be expected in a sample of the same size from a normal distribution. For that you pair off values your smallest versus the expected smallest, your second smallest versus the expected second smallest, and so on. $(i - 0.5)/n$ as plotting position is one of various conventional choices (see e.g. stata.com/support/faqs/statistics/… and its references), but you need to push that through a normal quantile function (inverse normal cumulative distribution function). $\endgroup$
    – Nick Cox
    Oct 28, 2018 at 11:57
  • $\begingroup$ The plotting positions themselves are uniformly spaced and using them as coordinates would only be a test of a hypothesis of a uniform distribution (although that would still be a useful descriptive plot). I don't know what "the literature" is for you but this is explained in most general statistics texts that are not elementary. en.wikipedia.org/wiki/Normal_probability_plot is a start. $\endgroup$
    – Nick Cox
    Oct 28, 2018 at 12:00
  • $\begingroup$ The URL you cite seems to have the right flavour, although I have not read every word. Note that although $p$ is fine as notation for cumulative probabilities, they aren't P-values in the usual sense of that term. $\endgroup$
    – Nick Cox
    Oct 28, 2018 at 12:04

1 Answer 1


Computation. Consider a normal sample of size $n = 10:$ small enough for easy computation by hand, but not necessarily large enough to make a useful normal probability plot. (Computations below are in R statistical software.)

set.seed(1028);  x = round(rnorm(10, 100, 15), 1)
samp.q = sort(x);  samp.q
[1]  75.9  78.7  83.8 101.9 105.0 107.8 116.3 123.7 128.8 140.5

One style of normal probability plot puts 'Theoretical Quantiles' on the horizontal axis and 'Sample Quantiles' on the vertical axis. As discussed in comments, the theoretical quantiles are the normal quantiles of $(i - .5)/n:$

i = 1:10;  theor.q = qnorm((i-.5)/10);  theor.q
 [1] -1.6448536 -1.0364334 -0.6744898 -0.3853205 -0.1256613
 [6]  0.1256613  0.3853205  0.6744898  1.0364334  1.6448536

The the normal probability plot is:

plot(theor.q, samp.q), pch=19)
abline(v = theor.q, col="green2")

enter image description here

The idea is that when normal data are plotted in this way, points will fall 'nearly' in a straight line. One method of illustrating this intended linearity is to plot the line $y = \bar X + Sx,$ based on the sample mean and standard deviation, through the plotted points. [Generally, we will not know the population mean and variance, so it would not be possible to plot a line based on population parameters. For such a small sample, these two lines may be quite different, so (even if population parameters were known) the line based on sample mean and standard deviation is often a more useful reference line for judging normality.]

 abline(a = mean(x), b = sd(x),  col="red")
 abline(a = 100, b = 15, col="blue", lty="dotted")

enter image description here

Here is the default normal probability plot (also called 'normal quantile-quantile plot') in R; the default reference line passes through the first and third quantiles.

qqnorm(x);  qqline(x)

enter image description here

Intuition. A normal probability plot with Sanple Quantiles on the horizontal axis may be compared to the plot of the Empirical CDF of the sample. (The ECDF jumps up by $1/n$ at each observed data value.) With a large enough sample the ECDF of a sample approximates the CDF of the distribution (red curve).

The left-hand panel below shows an ECDF of a normal sample of size $n = 15.$ Notice that the values plotted on the vertical axis are $1/n, 2/n, \cdots, n/n.$ The CDF of the population from which the sample was drawn is shown as a red curve.

The right-hand panel shows the normal probability plot of same sample. The values on the vertical axis are theoretical quantiles corresponding to $(i-.5)/n,\, i = 1, 2, \dots, n.$ The red reference line is $y = -\frac{\mu}{\sigma} + \frac{x}{\sigma}.$ Roughly speaking, this line may be considered as a "quantile transformation to linearity" of the normal CDF.

Also for reference, grey points correspond to normal probability plots of 20 additional samples from the same normal distribution. Although the points of the normal probability plot of the sample (blue points) do not lie exactly on a straight line, they lie well within the 'cloud' of the normal probability plots of the 20 other normal samples.

enter image description here

Note: R code for the last figure:

set.seed(2018);  n = 15;  mu = 100;  sg = 15
x = rnorm(n, mu, sg)

par(mfrow = c(1,2))
  plot(ecdf(x), col="blue")
    curve(pnorm(x, 100, 15), add=T, col="red", lwd=2)

  qqnorm(x, pch=19, col="blue", datax=T)
  for (j in 1:20) {
    i = 1:n; tq = qnorm((i-.5)/n); sq = sort(rnorm(n,mu,sg))
    points(sq, tq, col="grey") }
      abline(a = -mean(x)/sd(x), b = 1/sd(x), col="red")
par(mfrow = c(1,1))
  • 1
    $\begingroup$ Very helpful. Obvious to you and to many readers that you are giving R code -- but not to all readers, so I suggest you spell that out. $\endgroup$
    – Nick Cox
    Oct 28, 2018 at 19:40
  • 1
    $\begingroup$ Mentioned R once towards the middle, but you're right. Put an additional mention of R right at the start. And another in a note at the end. $\endgroup$
    – BruceET
    Oct 28, 2018 at 19:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.