All data analysis guides

Data Analysis

Logistic Regression: Odds Ratios, Assumptions and Model Fit Explained

GOSPELTRADER Research Desk · 12 September 2026 · 11 min read

Quick answer

Logistic regression models the log-odds of a binary outcome as a linear function of the predictors. Each coefficient exponentiates to an odds ratio: exp(β) > 1 raises the odds of the event, exp(β) < 1 lowers them, and the result is significant when the 95% confidence interval for the odds ratio excludes 1. Report the model chi-square, a pseudo R², classification accuracy and the odds ratio with its interval for every predictor.

1. The model: why not ordinary regression?

A binary outcome (passed/failed, defaulted/repaid, churned/retained) violates the linear model: predicted probabilities run below 0 and above 1, and the errors cannot be normally distributed. Logistic regression solves this by modelling the logit — the natural log of the odds — which is unbounded and linear in the predictors.

Estimation is by maximum likelihood, not least squares, so there is no closed-form solution and no true R². The algorithm iterates until the log-likelihood stops improving.

Logit link
  ln( p / (1 - p) ) = β₀ + β₁X₁ + ... + βₖXₖ

Predicted probability
  p = 1 / (1 + e^-(β₀ + β₁X₁ + ... + βₖXₖ))

Odds ratio for predictor j
  OR_j = exp(β_j)

Worked example: β = 0.693 for "attended tutorials"
  OR = exp(0.693) = 2.00
  → attendees have twice the odds of passing, holding other predictors constant.

2. Reading odds ratios without overstating them

An odds ratio is not a risk ratio. When the event is common (base rate above roughly 10%), the odds ratio exaggerates the change in probability, and a careful write-up converts key results into predicted probabilities at meaningful predictor values.

For a continuous predictor, exp(β) is the multiplicative change in odds per one-unit increase. If the unit is trivial — one naira, one day — rescale the predictor before modelling so the odds ratio is interpretable.

OutputWhat it meansHow to report
exp(β) = 2.00, CI [1.42, 2.81]Odds of the event double per unitSignificant: interval excludes 1
exp(β) = 0.55, CI [0.38, 0.79]Odds fall by 45% per unitSignificant protective effect
exp(β) = 1.15, CI [0.88, 1.50]Odds 15% higher, impreciseNot significant; do not narrate it
exp(β) very large, huge CISeparation or a tiny cellCheck cross-tabs before reporting

3. Assumptions that actually apply

Logistic regression does not assume normality, linearity of the raw outcome, or homoscedasticity. It does assume the following, and each has a test.

  • Independence of observations — clustered or repeated data needs a mixed-effects or GEE model instead.
  • Linearity in the logit for continuous predictors — test with the Box-Tidwell procedure (add X × ln(X) terms; a significant term means the relationship is not linear in the logit).
  • No severe multicollinearity — inspect VIF from an equivalent linear model; act above 5.
  • No complete or quasi-complete separation — a predictor that perfectly splits the outcome produces enormous coefficients and unusable standard errors; collapse categories or use penalised (Firth) logistic regression.
  • Adequate events per variable — at least 10 events of the rarer outcome per predictor, with 20 preferred.

4. Model fit and classification

Fit is judged on several fronts at once: does the model beat the null, how much variation does it explain, is it calibrated, and does it classify better than the base rate?

Omnibus test (model vs null)
  χ² = -2LL(null) - (-2LL(model)) , df = number of predictors

Pseudo R²
  Cox & Snell R² = 1 - (L₀/L₁)^(2/n)          (cannot reach 1)
  Nagelkerke R²  = Cox & Snell R² / (1 - L₀^(2/n))   (rescaled to 1)

Calibration
  Hosmer-Lemeshow: non-significant p (> .05) indicates acceptable fit

Discrimination
  AUC 0.70-0.79 acceptable, 0.80-0.89 excellent, ≥ 0.90 outstanding

5. Reporting template

A logistic regression paragraph should let a reader reconstruct the model without the raw output: sample and event count, the omnibus test, a pseudo R², calibration and classification, then each predictor's odds ratio with its interval.

Example: "A binary logistic regression with three predictors was significant, χ²(3) = 34.72, p < .001, Nagelkerke R² = .28. The model classified 78.4% of cases correctly (base rate 61.2%), and the Hosmer-Lemeshow test indicated acceptable fit, χ²(8) = 6.41, p = .601. Tutorial attendance was associated with higher odds of passing, OR = 2.00, 95% CI [1.42, 2.81], p < .001."

Frequently asked questions

What sample size does logistic regression need?

Plan around events per variable: at least 10 cases of the rarer outcome for each predictor, and 20 for stable estimates. With five predictors and a 20% event rate, that implies roughly 250-500 cases. Small event counts inflate coefficients and widen confidence intervals dramatically.

Can I use R² from logistic regression?

Not the ordinary R². Logistic regression is fitted by maximum likelihood, so software reports pseudo R² measures such as Cox & Snell and Nagelkerke. Report Nagelkerke, label it as a pseudo R², and never compare it directly with an OLS R².

What is the difference between binary, multinomial and ordinal logistic regression?

Binary handles two outcome categories. Multinomial handles three or more unordered categories and estimates a separate set of coefficients against a reference category. Ordinal handles ordered categories and assumes proportional odds, which must be tested before the results are interpreted.

How do I handle a rare outcome?

Rare events bias maximum likelihood estimates downward. Use penalised (Firth) logistic regression, or exact logistic regression for very small samples. Resampling the majority class changes the intercept, so recalibrate predicted probabilities before reporting them.

Want this analysis done for you?

We deliver cleaning, assumption testing, modelling and a reporting-ready write-up.

Start a project
Chat on WhatsApp