Stats for

Linear Regression · General Linear Model

Multiple Linear Regression

Multiple regression predicts an outcome from several predictors at once.

Multiple linear regression takes several predictors and one continuous outcome and tests how well they predict it together, and what each predictor adds while holding the others constant.

Example

Do social support, sleep and exercise each predict how satisfied people are with their lives? We surveyed 150 adults on how supported they feel, how many hours they sleep a night and how many hours they exercise a week, and scored their life satisfaction from 5 to 35.

One Sample + Continuous Outcome + 2+ Predictors → Multiple Linear Regression
Tests
Population regression coefficients and variance explained
Observations
Independent
Parametric
Yes
Headline Statistic
R^2
Effect Size
Cohen's f^2
Groups
1

The Basics

When to Use It

Use it when you have one continuous outcome and two or more predictors measured on the same people, and you want to know how well they predict the outcome together and what each one adds while the others are held constant. For example:

  • Do social support, sleep and exercise each predict how satisfied people are with their lives?
  • Do rumination, perceived stress and neuroticism each predict depression symptom scores when all three are considered together?
  • Does working-memory span predict reading comprehension scores once age and vocabulary are taken into account?

Predictors can be categories too, such as treatment group or diagnosis. A predictor with k categories goes in as k − 1 yes/no (0/1) columns, leaving one category out as the reference; each coefficient is then that group's difference from the reference group, holding the other predictors constant. R builds the columns for you when the variable is a factor, and so does SPSS when it's listed under Fixed Factor(s) in Analyze → General Linear Model → Univariate; SPSS's Linear Regression needs the 0/1 columns made by hand.

Vocabulary You Need

Definition Partial Regression Coefficient (b_j)

In a regression with several predictors, the change in the predicted outcome for a one-unit rise in one predictor when the other predictors are held at the same values. It's in the outcome's units per unit of the predictor, and it describes only the part of that predictor that doesn't overlap with the others, so it usually differs from the slope the predictor would get on its own. “Holding constant” is statistical, not experimental: it doesn't show what would happen if you changed the predictor in real life. In a model with a product term, a predictor's coefficient is its slope where the other predictor in the product equals zero, and the product's coefficient is how much that slope differs between people one unit apart on the other. Glossary →

Definition Coefficient of Determination (r^2)

With two variables it's the square of their correlation, r²: the share of the sample variation in one variable accounted for by its best-fitting straight-line prediction from the other, the same whichever variable is predicted. It doesn't split the variables into shared and separate causes. In a regression with several predictors it's written R²: the share of the outcome's variation that lines up with the model's predictions, 1 − SS_residual ÷ SS_total, which equals the squared correlation between the outcome and the predictions. It's often called variance explained, where “explained” means predicted statistically; it says nothing about cause. It can't go down when a predictor is added, which is why adjusted R² exists. It's never larger than |r|, and much smaller for modest correlations (r = .30 gives r² = .09), a useful check on how big a correlation really is. Glossary →

Definition Adjusted R Squared (R^2_{\text{adj}})

R² never goes down when a predictor is added, even a useless one, so in a sample it overstates how much the predictors predict in the population. Adjusted R² takes the sample size and the number of predictors into account, 1 − (1 − R²)(n − 1)/(n − k − 1), so it's a little smaller, and it can fall when a predictor adds less than chance would. The gap is large with many predictors and few people and small with many people. It can even be negative when the predictors predict almost nothing. Glossary →

Definition Standardized Coefficient (\beta)

The regression coefficient you'd get if the outcome and the predictors were all converted to z-scores first: b × s_x ÷ s_y. It says how many standard deviations apart the predicted outcomes are for people one standard deviation apart on a predictor, so predictors measured in different units can be compared. With a single predictor it equals Pearson's r. With several, each β holds the others constant, and it can fall outside −1 to 1 when predictors are strongly correlated with each other. Glossary →

Definition Variance Inflation Factor (VIF)

For one predictor, 1 / (1 − R²ⱼ), where R²ⱼ is how much of that predictor the other predictors explain. A predictor unrelated to the others has a VIF of 1; a VIF of 4 means its coefficient's variance is four times what it would be with no overlap, so its standard error is twice as large. Its reciprocal, 1 − R²ⱼ, is called tolerance. Cutoffs such as 5 or 10 are rules of thumb, not tests (O'Brien, 2007): whether a VIF is a problem depends on how precise the coefficient still is. Glossary →

Definition Residual

A score minus the value the model predicts for it. In an ANOVA the prediction is the person's group mean, so the residual is how far each person sits from their own group's average; in a regression it's the point on the fitted line (or plane) for that person's predictor values. Residuals are what the model leaves unexplained, and several assumptions, such as normality and equal spread, are really about them. Glossary →

Assumptions

1. Independent Observations The people (or other units) in your study don't influence each other.
What It Means
Each person's data comes from a separate, unconnected source, so knowing one person's scores tells you nothing about anyone else's. In designs that measure people more than once, their own scores are meant to be related; it's different people who must be independent. Methods built for clustered data, such as multilevel models and GEE, also allow members of the same group to be related, as long as the analysis names the grouping; then it's the groups that must be independent.
Applies To
Observations
How to Check
By design, not by a test. Did each person contribute their own data, with no clusters such as roommates, couples, therapy groups or classrooms whose members influence each other? If there are clusters, does the analysis model every one of them?
How Much It Matters
A lot. If people come in clusters (couples, friends who took the survey together, patients from the same clinic), their residuals are more alike than the model expects, the standard errors come out too small, and every p is too small.

If It's Violated

  • Alternative Test Multilevel Regression (HLM). A multilevel model, which estimates the same coefficients while accounting for the clustering.
  • Design Change Sample people independently, one per household or group.
2. Linear Relationship The relationship between your variables follows a straight line, not a curve.
What It Means
As one variable goes up, the other tends to change by about the same amount across its whole range. A curved relationship, one that levels off or a U shape, breaks this.
Applies To
Relationship
How to Check
Look at a scatterplot of each pair of variables the analysis relates: a roughly oval cloud tilted one way is fine; a clear bend, a ceiling or a U is not. In a regression with several predictors, plot the residuals against the predicted values instead: a flat, even band is fine; a curve means the model is missing a bend. A component-plus-residual plot for each predictor (R: car::crPlots) shows whether one of them bends once the others are held constant.
How Much It Matters
A lot, for what the coefficients mean. Each coefficient is a straight-line slope; if life satisfaction levels off beyond 8 hours of sleep, one slope will understate the slope at low sleep and overstate it at high sleep. Check with residual plots, not just the raw scatterplots, because the other predictors can hide or create a bend.

If It's Violated

  • Transformation Log-transform a predictor whose relationship with the outcome levels off, such as income. The coefficient is then per unit of the log.
  • Correction Add a squared term (sleep²) to let the relationship bend. Center the predictor first, which cuts its overlap with the squared term; sleep's own coefficient is then its slope at average sleep.
3. Equal Spread of Residuals Your scores scatter about equally around the predictions, whatever the prediction.
What It Means
The residuals have about the same spread at every predicted value, so the model misses by about as much for people predicted to score low as for people predicted to score high. The opposite, heteroscedasticity, often looks like a funnel. If the model's form is right, unequal spread doesn't bias the coefficients, though it makes them less precise than they could be; it does make their standard errors, and so the p-values and confidence intervals, unreliable.
Applies To
Residuals
How to Check
Plot the residuals against the predicted values (in the SPSS REGRESSION procedure, *ZRESID against *ZPRED; for MIXED, save them with /SAVE=PRED RESID and plot those). A band of even width is fine; a funnel or fan that widens or narrows is not. Don't use a test such as Breusch–Pagan as a gatekeeper: with small samples it misses real problems, and with large ones it flags trivial ones.
How Much It Matters
Moderate. If the model is otherwise right, unequal spread alone doesn't bias the coefficients, but the standard errors, and so t, p and the intervals, can be too small or too large. It matters most when the spread changes a lot and the sample is small. In the well-being study the residuals form an even band.

If It's Violated

  • Robust Estimation Use heteroscedasticity-consistent standard errors (HC3), which don't assume equal spread and work well even in modest samples (Long & Ervin, 2000; Hayes & Cai, 2007). In SPSS, use Analyze → General Linear Model → Univariate and, under Options, Parameter estimates with robust standard errors (HC3); in R, lmtest::coeftest(fit, vcov = sandwich::vcovHC(fit, type = "HC3")); in statsmodels, .fit(cov_type="HC3"). In the well-being study they move sleep's standard error only from 0.41 to 0.42, and no conclusion changes.
  • Transformation Log-transform a right-skewed outcome whose spread grows with its level, such as reaction time. Results are then on the log scale.
4. Normality The scores the test relies on are roughly bell-shaped, or your sample is big enough that it doesn't matter.
What It Means
The test's model assumes the scores it relies on are roughly normal: the scores within each group (or the scores themselves, for a one-sample test), the difference scores in a paired design, or the residuals (the errors left around a model's predictions) in a regression. For p-values and confidence intervals, what really matters is that the estimates (such as a mean, a difference between means or a model's coefficients) are roughly normal across repeated samples. A large enough sample usually provides that; how large depends on how skewed the scores are and how extreme their outliers.
Applies To
Residuals
How to Check
Look at a histogram or Q–Q plot for strong skew or extreme outliers. Don't rely on a normality test: with small samples it misses real problems, and with large ones it flags trivial ones.
How Much It Matters
Little, with 150 people. The assumption is about the residuals, not the predictors or the outcome (Ernst & Albers, 2017), and with large samples the coefficients' sampling distributions are close to normal anyway. It matters more for small samples, and extreme outliers matter at any size. Our residuals are close to symmetric (skewness −0.22), and none is more than 2.74 standard deviations from zero. Also look for single people who pull the line: plot residuals against leverage with Cook's distance (Run It in Software shows how). No one here stands out (the largest Cook's distance is .06). If someone does, check their record, and report the model with and without them rather than quietly dropping them.

If It's Violated

  • Robust Estimation Bootstrap confidence intervals for the coefficients, which don't assume a residual shape.
  • Transformation Transform a skewed outcome, then interpret the coefficients on the new scale.
5. No Severe Multicollinearity Your predictors aren't so closely related that their effects can't be told apart.
What It Means
Each coefficient is estimated from the part of its predictor that doesn't overlap with the others. When predictors are highly correlated, that part is small, so the coefficients become unstable and their standard errors large, even though the model as a whole may predict well. Perfect overlap, such as including a total score and all of its parts, makes the model impossible to estimate.
Applies To
Predictors
How to Check
Look at the correlations among the predictors and at each predictor's variance inflation factor (VIF). A VIF near 1 means little overlap. Common cutoffs of 5 or 10 are rules of thumb, not tests (O'Brien, 2007); the real question is whether the coefficients you care about are still precise enough to interpret.
How Much It Matters
It depends on the question. Overlapping predictors don't hurt R², F or the predictions, but they inflate each coefficient's standard error, so a real effect can look non-significant and coefficients can swing or flip sign from sample to sample. Our VIFs are 1.10 to 1.23: exercise overlaps somewhat with the other two, but not enough to blur the estimates much.

If It's Violated

  • Design Change If two predictors measure the same thing (two anxiety scales), average them into one score or keep the one that fits your question.
  • Proceed with Caveat If you only care about the predictors jointly, report the model's R² and F and don't lean on the individual coefficients.
  • Design Change A larger sample shrinks every standard error, which offsets some of the inflation.

Limitations

This Is Not Your Test If…

What It Doesn't Tell You

  • Why. “Holding constant” is arithmetic, not an experiment. Nothing here shows that sleeping more would raise anyone's life satisfaction; unhappiness can disturb sleep, and anything left out of the model, like health or income, could drive both. And a predictor measured with error is only partly held constant, so some of its overlap with the outcome can leak into the others' coefficients.
  • Whether it matters. Significance doesn't make the model useful: the three predictors leave 90% of the differences in life satisfaction unexplained, and 0.90 points per hour of sleep is a small difference on a 30-point range.
  • Who else. The coefficients describe adults like these 150, over the range of sleep and exercise they reported, and they depend on which predictors were included. Add or drop one and the others can change.
  • That exercise doesn't matter. Its non-significant coefficient means the data can't tell its unique contribution from zero, not that the contribution is small. Its interval, −0.32 to 0.54 points per hour, is β from −0.13 to 0.22 in standard-deviation terms, which reaches past sleep's 0.18. Nor is exercise unrelated to well-being: on its own it did correlate with life satisfaction.
  • Whether one predictor's slope depends on another. The model gives sleep one slope for everyone. To ask whether it's steeper for people with little support, add their product (support × sleep, after centering both) as another predictor; its coefficient tests whether sleep's slope changes with support.

Common Mistakes

  • Don'tRead a coefficient as the effect of changing that predictor in real life.

    InsteadSay it's the difference in predicted outcome, holding the other predictors constant. Causal claims need a design that supports them.

  • Don'tCompare predictors' importance by the size of their unstandardized b's.

    InsteadCompare standardized β's, or each predictor's unique R², and remember both depend on the sample's spread. When predictors overlap, the two can rank them differently and neither splits the shared variance; for questions about importance, use dominance analysis or relative weights, and report the zero-order correlations too.

  • Don'tDrop a predictor because it wasn't significant on its own before running the model.

    InsteadChoose predictors from theory before looking at the data, and keep them in the model you planned.

  • Don'tConclude a predictor doesn't matter because its coefficient isn't significant.

    InsteadSay the data can't tell its unique contribution from zero, and give its interval, which may still allow a sizable one. On its own it may still predict the outcome.

  • Don'tCheck normality on the outcome or the predictors.

    InsteadCheck the residuals. Skewed predictors are fine; the assumption is about the errors.

  • Don'tReport R² without adjusted R² when the model has many predictors for its sample size.

    InsteadReport both. R² never goes down when a predictor is added, even a useless one.

  • Don'tRead a p-value as the chance that the null hypothesis is true.

    InsteadRead it as: if the null were true, how often data at least this extreme would turn up.

Result Decoder

Significance and Effect Size Guidelines

Benchmarks Significance (p Value)
  • p < .001

    Very strong evidence against the null hypothesis.

  • .001 ≤ p < .01

    Strong evidence against the null hypothesis.

  • .01 ≤ p < .05

    Statistically significant at α = .05. Moderate evidence against the null hypothesis.

  • .05 ≤ p < .10

    Not significant. Weak evidence; sometimes called a “trend.” Treat it as inconclusive.

  • p ≥ .10

    Not significant. Little evidence against the null, which is not the same as evidence of no effect.

These evidence labels are one common convention for describing p in graded language rather than as significant or not; the boundaries are rough guides, not rules, and other authors draw them differently. Muff et al. (2022) argue for this kind of language of evidence over a single cutoff. α is chosen before the analysis, and p never says how big or important an effect is.

More about statistical significance ↓

Benchmarks Effect Size (Cohen's f^2)
  • f² < .02 Below Small

    Smaller than the conventional small benchmark. Whether an effect this size matters depends on the setting.

  • .02 ≤ f² < .15 Small

    A sliver of the variation, around 2% to 13%, lines up with the predictors. Hard to see without measuring it.

  • .15 ≤ f² < .35 Medium

    A noticeable share of the variation, around 13% to 26%, lines up with the predictors.

  • f² ≥ .35 Large

    A large share of the variation, about a quarter or more, lines up with the predictors.

Cohen (1992) set the cutoffs .02, .15 and .35 for a multiple or partial R² tested with an F test; the band below .02 and the descriptions are this site's glosses. They are conventions, not measures of practical importance. For a whole model, f² of .02, .15 and .35 correspond to R² of about .02, .13 and .26.

More about effect size ↓

How It's Reported

Equation Form

Example

R2 = .10, adjusted R2 = .08, f2 = 0.11, F(3, 146) = 5.41, p = .001; sleep: b = 0.90, 95% CI [0.09, 1.71], β = 0.18, t(146) = 2.19, p = .030

Table 1. Means, Standard Deviations and Correlations

Example
MSD123
1. Life satisfaction 22.005.00
2. Social support 5.000.90.25
3. Sleep (hours a night) 7.001.00.23.16
4. Exercise (hours a week) 4.502.00.17.35.30

Note. N = 150. Every correlation except support with sleep (r = .16, p = .058) is significant at p < .05, two-sided.

Table 2. Multiple Regression Predicting Life Satisfaction

Example
bSE95% CI\betatpVIF
Intercept 9.473.33[2.89, 16.05]2.84.005
Social support 1.150.47[0.23, 2.07]0.212.47.0151.14
Sleep (hours a night) 0.900.41[0.09, 1.71]0.182.19.0301.10
Exercise (hours a week) 0.110.22[−0.32, 0.54]0.040.50.6181.23

Note. R2 = .10, adjusted R2 = .08, F(3, 146) = 5.41, p = .001. b = unstandardized coefficient; β = standardized coefficient; VIF = variance inflation factor. Sleep is the coefficient worked through in the Napkin Math.

Full Text (APA Style)

Example

Adults' life satisfaction averaged 22.00 on the 5–35 scale (SD = 5.00). Together, social support (M = 5.00, SD = 0.90), nightly sleep (M = 7.00 hours, SD = 1.00) and weekly exercise (M = 4.50 hours, SD = 2.00) explained 10% of the variation in life satisfaction, R2 = .10, adjusted R2 = .08, f2 = 0.11, a small effect by convention. A multiple regression showed the model was statistically significant, F(3, 146) = 5.41, p = .001. Holding the other predictors constant, more social support (b = 1.15, 95% CI [0.23, 2.07], β = 0.21, t(146) = 2.47, p = .015) and more sleep (b = 0.90, 95% CI [0.09, 1.71], β = 0.18, t(146) = 2.19, p = .030) predicted higher life satisfaction. Exercise did not add reliably to the prediction (b = 0.11, 95% CI [−0.32, 0.54], β = 0.04, t(146) = 0.50, p = .618), although on its own it correlated with life satisfaction, r(148) = .17, p = .038.

  • With more than two predictors, put the coefficients in a table like Table 2: b, its SE and 95% CI, β, t and p for every predictor, with R², adjusted R² and F underneath. Add a table of means, SDs and correlations like Table 1, so readers can see how the predictors overlap.
  • Give the F test's two degrees of freedom: k predictors and n − k − 1.
  • Write “holding the other predictors constant” or “controlling for,” and “predicted” or “was associated with,” not “increased” or “improved.”
  • Name every predictor in the model. A coefficient's meaning depends on what else was in it.
  • “Explained 10% of the variation” is the standard phrase for R², but “explain” is statistical: the predictions track that share of the variation, which doesn't show the predictors cause it.

Reading Each Piece

The equation form above, piece by piece, in this order: how big, how certain, then how surprising.

R2 = .10, adjusted R2 = .08 Together, support, sleep and exercise predict 10% of the variation in life satisfaction. That's what “explain” means for R²: the predictions track that share, which doesn't show these three cause it. Corrected for using three predictors, about 8% is the better guess for the population.
f2 = 0.11 The variation the predictors explain is about a ninth the size of what they leave unexplained. That's a small effect by the benchmarks above, toward the top of the small range; whether it matters is a question about well-being, not statistics. Benchmarks ↑
b = 0.90, 95% CI [0.09, 1.71] Among people with the same support and exercise, those who sleep an hour more score 0.90 points higher on life satisfaction, plausibly anywhere from almost nothing (0.09) to 1.71 points. Alone, sleep predicted 1.13 points per hour; part of that was the support and exercise that go with it.
F(3, 146) = 5.41, p = .001 The predictors explain 5.41 times as much variation per degree of freedom as is left unexplained. If none of the three were related to life satisfaction in the population, an F at least this large would turn up about 1 time in 670. The 3 and 146 are the degrees of freedom: k and n − k − 1.
t(146) = 2.19, p = .030 Sleep's coefficient is 2.19 standard errors above zero. If sleep's population coefficient were 0 with support and exercise held constant, a coefficient at least this far from zero, in either direction, would turn up about 3% of the time, so it's statistically significant.

Calculations

The Running Example

Example

The well-being study: 150 adults, three predictors (social support, nightly sleep, weekly exercise) and one outcome, life satisfaction on a 5–35 scale.

Null Hypothesis:
all three population coefficients are 0
Alternative:
at least one population coefficient is not 0

This is the null for the whole model: among adults like these, none of the three predictors helps predict life satisfaction, so the population R² is 0. Each predictor also gets its own test, whose null is that its population coefficient is 0 with the other two held constant.

What Your Data Should Look Like

One row per person, one numeric column for the outcome and one for each predictor. Every value on a row must come from the same person; anyone missing a value is usually dropped from the whole analysis.

Example
participantlife_satisfactionsocial_supportsleep_hoursexercise_hours
1164.47.73.4
2295.15.72.9
3254.97.45.5
4195.16.03.0
5195.89.15.7
6175.86.46.2
… 144 more rows
MSD123
1. Life satisfaction22.005.00
2. Social support5.000.90.25
3. Sleep (hours a night)7.001.00.23.16
4. Exercise (hours a week)4.502.00.17.35.30

N = 150.

Correlations are Pearson r.

Simulated data.

Download all 150 rows (data.csv)

Napkin Math

The whole test, one idea at a time. Under each heading, a line says why the step matters, and the green note reads the equation in plain English with the well-being study's numbers. Collapse all to read just the headings: they tell the whole story on their own.

  1. 1. Find the Equation That Predicts Life Satisfaction Best

    Regression predicts each person's score as a starting value plus a weighted sum of their predictors. Software picks the weights that make the misses, squared and added up, as small as possible. Each weight holds the other predictors constant: it uses only the part of its predictor that the others can't predict.

    \hat{y} = b_0 + b_1 x_1 + b_2 x_2 + b_3 x_3 =9.47 + 1.15\,x_1 + 0.90\,x_2 + 0.11\,x_3

    b_0 = 9.47 points

    b_1 = 1.15

    b_2 = 0.90

    b_3 = 0.11

    x_1 is social support, x_2 nightly sleep and x_3 weekly exercise. Software solves for all four b's at once with matrix algebra, \mathbf{b} = (\mathbf{X}^\top\mathbf{X})^{-1}\mathbf{X}^\top\mathbf{y}, which no napkin can hold, so we take its numbers. b_2 = 0.90 says people who sleep an hour more than others with the same support and exercise score 0.90 points higher, on average. What “holding constant” does: predict sleep from support and exercise and keep the leftovers, the part of sleep they can't predict; do the same for life satisfaction. The slope of one set of leftovers on the other is exactly sleep's 0.90 (the chart under Partial Regression Coefficient, in Vocabulary You Need, draws it). Alone, sleep gets a slope of 1.13, because it then also carries the support and exercise that go with it. b_0 = 9.47 is the prediction for someone with zero on all three predictors, which nobody here is (support runs from 2.0 to 6.9), so it only anchors the equation; centering the predictors would make it the prediction for someone average on all three.

  2. 2. Predict One Person's Score and See How Far Off It Is

    Plugging someone's predictors into the equation gives the model's best guess for them. The gap between their real score and that guess is the part the predictors couldn't account for.

    e_i = y_i - \hat{y}_i =16 - 21.82

    = −5.82 points

    \hat{y}_i = 21.82 points

    Participant 1 reports support of 4.4, 7.7 hours of sleep and 3.4 hours of exercise, so \hat{y}_i = 9.47 + 1.15 × 4.4 + 0.90 × 7.7 + 0.11 × 3.4 = 21.82 points (using the unrounded b's). Their actual y_i is 16, so e_i = 16 − 21.82 = −5.82: they're less satisfied than their predictors suggest.

  3. 3. Measure How Much of the Variation the Predictors Explain Together

    Compare the squared misses left over with how much scores vary around their plain average. The share the predictions remove is R squared. It never goes down when a predictor is added, even a useless one, so we also adjust it for how many we used.

    R^2 = 1 - \dfrac{SS_{\text{residual}}}{SS_{\text{total}}} =1 - \dfrac{3349.95}{3722.00}

    = .10

    R^2_{\text{adj}} = .08

    SS_{\text{total}} is 3722.00, the squared distances of all 150 scores from their mean of 22.00. SS_{\text{residual}} is 3349.95, the squared misses left over. 1 − 3349.95 ÷ 3722.00 = .10. Adjusted for 3 predictors, R^2_{\text{adj}} = 1 − (1 − .10) × 149 ÷ 146 = .08.

  4. 4. Measure How Big the Model's Effect Is

    R squared is already a size, but the benchmarks and power tables for regression use Cohen's f², the explained share divided by the unexplained share.

    f^2 = \dfrac{R^2}{1 - R^2} =\dfrac{.10}{1 - .10}

    = 0.11

    R^2 is our .10, so the unexplained share is 1 − .10 = .90. .10 ÷ .90 = 0.11.

  5. 5. Ask Whether the Predictors Together Beat Chance

    Even useless predictors explain a little variation by luck. F compares the explained variation per predictor with the unexplained variation per leftover piece of information.

    F = \dfrac{R^2 / k}{(1 - R^2) / (n - k - 1)} =\dfrac{0.10 / 3}{0.90 / 146}

    = 5.41

    p = .001

    k is our 3 predictors and n - k - 1 = 150 − 3 − 1 = 146. 0.10 ÷ 3 = .0333 and 0.90 ÷ 146 = .00616, and .0333 ÷ .00616 gives F = 5.41. The chance an F with 3 and 146 df lands this high or higher is .0015, reported as .001 to three decimals.

  6. 6. Test Whether Sleep Adds Anything Once Support and Exercise Are Known

    A significant model doesn't say which predictors matter. Each coefficient gets its own test, the coefficient divided by its standard error, which software reads off the same matrix algebra.

    t = \dfrac{b_j}{SE_{b_j}} =\dfrac{0.90}{0.41}

    = 2.19

    p = .030

    b_2 is sleep's 0.90 points per hour and SE_{b_2} is 0.41. 0.90 ÷ 0.41 = 2.19 standard errors above zero (with the unrounded values; the rounded ones give 2.20). With 146 df, the two-sided p is .030.

  7. 7. Give a Range of Plausible Values for Sleep's Coefficient

    Instead of a single best guess for sleep's coefficient, give the range of population values that fit the data.

    b_j \pm t^{*}_{n-k-1} \times SE_{b_j} =0.90 \pm 1.976 \times 0.41

    = [0.09, 1.71] points per hour

    t^{*}_{146} = 1.976 holds the middle 95% of a t distribution with 146 df. 1.976 × 0.41 = 0.81, so the range is 0.90 ± 0.81, from 0.09 to 1.71 points per hour.

  8. 8. Put the Predictors on a Common Scale

    Support, sleep and exercise are measured in different units, so their coefficients can't be compared directly. Converting each into standard deviations can.

    \beta_j = b_j \times \dfrac{s_{x_j}}{s_y} =0.90 \times \dfrac{1.00}{5.00}

    = 0.18

    r_{x_2 y} = .23

    s_{x_2} is sleep's 1.00-hour SD and s_y is life satisfaction's 5.00 points. 0.90 × 1.00 ÷ 5.00 = 0.18: one SD more sleep goes with 0.18 SD more satisfaction. Alone, sleep's β would equal its correlation, .23. Exercise shrinks much more, from .17 alone to 0.04 once support and sleep are held constant (Table 2).

  9. 9. Check Whether the Predictors Overlap Too Much

    Each coefficient is estimated from only the part of its predictor the others don't share. If that part is small, the coefficient's standard error balloons. The variance inflation factor says by how much.

    VIF_j = \dfrac{1}{1 - R^2_j} =\dfrac{1}{1 - .094}

    = 1.10

    R^2_j is how much of sleep the other two predictors explain, .094. 1 ÷ (1 − .094) = 1.10, so sleep's coefficient varies 10% more than it would with no overlap, and its standard error is about 5% larger. Support's VIF is 1.14 and exercise's 1.23 (Table 2), all close to 1.

Run It in Software

The code below reads the running example's data from data.csv; save it in the same folder you run the code from.

SPSS (version 30, as documented by IBM)
  1. Analyze → Regression → Linear.
  2. Move life_satisfaction into Dependent and social_support, sleep_hours and exercise_hours into Independent(s). Leave Method on Enter.
  3. Statistics: check Estimates, Confidence intervals (95%), Model fit and Collinearity diagnostics, then Continue.
  4. Plots: put *ZRESID on Y and *ZPRED on X to check the spread of the residuals, and check Histogram and Normal probability plot to check their shape. Click Continue.
  5. Save: check Cook's under Distances, to look for single people who pull the line. Click Continue, then OK.

Or paste this syntax:

REGRESSION
  /MISSING LISTWISE
  /STATISTICS COEFF OUTS CI(95) R ANOVA COLLIN TOL
  /CRITERIA=PIN(.05) POUT(.10)
  /NOORIGIN
  /DEPENDENT life_satisfaction
  /METHOD=ENTER social_support sleep_hours exercise_hours
  /SCATTERPLOT=(*ZRESID ,*ZPRED)
  /RESIDUALS HISTOGRAM(ZRESID) NORMPROB(ZRESID)
  /SAVE COOK.

Reading the Output

Read the model first: R Square and Adjusted R Square in Model Summary, then F and Sig. in the ANOVA table. Then read each predictor's row in Coefficients: B and its 95% Confidence Interval, Beta, then t and Sig. SPSS doesn't print f²; compute it from R Square.

Model Summary

Model R R Square Adjusted R Square Std. Error of the Estimate
1 .316 .100 .081 4.790

ANOVA

Model 1 Sum of Squares df Mean Square F Sig.
Regression 372.055 3 124.018 5.405 .001
Residual 3349.945 146 22.945
Total 3722.000 149

Coefficients

Model 1 B Std. Error Beta t Sig. 95% CI Lower Upper Tolerance VIF
(Constant) 9.469 3.329 2.844 .005 2.889 16.049
social_support 1.147 .465 .207 2.465 .015 .227 2.067 .876 1.141
sleep_hours .900 .411 .181 2.192 .030 .089 1.712 .906 1.104
exercise_hours .109 .217 .043 .500 .618 -.321 .538 .816 1.226

The (Constant) row is the intercept; its test (is the prediction for someone with zero support, sleep and exercise different from 0?) rarely answers anything useful. SPSS also prints a Collinearity Diagnostics table of eigenvalues and condition indices; the VIF column is usually enough.

Output laid out from this page's computed results, not captured from a live run; labels and layout may differ slightly in your version.

R
wellbeing <- read.csv("data.csv")
fit <- lm(life_satisfaction ~ social_support + sleep_hours + exercise_hours, data = wellbeing)
summary(fit)
round(confint(fit), 2)

# Standardized coefficients (beta)
predictors <- c("social_support", "sleep_hours", "exercise_hours")
round(coef(fit)[predictors] * sapply(wellbeing[predictors], sd) / sd(wellbeing$life_satisfaction), 2)

# Variance inflation factors (install.packages("car") once)
car::vif(fit)

# Residuals against fitted values (spread), normal Q-Q plot (shape),
# and residuals against leverage with Cook's distance (influential people)
plot(fit, which = 1)
plot(fit, which = 2)
plot(fit, which = 5)
Call:
lm(formula = life_satisfaction ~ social_support + sleep_hours +
    exercise_hours, data = wellbeing)

Residuals:
     Min       1Q   Median       3Q      Max
-12.9013  -2.9066   0.2791   3.0878  10.6949

Coefficients:
               Estimate Std. Error t value Pr(>|t|)
(Intercept)      9.4689     3.3292   2.844  0.00509 **
social_support   1.1474     0.4655   2.465  0.01486 *
sleep_hours      0.9003     0.4107   2.192  0.02996 *
exercise_hours   0.1086     0.2173   0.500  0.61793
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 4.79 on 146 degrees of freedom
Multiple R-squared:  0.09996,	Adjusted R-squared:  0.08147
F-statistic: 5.405 on 3 and 146 DF,  p-value: 0.001485

               2.5 % 97.5 %
(Intercept)     2.89  16.05
social_support  0.23   2.07
sleep_hours     0.09   1.71
exercise_hours -0.32   0.54

social_support    sleep_hours exercise_hours
          0.21           0.18           0.04

social_support    sleep_hours exercise_hours
      1.141469       1.103754       1.225560

R prints the model's R² and F at the bottom of the summary; read them first, then each row's Estimate, its interval, and t value and Pr(>|t|).

Output laid out from this page's computed results, not captured from a live run; labels and layout may differ slightly in your version.

Python
import pandas as pd
import statsmodels.formula.api as smf
from statsmodels.stats.outliers_influence import variance_inflation_factor

wellbeing = pd.read_csv("data.csv")
fit = smf.ols("life_satisfaction ~ social_support + sleep_hours + exercise_hours", data=wellbeing).fit()
print(fit.summary())

X = fit.model.exog
[variance_inflation_factor(X, j) for j in range(1, 4)]  # [1.141, 1.104, 1.226]
                            OLS Regression Results
==============================================================================
Dep. Variable:      life_satisfaction   R-squared:                       0.100
Model:                            OLS   Adj. R-squared:                  0.081
Method:                 Least Squares   F-statistic:                     5.405
Date:                Mon, 28 Sep 2026   Prob (F-statistic):            0.00148
Time:                        13:25:16   Log-Likelihood:                -445.80
No. Observations:                 150   AIC:                             899.6
Df Residuals:                     146   BIC:                             911.6
Df Model:                           3
Covariance Type:            nonrobust
==================================================================================
                     coef    std err          t      P>|t|      [0.025      0.975]
----------------------------------------------------------------------------------
Intercept          9.4689      3.329      2.844      0.005       2.889      16.049
social_support     1.1474      0.465      2.465      0.015       0.227       2.067
sleep_hours        0.9003      0.411      2.192      0.030       0.089       1.712
exercise_hours     0.1086      0.217      0.500      0.618      -0.321       0.538
==============================================================================

The summary's top block is the model (R², adjusted R², F and its p); the table below it has one row per coefficient. For robust (HC3) standard errors, fit with .fit(cov_type="HC3"). The residual diagnostics statsmodels prints below the table are left out here.

Output laid out from this page's computed results, not captured from a live run; labels and layout may differ slightly in your version.

Impact

Effect Size

A regression has effect sizes at two levels. For the whole model, R² is the share of the variation in the outcome the predictors explain together, and Cohen's f² turns it into the ratio that benchmarks and power tables use. For single predictors, the coefficient b gives the size in the variables' own units, and β puts predictors on a common scale.

f^2 = \dfrac{R^2}{1 - R^2} = \dfrac{.10}{1 - .10} = 0.11

Support, sleep and exercise together predict 10% of the variation in life satisfaction (8% adjusted), an f² of 0.11: a small effect by convention, toward the top of the small range.

The same formula works for one predictor's unique contribution: divide the drop in R² when that predictor is removed by what the full model leaves unexplained. Sleep's unique share is .030, 3% of the variation, so its own f² is .030 ÷ .90 = 0.03.

In the variables' own units, people an hour apart in sleep, with the same support and exercise, differ by 0.90 points on a 5–35 scale; people a point apart in social support (on a 1–7 scale) differ by 1.15 points. Benchmarks are conventions. Whether a difference of 0.90 points of life satisfaction matters is a question about well-being, not statistics.

Benchmarks Cohen's f^2 at a Glance
Below Small
f² < .02
Small
.02 ≤ f² < .15
Medium
.15 ≤ f² < .35
Large
f² ≥ .35

Full benchmarks and caveats ↑

Statistical Significance

A regression answers two kinds of significance question. The F test's p asks: if none of the predictors had any relationship with the outcome in the population, how often would a sample's R² be at least this large? Each coefficient's t test asks: if this predictor added nothing once the others were known, how often would its coefficient land at least this far from zero, in either direction? Below the conventional α = .05, a result is called statistically significant.

If support, sleep and exercise were unrelated to life satisfaction in the population, an R² of .10 or more in 150 adults would turn up about 0.15% of the time (p = .0015, reported as .001). If sleep's coefficient were 0 with support and exercise held constant, one at least this far from zero, in either direction, would turn up about 3% of the time (p = .030). Exercise's p of .618 means a coefficient at least this far from zero would be common if it added nothing. That doesn't show it adds little: in standard-deviation terms its interval runs from β = −0.13 to 0.22, past sleep's 0.18.

p is not the probability that a predictor is useless, and it says nothing about how much a predictor matters: with thousands of people, a coefficient too small to notice would be significant too. Each coefficient's test also depends on which other predictors are in the model. That's what the effect sizes and intervals are for.

Benchmarks p at a Glance
Very Strong
p < .001
Strong
.001 ≤ p < .01
Significant
.01 ≤ p < .05
Weak
.05 ≤ p < .10
Little
p ≥ .10

Strength of evidence against the null hypothesis.

Full benchmarks and caveats ↑

Power and Sample Size

Power is the chance that a study detects an effect that's really there. A real effect doesn't guarantee a significant result: with too few people, it can easily come out non-significant. For a regression, power depends on how much variance the predictors truly explain (as Cohen's f²), how many predictors are being tested, how many are in the model, how many people you have, and α.

Plan for the test you actually care about. Power for the whole model's F test is usually much higher than power for any one coefficient, because a single predictor's unique contribution is smaller than what the set explains together.

Suppose we expected the three predictors together to explain about as much as they did, f² = 0.11. With our 150 adults, the model's F test would come out significant about 94% of the time; 104 adults would have given 80%. Suppose instead we cared about one predictor whose unique share was about the size of sleep's, f² = 0.033 (3% of the variation, divided by the 90% the model leaves unexplained). Testing 1 predictor in a model of 3, 150 adults would give only about 60% power, and 80% would take about 240.

The calculator, like G*Power, uses the noncentral F distribution with λ = f² × N. With 3 predictors and α = .05, it gives 80% power at 36 people for a large effect (f² = .35), 77 for a medium one (.15) and 550 for a small one (.02). Cohen's (1992) table lists 34, 76 and 547, a few people fewer than the exact noncentral F calculation. His tables were built from approximations, so use software for planning.

Power is for planning. Computed from the effect a study already found, it only restates that study's p, so it can't explain a non-significant result.

Researchers usually aim for at least 80% power. Plan it before collecting data, for the smallest effect that would matter, and for the specific coefficient you'll interpret. The calculator below starts with the whole model: all 3 predictors tested, 3 in the model, our f² of 0.11 and 150 people. For the single-predictor figures, set 1 predictor tested out of 3 in the model and f² to 0.033, the setting G*Power's "linear multiple regression: fixed model, R² increase" test uses. Try it:

Other Info

Follow-Up and Post Hoc Tests

None needed. This test answers a single question, so there are no planned contrasts or post hoc tests to run.

References

  • Yule, G. U. (1897). On the theory of correlation. Journal of the Royal Statistical Society, 60(4), 812–854. https://doi.org/10.2307/2979746
  • Cohen, J., Cohen, P., West, S. G., & Aiken, L. S. (2003). Applied multiple regression/correlation analysis for the behavioral sciences (3rd ed.). Lawrence Erlbaum Associates. https://doi.org/10.4324/9780203774441
  • Cohen, J. (1992). A power primer. Psychological Bulletin, 112(1), 155–159. https://doi.org/10.1037/0033-2909.112.1.155
    “For k independent variables, the significance test is the standard F test for df = k, N − k − 1.” (p. 157)
    “The ES index, f², is defined for either squared multiple or squared multiple partial correlations (R²).” (p. 157)
  • Ernst, A. F., & Albers, C. J. (2017). Regression assumptions in clinical psychology research practice—a systematic review of common misconceptions. PeerJ, 5, e3323. https://doi.org/10.7717/peerj.3323
    “Most commonly, researchers incorrectly assume that Xi, or both Xi and Y, should be normally distributed, rather than the errors of the model.” (Common misconceptions about assumptions)
  • Long, J. S., & Ervin, L. H. (2000). Using heteroscedasticity consistent standard errors in the linear regression model. The American Statistician, 54(3), 217–224. https://doi.org/10.1080/00031305.2000.10474549
  • O'Brien, R. M. (2007). A caution regarding rules of thumb for variance inflation factors. Quality & Quantity, 41(5), 673–690. https://doi.org/10.1007/s11135-006-9018-6
  • Hayes, A. F., & Cai, L. (2007). Using heteroskedasticity-consistent standard error estimators in OLS regression: An introduction and software implementation. Behavior Research Methods, 39(4), 709–722. https://doi.org/10.3758/BF03192961
  • Rouder, J. N., Morey, R. D., Speckman, P. L., & Province, J. M. (2012). Default Bayes factors for ANOVA designs. Journal of Mathematical Psychology, 56(5), 356–374. https://doi.org/10.1016/j.jmp.2012.08.001
  • G*Power 3.1 manual. (2023, June 1). Heinrich-Heine-Universität Düsseldorf. https://www.psychologie.hhu.de/fileadmin/redaktion/Fakultaeten/Mathematisch-Naturwissenschaftliche_Fakultaet/Psychologie/AAP/gpower/GPowerManual.pdf
    “noncentrality parameter λ = f 2 N” (§13.5)
  • Cohen, J. (1988). Statistical power analysis for the behavioral sciences (2nd ed.). Lawrence Erlbaum Associates.
  • Muff, S., Nilsen, E. B., O'Hara, R. B., & Nater, C. R. (2022). Rewriting results sections in the language of evidence. Trends in Ecology & Evolution, 37(3), 203–210. https://doi.org/10.1016/j.tree.2021.10.009
    “we suggest language of evidence that allows for a more nuanced approach to communicate scientific findings as a simple and intuitive alternative to statistical significance testing” (Abstract)
  • Williams, M. N., Gómez Grajales, C. A., & Kurkiewicz, D. (2013). Assumptions of multiple regression: Correcting two misconceptions. Practical Assessment, Research & Evaluation, 18(11), 1–14. https://doi.org/10.7275/55hn-wk47
    “ordinary least squares estimates will be unbiased and consistent as long as the errors are independent, but will not be efficient” (p. 9)

Spot an error? Something still confusing? Tell us at support@statsforpsychology.com.