Most of us learn regression assumptions in a linear regression class first: normal residuals, equal variance, a nice straight-line fit. Then we run our first logistic model and reach for the same checklist. Half of it doesn't apply, and I still see people run a normality test on a logistic model and panic at the result.
Logistic regression predicts the probability of a yes-or-no outcome, like whether a customer churns or a loan defaults. Because it models the odds of a category instead of a continuous number, it leans on its own set of conditions, and borrowing the ordinary least squares (OLS) rules from regression analysis will steer you wrong.
Here are the six assumptions of logistic regression that apply, the exact check for each one, and the OLS habits you can stop worrying about.
The 6 assumptions of logistic regression
Logistic regression gives you trustworthy coefficients, odds ratios, and p-values only when a handful of conditions hold. Standard references, like the Statistics Solutions directory, group them into roughly half a dozen rules. Here's each one, in plain terms, with how to check it.
1. The outcome is binary (or ordinal or multinomial)
Logistic regression models a categorical outcome. Standard binary logistic regression needs exactly two outcome categories, like pass or fail, yes or no, churned or retained.
If your outcome has ordered categories (low, medium, high), you want ordinal logistic regression. For three or more unordered categories (bus, car, bike), you want multinomial logistic regression.
How to check it: this one comes down to study design, so there's no test to run. Confirm your outcome is coded as a categorical variable with the right number of levels, then pick the matching model variant. If you're trying to predict a dollar amount or a count, logistic regression is the wrong tool.
2. Your observations are independent
Each row in your data should be one independent observation. The model assumes that knowing the outcome for one case tells you nothing about the outcome for another.
That breaks when you have repeated measures on the same person, matched pairs, or clustered data like students within schools. Time-series data trips this too, since today's value often tracks yesterday's.
How to check it: independence comes mostly from how the data was collected, so think about the study design before you think about a test. If your rows are clustered or repeated, use a model built for it instead, such as mixed-effects logistic regression or generalized estimating equations (GEE).
3. Little or no multicollinearity among predictors
Your predictor variables shouldn't be strongly correlated with each other. When two predictors move together, the model struggles to separate their individual effects, which inflates the standard errors and makes coefficients jump around from sample to sample.
How to check it: calculate the variance inflation factor (VIF) for each predictor. A common rule of thumb flags a VIF above 5 (some analysts use 10) for a closer look. A correlation matrix of your predictors is a quick first pass. If two variables are nearly redundant, drop one or combine them.
4. Continuous predictors are linear in the log odds
This is the assumption people miss most. Each continuous predictor needs a linear relationship with the logit, which is the log of the odds. The relationship between a predictor and the raw outcome can curve however it likes.
How to check it: the Box-Tidwell test is the standard route. You add an interaction between each continuous predictor and its natural log, then check whether that term is significant. A significant term signals the relationship bends. Because the test takes a log, every value of the predictor has to be positive, so add a constant to any variable that includes zeros or negatives before you run it. Statistics Solutions and most stats references point to Box-Tidwell for exactly this. If it fails, transform the predictor, add a polynomial term, or fit a spline. The same logic shows up whenever you're testing assumptions across other statistical methods.
5. No strongly influential outliers
A few extreme or mis-recorded data points can pull the whole model toward themselves, so the fit describes the outliers more than the pattern you care about.
How to check it: look at Cook's distance, standardized or deviance residuals, and leverage values. Points that sit well beyond the usual thresholds deserve a look. Don't delete them on sight, though. Sometimes an outlier is a data-entry error, and sometimes it's the most interesting case in your dataset, so investigate before you decide.
6. A large enough sample
What logistic regression needs is enough of the rarer outcome. Total row count matters much less: a dataset with 10,000 cases but only 15 defaults still has very little information about what drives a default.
How to check it: use the events-per-variable (EPV) rule. A widely cited guideline is at least 10 cases of the least frequent outcome for every predictor you include. Say you have 5 predictors and the rarer outcome shows up about 10% of the time. You'd want 10 × 5 = 50 events, and since events are 10% of the sample, that means roughly 500 observations.
💡 Note: the 10-per-variable figure traces back to Peduzzi and colleagues' 1996 simulation study. Treat it as a floor to aim for. Later research shows the right number also depends on your total sample size, and that Firth's penalized logistic regression can improve coefficient accuracy when events are scarce.
What logistic regression doesn't assume
If you learned regression through OLS, three of those habits don't carry over. Logistic regression drops them, and checking for them anyway is the most common mistake people make.
Normally distributed errors: logistic regression makes no normality assumption about the residuals. Running a Shapiro-Wilk test on a logistic model and worrying about the result is testing a rule that was never there. Statistics Solutions calls testing the wrong assumptions the number one mistake in logistic regression dissertations.
Homoscedasticity: OLS wants constant error variance across the range of your predictors. Logistic regression doesn't, because its outcome is a probability bounded between 0 and 1, so the variance naturally changes across that range.
A straight-line link to the outcome: logistic regression never assumes a linear relationship between your predictors and the raw outcome. The linearity it cares about lives in the log odds (assumption 4).
For a side-by-side on where these rules do apply, our guide to the assumptions of multiple linear regression walks through the full OLS set.
Linear regression vs logistic regression assumptions
Linear and logistic regression are both regression techniques, but they share only two assumptions: independence and low multicollinearity. Everything else splits. Here's the quick comparison.
| Assumption | 📏 Linear regression (OLS) | 🔢 Logistic regression |
| Outcome type | Continuous | Binary, ordinal, or multinomial |
| Relationship modeled | Linear in the outcome | Linear in the log odds |
| Error distribution | Normal residuals | No normality assumption |
| Error variance | Homoscedastic (constant) | No homoscedasticity assumption |
| Independence | Required | Required |
| Multicollinearity | Should be low | Should be low |
| Sample size | Moderate | Enough of the rarer outcome (EPV) |
How to check logistic regression assumptions (in R, SPSS, or Julius)
Most of these checks take a few lines of code or a couple of menu clicks. Here's a complete run in R, then the SPSS and Julius routes.
In R: the script below fits a logistic model on the Pima.tr diabetes dataset that ships with R's MASS package, then runs the multicollinearity, linearity, outlier, and sample-size checks in order. Install the car package once with install.packages("car") before you run it.
library(MASS) # ships with R and holds the Pima.tr dataset
library(car) # provides vif()
data(Pima.tr)
# Outcome: type (diabetes Yes/No). Predictors: glucose, BMI, and age.
model <- glm(type ~ glu + bmi + age, data = Pima.tr, family = binomial)
# Assumption 3: multicollinearity
vif(model)
# Assumption 4: linearity of the logit (Box-Tidwell)
bt <- glm(type ~ glu + bmi + age +
I(glu * log(glu)) + I(bmi * log(bmi)) + I(age * log(age)),
data = Pima.tr, family = binomial)
summary(bt)
# Assumption 5: influential points (rule of thumb: Cook's distance above 4/n)
cd <- cooks.distance(model)
which(cd > 4 / nrow(Pima.tr))
# Assumption 6: events per predictor (aim for 10 or more)
min(table(Pima.tr$type)) / 3
Read the output in the same order. A VIF above 5 flags a predictor to look at. In the Box-Tidwell model, a significant x × log(x) term means that predictor's link to the log odds bends. Any row number that which() prints deserves a closer look before you decide what to do with it. The last line gives you events per predictor. UCLA's statistical consulting group has a fuller logit regression walkthrough in R.
In SPSS: run Analyze → Regression → Binary Logistic, pull VIF from a parallel linear regression, and compute the Box-Tidwell interaction terms by hand. UCLA also keeps a SPSS logit example that mirrors the R one. If you prefer code, our Python statistical analysis guide covers the statsmodels route.
In Julius: upload your dataset, ask in plain English for a logistic model with VIF, Box-Tidwell, and outlier checks, and Julius writes and runs the code for you. It then explains what each diagnostic means, which helps if you know the assumption but not the syntax.
Run your assumption checks without the stats headache
Checking six assumptions by hand means remembering which function does what, wiring up a Box-Tidwell interaction, and reading Cook's distance plots, all before you've learned anything about your actual question. It's the part of the analysis that makes people put it off.
Julius takes those mechanical parts off your plate by letting you work in plain language on top of your own data. You stay in control of the stats; it handles the syntax.
Here's how Julius helps:
- Natural-language analysis: ask it to fit a logistic model and test the assumptions, and it writes and runs the Python or R for you.
- Built-in diagnostics: VIF tables, Box-Tidwell checks, and residual or leverage plots come back with a plain explanation of what each one is telling you.
- Visual-first output: see your influential-points plots and predicted-probability curves instead of squinting at raw console output.
- Runs real code: Julius runs the Python or R in its own cloud environment, so you can open and check the code behind every diagnostic.
Ready to skip the syntax and get straight to whether your model holds up? Try Julius for free today.
Frequently asked questions
Can you explain logistic regression in a simple way?
Logistic regression predicts the probability that something falls into one of two categories, like yes or no. It takes your predictors, combines them, and returns a probability between 0 and 1, which you can turn into a prediction. It's the go-to method when the thing you're predicting is a category instead of a number.
What are the assumptions of logistic regression?
The assumptions of logistic regression are a categorical outcome, independent observations, little or no multicollinearity, a linear relationship between continuous predictors and the log odds, no strongly influential outliers, and a large enough sample. Unlike linear regression, it does not assume normal errors or constant variance.
Does logistic regression assume a normal distribution?
No, logistic regression does not assume a normal distribution of the residuals. That assumption belongs to linear regression. Testing your logistic model for normality is checking a rule it never had, which is why the result can look alarming and mean nothing.
How do you test for linearity of the logit?
You test linearity of the logit with the Box-Tidwell test. It adds an interaction between each continuous predictor and its natural logarithm, and a statistically significant term signals that the relationship with the log odds isn't linear. If it fails, transform the predictor or add polynomial or spline terms.
How much data do you need for logistic regression?
A common guideline is at least 10 cases of the least frequent outcome per predictor, known as the events-per-variable rule. With 5 predictors and a rarer outcome that occurs 10% of the time, that works out to around 500 observations. It's a rule of thumb from Peduzzi's 1996 simulation study, so treat it as a starting point.
What is the difference between logit and logistic regression?
There's no difference: logit regression and logistic regression are two names for the same model. "Logit" refers to the log-odds function at the core of the method, so "logit regression assumptions" and "logistic regression assumptions" describe the same set of rules.