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.
| Output | What it means | How to report |
|---|---|---|
| exp(β) = 2.00, CI [1.42, 2.81] | Odds of the event double per unit | Significant: interval excludes 1 |
| exp(β) = 0.55, CI [0.38, 0.79] | Odds fall by 45% per unit | Significant protective effect |
| exp(β) = 1.15, CI [0.88, 1.50] | Odds 15% higher, imprecise | Not significant; do not narrate it |
| exp(β) very large, huge CI | Separation or a tiny cell | Check 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 outstanding5. 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.