Reporting results

How to Report the Durbin-Watson Test in APA 7 (With Example)

Report Durbin-Watson d and p value in APA 7. What independent and autocorrelated residuals mean, where to find it in SPSS, and how to fix violations.

The Durbin-Watson test checks one of the assumptions of linear regression: that observations in a meaningful sequence (time series, repeated sessions, or measured occasions) have independent residuals. Durbin-Watson matters only when rows have a natural order. It is reported briefly, usually in an assumptions paragraph, but its result tells you whether the standard errors of your slope coefficients are trustworthy.

When the Durbin-Watson test applies

Durbin-Watson is only meaningful when your data are in a meaningful sequence: time series (daily sales, hourly temperature), repeated measures over sessions, or a time-ordered experiment. If rows are in arbitrary order (a cross-sectional survey, respondents from an online form), running the test gives nonsense and should not be reported. The test assumes that residual at time t depends on residual at time t − 1 but not earlier, and that the X variables are fixed (not random).

What you need before you write a single word

  1. The Durbin-Watson d statistic: a single number, typically between 0 and 4.
  2. A two-sided p value to interpret it. Sources:
    • The exact Durbin-Watson p value from Imhof's distribution (available in KyroStat, and in R as lmtest::dwtest(..., alternative = "two.sided"), which uses an exact algorithm of its own).
    • The Breusch-Godfrey test for lag-1 autocorrelation (gives a direct p value; available in statsmodels, R lmtest::bgtest, or SAS; note Stata estat dwatson gives only d, no p).
    • Savin-White critical bounds dL and dU, if tables are available for your sample size and number of predictors.
  3. The lag-1 residual autocorrelation r₁ (optional but helpful): the correlation between each residual and the previous one.
  4. Confirmation that observations are in a meaningful order.

The APA 7 format template

Report the Durbin-Watson statistic with its exact p value; optionally add Breusch-Godfrey as a supplement (keep them separate):

When residuals are independent:

The residuals were independent, d = 0.XX, p = .XXX (exact, two-sided, Imhof). Breusch-Godfrey LM(1) = X.XX, p = .XXX.

Building the table for this? Eight APA 7 tables in Word, formatted and ready to fill, are in the Rescue Vault, $27 →

When autocorrelation is present:

The residuals were positively autocorrelated, d = 0.XX, p < .001 (exact, two-sided, Imhof), lag-1 r = .XX. Breusch-Godfrey LM(1) = X.XX, p < .001. Standard errors were computed using Newey-West HAC covariance to adjust.

Formatting rules reviewers actually check:

  • Italicize d, p, and r.
  • Use a leading zero for d (it ranges 0 to 4): write 0.85, not .85. Drop leading zero only for statistics with maximum 1 (p, r, R², beta).
  • Say "exact, two-sided, Imhof" or "Breusch-Godfrey LM(1)" to identify the test.
  • If p < .001, write p < .001, not p = .000.
  • Say what the result means: independent or not, and what you did about it.

Worked examples

Independent residuals (assumption holds). A simple linear regression predicting sales from monthly marketing spend over 40 months (N = 40):

A linear regression predicting sales from marketing spend showed that the residuals were independent, d = 1.83, p = .563 (exact, two-sided, Imhof). Breusch-Godfrey LM(1) = 0.02, p = .894. Standard regression inference was appropriate.

Details: F(1, 38) = 18.69, p < .001, adjusted R² = .31; marketing spend was a significant positive predictor (b = 1.93, SE = 0.45, p < .001). Lag-1 autocorrelation r = .02; the approximation d ≈ 2(1 − .0232) ≈ 1.95 (using the unrounded r).

Autocorrelated residuals (assumption violated). A regression predicting energy use from temperature over 40 months:

A regression predicting energy use from temperature revealed positively autocorrelated residuals, d = 1.01, p < .001 (exact, two-sided, Imhof), lag-1 r = .47. Breusch-Godfrey LM(1) = 8.60, p = .003. Standard errors were recomputed using Newey-West HAC covariance (maxlags = 3) to adjust for serial correlation.

Details: F(1, 38) = 289.13, p < .001, adjusted R² = .88. Temperature's effect was significant with both OLS (b = 1.26, SE = 0.074) and HAC standard errors (SE = 0.095, about 29% larger), so the substantive conclusion held. Using the unrounded r = .474, the approximation d ≈ 2(1 − 0.474) = 1.052.

The Durbin-Watson statistic and its interpretation

The statistic d is defined as:

d = Σ(eₜ − eₜ₋₁)² / Σeₜ²

where eₜ is the residual at observation t. Its range is 0 to 4:

  • d ≈ 2: residuals are independent (desired).
  • d < 2: positive autocorrelation (errors tend to have the same sign in sequence).
  • d > 2: negative autocorrelation (errors tend to alternate in sign).

The lag-1 residual autocorrelation r₁ relates to d by the approximation d ≈ 2(1 − r₁).

How to get these numbers in SPSS

  1. Run the regression: Analyze > Regression > Linear.
  2. Request d: Click Statistics, check "Durbin-Watson." It appears in the Model Summary table, last column.
  3. Get a p value for lag-1 autocorrelation (approximate): SPSS prints no p for d. The exact Durbin-Watson p and the Breusch-Godfrey test need R or Python; in SPSS you can approximate:
    • Save unstandardized residuals (Analyze > Regression > Linear, Save > Unstandardized).
    • Create a lag: Transform > Create Time Series, lag the residual by 1.
    • Correlate the residual with its lag: Analyze > Correlate > Bivariate, record the Pearson correlation and its p value.
    • Alternatively, use Python (statsmodels acorr_breusch_godfrey) or R (lmtest::bgtest) to compute the Breusch-Godfrey test.

Mistakes reviewers catch

  • Running it on unordered data. If rows are in arbitrary order (a survey), the test is nonsensical and should not be reported. Only report if the data have a natural sequence.
  • Confusing d with a p value. d = 1.2 is not p = 1.2; it is a point estimate needing a statistical test (exact Durbin-Watson or Breusch-Godfrey).
  • Ignoring autocorrelation. If p < .05, continuing with ordinary standard errors is a mistake; adjust with Newey-West, add lags, or use GLS.
  • Treating d > 2 as good. Negative autocorrelation (d > 2) violates the assumption just as much as positive; do not assume it is safe.
  • Pairing d with Breusch-Godfrey p value. Report the two separately; use the exact Durbin-Watson p value (Imhof) with d, or use Breusch-Godfrey as a supplement.

What to do if residuals are autocorrelated

If the exact Durbin-Watson p < .05 or Breusch-Godfrey p < .05, the residuals are autocorrelated. With positive autocorrelation, OLS standard errors are too narrow and confidence intervals too tight. Three solutions:

1. Newey-West HAC covariance (simplest for most data)

Recompute standard errors using heteroskedasticity- and autocorrelation-consistent (HAC) covariance. Choose a lag window; a common formula is maxlags = floor(4(n/100)^(2/9)). For N = 40, this gives 3.

In Python (statsmodels):

robust_fit = fit.get_robustcov_results(cov_type='HAC', maxlags=3, use_t=True)

In R:

library(sandwich)
library(lmtest)
coeftest(model, vcov. = NeweyWest(model, lag = 3, prewhite = FALSE))

In SPSS, this requires custom code; not available in the standard interface.

Example: In the energy-use regression, OLS SE = 0.074; HAC SE = 0.095 (about 29% larger). Both lead to rejection of no effect, so the conclusion is robust.

2. Add lagged dependent variables

Include previous values of the outcome as predictors (e.g., yₜ₋₁). This often absorbs autocorrelation. Be aware: this complicates interpretation and requires longer time series. With a lagged outcome in the model, d is biased toward 2 and unreliable; use Breusch-Godfrey instead.

3. Generalized Least Squares (GLS) or ARIMA

If autocorrelation is strong and the model is autoregressive, fit an AR(p) or ARIMA(p, 0, 0) model, or use GLS with an AR(1) error structure. This is more complex and usually reserved for specialized time-series settings.

For most applied research, Newey-West HAC covariance is the easiest and most defensible choice.

Also useful for the write-up (affiliate links): Proofreading for your thesis or paper (20% off with code PAP20): Paperpal

Frequently asked questions

Does every regression need Durbin-Watson? No. Only report it if observations are in a meaningful order (time series, repeated sessions, or sorted by time). Surveys with rows in arbitrary order do not need it.

What lag should I use with Breusch-Godfrey or HAC? Breusch-Godfrey with lag 1 tests for AR(1) structure. For HAC, the formula maxlags = floor(4(n/100)^(2/9)) is widely used.

Can I use Savin-White bounds instead of the exact p-value? Yes, if your sample size and number of predictors are in published tables. The exact Durbin-Watson p value (Imhof) is preferable if available.

Why is my d value so far from 2? Strong positive autocorrelation pushes d toward 0. Check:

  1. Is the natural order of rows correct? If you accidentally sorted by an unrelated column, d will be nonsense.
  2. Are there omitted variables that covary over time?
  3. Is the functional form wrong (should it be nonlinear or include interactions)?

My p value is .049, just under .05. Is autocorrelation really a problem? Yes, statistically, by the criterion p < .05. But effect sizes matter: a small positive autocorrelation may have little practical impact on inference. Use both the p value and the magnitude of r₁ or d to decide.

Do I cite Durbin & Watson or Breusch and Godfrey? Both exist: Durbin & Watson (1950, 1951) on the original test; Breusch (1978) and Godfrey (1978) are separate papers on their LM test generalization. Cite the test you use. For Newey-West covariance, cite Newey & West (1987).

Before you report: did the model's other assumptions hold?

Durbin-Watson addresses independence only. Also check:

  • Linearity: Plot residuals vs. fitted values (should be random scatter, not curved).
  • Normality of residuals: Q-Q plot or Shapiro-Wilk test.
  • Homoscedasticity: Breusch-Pagan test or residual plots (variance should not grow with fitted values).
  • No multicollinearity (if multiple predictors): Check VIF.

For a full regression assumptions guide, see how to check statistical test assumptions. For reporting the main regression, see how to report a simple linear regression or how to report a multiple regression.

Run the examples yourself in R

R's lmtest package has both dwtest() (exact Durbin-Watson p-value; set alternative = "two.sided") and bgtest() (Breusch-Godfrey):

library(lmtest)
library(sandwich)

# Independent residuals example
data_indep <- data.frame(
  month = 1:40,
  marketing_spend_k = c(15.5, 14.5, 17.6, 15.4, 12.9, 16.4, 20.2, 18.8, 12.2, 9.9, 12.5, 15.2,
                      5.7, 14.1, 10.0, 12.1, 12.8, 13.7, 16.6, 19.2,
                      14.5, 20.5, 12.3, 16.4, 18.6, 15.4, 12.0, 11.3,
                      13.2, 15.9, 11.0, 14.2, 14.4, 17.2, 15.9, 16.4,
                      12.4, 14.5, 18.1, 21.0),
  sales_k = c(42, 63, 68, 59, 49, 52, 74, 75, 60, 51, 49, 42, 32, 55, 31, 49, 50, 54,
            45, 55, 47, 54, 60, 50, 62, 50, 58, 54, 53, 36, 44, 55, 58,
            51, 68, 44, 41, 58, 58, 80)
)
model_indep <- lm(sales_k ~ marketing_spend_k, data = data_indep)
summary(model_indep)
dwtest(model_indep, alternative = "two.sided")   # exact two-sided p
bgtest(model_indep, order = 1)                   # Breusch-Godfrey LM(1)

# Autocorrelated residuals example
data_auto <- data.frame(
  month = 1:40,
  temperature_c = c(12, 14, 13, 7, 16, 15, 11, 16, 16, 16, 16, 18, 14, 16, 16, 20, 19, 18,
                  16, 19, 21, 20, 27, 26, 12, 15, 23, 22, 25, 26, 34,
                  22, 25, 35, 30, 31, 26, 22, 30, 30),
  energy_use = c(58, 60, 61, 52, 65, 65, 62, 66, 70, 73, 73, 71, 69, 69, 72, 72, 75, 73,
               65, 69, 73, 74, 78, 74, 61, 64, 76, 78, 75, 79, 90, 77,
               77, 90, 88, 90, 83, 72, 83, 82)
)
model_auto <- lm(energy_use ~ temperature_c, data = data_auto)
summary(model_auto)
dwtest(model_auto, alternative = "two.sided")
bgtest(model_auto, order = 1)
coeftest(model_auto, vcov. = NeweyWest(model_auto, lag = 3, prewhite = FALSE))

Running dwtest(..., alternative = "two.sided") gives the exact two-sided p-value (its default is one-sided). Running bgtest() gives the LM test statistic and its p-value.

Frequently referenced guides

Ready to turn your spreadsheet into results?

Create an account and run your first analysis in minutes. No install, no statistics course required.