Written and maintained by CASRAI Editorial Board
Last updated
A normal P-P plot (probability-probability plot) is a graphical goodness-of-fit diagnostic that evaluates whether an empirical dataset conforms to a theoretical normal distribution by plotting observed cumulative proportions against expected cumulative normal probabilities. Both axes are bounded between 0 and 1, creating a coordinate space where normally distributed data align along the 45-degree reference line y = x. While both P-P plots and quantile-quantile (Q-Q) plots assess distributional assumptions, the normal P-P plot is specifically sensitive to departures in the middle and shoulders of the distribution, making it an essential diagnostic for checking regression residual normality in empirical research.
Definition
A normal probability-probability (P-P) plot is a bivariate scatterplot used in exploratory data analysis to evaluate how closely an empirical continuous distribution follows a theoretical normal distribution with specified parameters μ (mean) and σ (standard deviation). In this graphical method, each ordered sample observation is mapped to two cumulative probabilities: the observed cumulative proportion derived from its sample rank and the expected cumulative probability calculated from the standard normal cumulative distribution function (CDF). Plotted across [0, 1] on both axes, observations from a normal distribution follow the 45-degree diagonal identity line, while departures such as skewness, platykurtic dispersion, or leptokurtic clustering manifest as distinct curvilinear patterns.
Formula and Plotting Positions
Constructing a normal P-P plot requires two probability calculations for each observation in a sorted sample x_{(1)} ≤ x_{(2)} ≤ … ≤ x_{(n)}:
- Expected Cumulative Normal Probability (X-axis): Each observation x_{(i)} is standardized into a z-score using sample mean x̄ and sample standard deviation s:
z_i = (x_{(i)} – x̄) / s
where x̄ = (1 / n) Σ x_i and s = √[(1 / (n – 1)) Σ (x_i – x̄)²]. The expected theoretical probability is obtained from the standard normal cumulative distribution function Φ(z_i):
Φ(z_i) = (1 / √(2π)) ∫_{-∞}^{z_i} e^{-t² / 2} dt - Observed Cumulative Empirical Proportion (Y-axis): To avoid forcing the upper observation to 1.0, continuous plotting positions p_i are used:
- Blom’s Transformation (Default in IBM SPSS): p_i = (i – 3/8) / (n + 1/4) = (i – 0.375) / (n + 0.25). Blom’s formula provides an optimal linear approximation to the expected values of normal order statistics.
- Rankit Transformation (Hazen): p_i = (i – 1/2) / n = (i – 0.5) / n
- Tukey’s Transformation: p_i = (i – 1/3) / (n + 1/3)
- Van der Waerden Transformation: p_i = i / (n + 1)
Each point is plotted as (X_i, Y_i) = (Φ(z_i), p_i). Under perfect normality, Φ(z_i) = p_i, placing observations on the diagonal line from (0, 0) to (1, 1).
Worked Example with Arithmetic
Consider an experimental dataset of n = 5 measurements: 12, 15, 18, 20, and 25.
Sample Statistics:
Mean: x̄ = (12 + 15 + 18 + 20 + 25) / 5 = 18.0000
Sum of squared deviations: (-6)² + (-3)² + 0² + 2² + 7² = 36 + 9 + 0 + 4 + 49 = 98.0000
Sample variance: s² = 98.0000 / 4 = 24.5000; Standard deviation: s = √(24.5000) = 4.9497
| Rank (i) | Value (x_{(i)}) | Standardized z | Expected Normal Prob Φ(z) | Observed Blom Prob p_i | Discrepancy (p_i – Φ(z)) | Plot Coordinate |
|---|---|---|---|---|---|---|
| 1 | 12.0 | (12 – 18) / 4.9497 = -1.2122 | 0.1127 | (1 – 0.375) / 5.25 = 0.1190 | +0.0063 | (0.1127, 0.1190) |
| 2 | 15.0 | (15 – 18) / 4.9497 = -0.6061 | 0.2722 | (2 – 0.375) / 5.25 = 0.3095 | +0.0373 | (0.2722, 0.3095) |
| 3 | 18.0 | (18 – 18) / 4.9497 = 0.0000 | 0.5000 | (3 – 0.375) / 5.25 = 0.5000 | 0.0000 | (0.5000, 0.5000) |
| 4 | 20.0 | (20 – 18) / 4.9497 = +0.4041 | 0.6569 | (4 – 0.375) / 5.25 = 0.6905 | +0.0336 | (0.6569, 0.6905) |
| 5 | 25.0 | (25 – 18) / 4.9497 = +1.4142 | 0.9214 | (5 – 0.375) / 5.25 = 0.8810 | -0.0404 | (0.9214, 0.8810) |
The coordinates (0.1127, 0.1190), (0.2722, 0.3095), (0.5000, 0.5000), (0.6569, 0.6905), and (0.9214, 0.8810) track the reference diagonal line closely. The maximum discrepancy of 0.0404 reflects typical random variation in small samples.
P-P Plot vs Q-Q Plot: When to Use Which Diagnostic
Although both graphical techniques evaluate distributional form, normal P-P plots and normal Q-Q plots differ fundamentally:
- Measurement Space: A normal P-P plot graphs cumulative probabilities bounded in [0, 1] × [0, 1]. A normal Q-Q plot graphs quantiles in original units or standard deviation units on an unbounded scale (-∞, +∞).
- Distributional Sensitivity: P-P plots are most sensitive to departures in the center of the distribution where probability density is highest. Q-Q plots are most sensitive to departures in the distribution tails.
- Diagnostic Selection: Use a normal P-P plot when assessing central clustering and symmetry, particularly for linear model residuals. Use a Q-Q plot when diagnosing tail behavior, extreme kurtosis, or outliers.
| Diagnostic Dimension | Normal P-P Plot | Normal Q-Q Plot |
|---|---|---|
| Axes Scale | Probabilities: [0, 1] × [0, 1] | Quantiles: Original units or z-scores (-∞, +∞) |
| Maximum Sensitivity | Center and shoulders (modal density) | Extreme tails and distribution edges |
| Outlier Detection | Low (compressed near 0 and 1 asymptotes) | High (diverges distinctly from reference line) |
| Scale Invariance | Naturally scale-free | Scale-dependent unless standardized |
| Primary Application | Verifying regression residual symmetry | Screening for heavy tails, kurtosis, and outliers |
Interpretation and Reading Guidance
Interpreting a normal P-P plot requires examining how plotted points deviate geometrically from the 45-degree reference line:
| Observed Curve Shape | Distributional Violation | Statistical Interpretation |
|---|---|---|
| Points follow diagonal line tightly | None (Normality supported) | Sample cumulative distribution aligns with theoretical normal CDF across all percentiles. |
| Sigmoidal curve (S-shaped: crosses diagonal from above in center) | Platykurtic (Light tails) | Distribution has a flatter peak and lighter tails than normal; variance is spread across the shoulders. |
| Inverted Sigmoidal curve (crosses diagonal from below in center) | Leptokurtic (Heavy tails) | Distribution has a sharper central peak and heavier tails than normal; values cluster tightly around the mean. |
| Concave upward bow (points sag below diagonal in middle) | Positive Skewness (Right-skewed) | Data cluster below the mean with an elongated upper tail; observed percentiles lag behind expected normal percentiles. |
| Convex downward arch (points arch above diagonal in middle) | Negative Skewness (Left-skewed) | Data cluster above the mean with an elongated lower tail; observed percentiles lead expected normal percentiles. |
| Stepped horizontal or vertical segments | Discreteness / Granularity | Continuous normality is violated due to coarse rounding, repeated discrete scores, or severe floor/ceiling effects. |
Assumptions and Common Mistakes
To avoid misinterpreting normal P-P plots in practice, researchers should avoid four common pitfalls:
- Testing the Raw Dependent Variable Instead of Model Residuals: In ordinary least squares regression and ANOVA, normality is assumed for model residuals (ε_i = Y_i – Ŷ_i), not the raw response variable Y. Testing the marginal distribution of Y can lead to erroneous conclusions when residuals are normally distributed. See our guides on assumptions of simple regression and running multiple regression in SPSS.
- Expecting Tail Outliers to Be Prominent: Because cumulative probabilities compress toward 0 and 1, severe outliers produce minimal vertical displacement on a P-P plot. Pair P-P plots with Q-Q plots when checking for extreme values.
- Over-Interpreting Small-Sample Wobbles: In small samples (n < 30), random sampling variation causes points to weave naturally around the diagonal. Minor oscillations should not be mistaken for structural departures from normality.
- Relying Solely on Graphical Inspection: P-P plots do not produce formal test statistics or p-values. Corroborate visual inspections with omnibus tests like Shapiro-Wilk, as covered in our guide on how to calculate normality.
How to Report It (APA Style)
When reporting normality checks in APA 7th style, document both visual inspection and confirmatory test statistics:
“Prior to conducting the primary linear regression analysis, the distributional assumptions of the ordinary least squares residuals were evaluated. Visual inspection of the normal P-P plot revealed that the standardized residuals aligned closely with the 45-degree reference line across all cumulative proportions, confirming that the assumption of normally distributed errors was satisfied. A complementary Shapiro-Wilk test corroborated residual normality, W = 0.984, p = .712.”
How to Calculate It in Excel, R, Python, and SPSS
IBM SPSS Statistics
In SPSS, generate a normal P-P plot via Analyze > Descriptive Statistics > P-P Plots. Select the variable, choose Normal under Test Distribution, and select Blom under Fractional Rank Formula. In syntax:
PPLOT
/VARIABLES=score
/FRACTION=BLOM
/DIFF=0
/DIST=NORMAL.
For regression residuals, navigate to Analyze > Regression > Linear, click Plots, and check Normal probability plot under Standardized Residual Plots.
Microsoft Excel
With sorted data in cells A2:A6:
- In cell D1, compute mean:
=AVERAGE(A2:A6); in D2, standard deviation:=STDEV.S(A2:A6); in D3, sample size:=COUNT(A2:A6). - In cell B2, calculate expected normal probability:
=NORM.DIST(A2, $D$1, $D$2, TRUE). Copy down to B6. - In cell C2, calculate Blom observed probability:
=(ROW(A2) - ROW($A$2) + 1 - 0.375) / ($D$3 + 0.25). Copy down to C6. - Insert an XY (Scatter) plot using columns B (X) and C (Y), set axis limits from 0 to 1, and add a diagonal reference line from (0, 0) to (1, 1). See also our walkthrough on running a normality test in Excel.
R (Base R)
x <- c(12, 15, 18, 20, 25)
x_sorted <- sort(x)
n <- length(x_sorted)
p_observed <- (seq_len(n) - 0.375) / (n + 0.25)
p_expected <- pnorm(x_sorted, mean = mean(x), sd = sd(x))
plot(p_expected, p_observed,
main = "Normal P-P Plot",
xlab = "Expected Normal Probability",
ylab = "Observed Cumulative Probability",
xlim = c(0, 1), ylim = c(0, 1),
pch = 19, col = "#2563eb")
abline(0, 1, col = "#dc2626", lty = 2, lwd = 2)
grid()
Python (SciPy and Statsmodels)
import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
import statsmodels.api as sm
data = np.array([12, 15, 18, 20, 25])
probplot = sm.ProbPlot(data, dist=stats.norm, fit=True)
fig = probplot.ppplot(line="45", marker="o", color="#2563eb")
plt.title("Normal P-P Plot")
plt.xlabel("Theoretical Normal Probabilities")
plt.ylabel("Sample Empirical Probabilities")
plt.grid(True, linestyle="--", alpha=0.6)
plt.show()
FAQ
What is the difference between a normal P-P plot and a Q-Q plot?
A normal P-P plot graphs cumulative probabilities on a normalized [0, 1] × [0, 1] scale and is most sensitive to departures occurring in the center and mode of the distribution. A normal Q-Q plot graphs quantiles in original units or standard deviation units on an unbounded scale (-∞, +∞) and is most sensitive to tail thickness, kurtosis, and outliers.
Does a normal P-P plot provide a p-value?
No. A normal P-P plot is a graphical exploratory diagnostic, not a hypothesis test, and does not yield a formal p-value. Researchers evaluate the plot qualitatively or combine it with omnibus tests like Shapiro-Wilk or Anderson-Darling to obtain statistical significance values.
What does a bow-shaped curve indicate on a normal P-P plot?
A bow-shaped curve indicates skewness. If points sag concavely below the 45-degree diagonal line across the middle percentiles, the distribution is positively (right) skewed. If the curve arches convexly above the diagonal line, the distribution is negatively (left) skewed.
Can a normal P-P plot be used for regression residuals?
Yes. Statistical software packages including IBM SPSS routinely generate normal P-P plots of standardized residuals to check the linear regression assumption that error terms are normally distributed. Points clustering along the diagonal line confirm residual normality.
Which plotting position formula should be used for a normal P-P plot?
Blom’s formula, p_i = (i – 0.375) / (n + 0.25), is the standard choice and default in SPSS for normal probability plots because it provides an optimal linear approximation to standard normal order statistics. Other common choices include Rankit (i – 0.5) / n and Van der Waerden i / (n + 1).
Sources
- National Institute of Standards and Technology (NIST) / SEMATECH. (2012). e-Handbook of Statistical Methods. Section 1.3.3.21: Normal Probability Plot; Section 1.3.3.22: Probability Plot; Section 1.3.3.24: Quantile-Quantile Plot. https://www.itl.nist.gov/div898/handbook/eda/section3/eda33q.htm (Read 2026-11-07).
- IBM Corporation. (2023). IBM SPSS Statistics 29.0 Documentation: PPLOT Command Syntax and Fractional Rank Formulas. https://www.ibm.com/docs/en/spss-statistics/29.0.0?topic=pplot-command-additional-features (Read 2026-11-07).
- Statsmodels Development Team. (2024). statsmodels.graphics.gofplots.ProbPlot.ppplot Documentation. https://www.statsmodels.org/stable/generated/statsmodels.graphics.gofplots.ProbPlot.ppplot.html (Read 2026-11-07).
- Blom, G. (1958). Statistical Estimates and Transformed Beta-Variables. John Wiley & Sons.







