Math calculator

Ordinal Regression Calculator

One slope, every step.

One slope, every step

Two hundred and sixty customers rating a service as poor, fair or good, against how many minutes they waited. The model reports one coefficient, 0.4604, claiming each extra minute has the same effect on moving from poor to fair as on moving from fair to good. Fitting those two steps separately gives 0.4457 and 0.4508 — a spread of 0.0050 — and the parallel-lines test returns p = 0.8260. The assumption is doing no violence here, and the single coefficient is a genuine summary of both steps.

260 rows · 3 ordered categories (90 / 89 / 81) · 1 predictor

Coefficient 0.4604 — an odds ratio of 1.5848 per unit, at every cutpoint

The separate fits at each cutpoint are 0.4457 and 0.4508, a spread of 0.0050, and the parallel-lines test returns p = 0.8260. The assumption behind that single coefficient is doing no visible damage, so it summarises the separate steps rather than replacing them.

Pooled coefficient

0.4604

odds ratio 1.585 — p 4.69157e-10

Spread across cutpoints

0.0050

small enough to pool

Parallel-lines test

0.8260

assumption survives

Pseudo R²

0.0742

model p 7.573161e-11

The pooled fit against the separate ones

Coefficient at each cutpoint fitted separately, beside the single pooled coefficient
CutpointRows above itSeparate coefficientPooled coefficientGap
1 vs 2 and up1700.44570.4604-0.0147
2 vs 3 and up810.45080.4604-0.0097

Each separate row is an ordinary binary logistic fit: category above this cutpoint against category at or below it. Proportional odds is exactly the claim that these numbers are the same, so the cheapest way to test it is to fit them and look. The statistic is 0.0483 on 1 degree of freedom.

Category boundaries

Estimated thresholds and observed counts for each ordered category
CategoryObservedShareUpper boundary
1900.34621.4938
2890.34233.1264
3810.3115

The thresholds are cut points on an unobserved continuous scale, and they come back strictly increasing because the categories are ordered. They are rarely worth interpreting on their own — they carry the marginal distribution of the categories, not anything about the predictors.

With two categories there is only one cutpoint, nothing to pool, and this model reduces exactly to ordinary binary logistic regression — the two agree to 1.1e-10 in the verification suite, which is a check that the likelihood is the one it claims to be.

When the assumption fails, the separate fits above are themselves a usable answer — report them rather than the pooled figure. If the categories are not genuinely ordered, a multinomial model makes no ordering assumption at all, at the cost of a coefficient per category.

Separate fits shown Assumption tested Thresholds reported Pooled against separate A passing preset too

What this tool shows

On the second preset the model reports a single coefficient of 0.7052 with a p-value of 2.46e-16. The two cutpoints it pooled are 0.4171 and 0.9866. One is 2.4 times the other, the parallel-lines test returns p = 0.0000, and the pooled figure sits between them describing neither. Nothing in the headline output — not the standard error, not the p-value, not the odds ratio — hints at any of it. The first preset is the control: there the separate fits are 0.4457 and 0.4508, the test returns p = 0.8260, and pooling is exactly the right thing to do.

  • A proportional-odds fit with coefficients, odds ratios and thresholds
  • The separate binary fit at every cutpoint, which is what the assumption claims are equal
  • A parallel-lines test of that assumption, run on every input
  • A preset where the assumption fails while every headline statistic looks excellent
  • A preset where it holds, so pooling has something to be judged against
  • The reduction to ordinary binary logistic regression when there are two categories
Separate fits shown Assumption tested Thresholds reported Pooled against separate

One coefficient for every cutpoint is an assumption, not a result.

Updated 13 September 2026 · Works in any browser, no installation

Ordinal regression models an ordered outcome — poor, fair, good; disagree, neutral, agree — by estimating the odds of being above each cutpoint, with one shared coefficient per predictor. That sharing is the proportional-odds assumption, and it is what makes the output compact enough to read. It is also the thing most likely to be wrong, and it is cheap to test: fit the binary models the assumption says are equal and see whether they are.

At a glance

Formula shown
The model is logit P(Y ≤ c) = θ_c − xβ, so each category boundary gets its own threshold θ_c and every predictor gets one coefficient shared across all of them. exp(β) is the odds ratio for being in a higher category, and the assumption is that it is the same at every cutpoint. Fitting each cutpoint as a separate binary logistic regression gives the unpooled coefficients; twice the gap in log-likelihood between those and the constrained fit is the parallel-lines statistic.
Scenario support
Survey responses on a Likert scale, severity graded mild/moderate/severe, credit ratings, education levels, customer satisfaction bands, and any outcome whose categories have a genuine order but no meaningful spacing.
Educational estimate
Planning support from the values you enter — not professional advice.

The assumption underneath the single coefficient

An ordinal model with three categories has two cutpoints: poor against fair-or-good, and poor-or-fair against good. Each is a perfectly ordinary binary question, and each could have its own coefficient. Proportional odds is the decision to give them one coefficient between them.

That is why the output is compact and readable. It is also a testable claim about the data, and the cheapest test is the most direct one: fit the two binary models separately and compare. On the first preset they come back 0.4457 and 0.4508, a spread of 0.0050, and the parallel-lines test returns p = 0.8260. Pooling has cost nothing.

On the second preset they come back 0.4171 and 0.9866. Waiting time barely moves a customer from poor to fair and moves them substantially from fair to good, and those are genuinely different effects. The pooled coefficient is 0.7052 — between the two, describing neither — and it reports a p-value of 2.46e-16 and an odds ratio of 2.02. A reader given only that line would conclude the effect is strong, precisely estimated, and uniform.

The parallel-lines test catches it at p = 0.0000, which is why the test runs on every input here rather than being an option. The failure mode is not that the model breaks loudly; it is that it reports something clean and wrong.

What to do when it fails

A rejected parallel-lines test is not a reason to abandon the analysis. The separate fits in the table are themselves the answer — report 0.4171 for the first step and 0.9866 for the second, and say that the effect is concentrated in the upper step. That is more information than the pooled coefficient, not less.

A partial proportional-odds model formalises that: share the coefficient across cutpoints for predictors where the assumption holds, free it for the ones where it does not. It sits between the two extremes and is the right answer reasonably often, at the cost of a model whose output takes longer to explain.

The other route is to give up the ordering entirely and fit a multinomial model, which assumes nothing about the order and estimates a separate coefficient vector per category. That always fits at least as well and costs a great deal of precision, since it is estimating far more parameters from the same rows. Worth it when the categories are not really ordered; wasteful when they are.

One warning about sample size. The test needs enough rows in every category to estimate the separate fits, and with a sparse top category it has very little power — so a passing test on an unbalanced outcome is weak evidence. The category counts are printed beside the thresholds for exactly that reason.

Reading the coefficient

The odds ratio is for being in a higher category rather than for any particular category. An odds ratio of 1.58 means each extra unit of the predictor multiplies the odds of being above any given cutpoint by 1.58 — not that it raises the probability of the top category by 58%, which is the usual misreading.

The thresholds are cut points on an unobserved continuous scale and come back strictly increasing because the categories are ordered. They are rarely worth interpreting: they carry the marginal distribution of the categories and little else. Two studies with identical predictor effects and different category frequencies will have quite different thresholds.

The direction convention matters and differs between software packages. Here a positive coefficient means higher values of the predictor push toward higher categories, which is the reading most people expect. Some packages report the opposite sign for the same fit, so a coefficient copied between tools without checking is a common source of a reversed conclusion.

Treating the categories as numbers

The most common alternative to this model is not another model, it is ordinary least squares on the category codes — running a regression with the outcome coded 1, 2, 3. It is quick, the coefficient is easy to describe, and it asserts something the data does not support: that the step from poor to fair is the same size as the step from fair to good.

Ordinal codes carry order and nothing else. The distance between them is an artefact of the coding, and multiplying by a coefficient treats that artefact as a measurement. Recode the same categories as 1, 2, 5 and the least squares answer changes; the ordinal model’s answer does not change at all, because it uses only the ordering.

With many categories and roughly even spacing the two approaches often agree closely, which is why the shortcut survives. With few categories, uneven spacing, or a piled-up end of the scale, they do not, and the ordinal model is the one making the smaller assumption.

Reporting it

Report the parallel-lines test result with the coefficient, and report the separate cutpoint fits whenever the test rejects. A coefficient presented without any statement about the assumption it rests on is not interpretable, and on the second preset it would be actively misleading.

Give the category counts. They tell a reader how much power the assumption test had, and a passing test on an outcome where the top category holds nine observations is not evidence of anything. State the sign convention you are using. And where the assumption fails and you have reported the separate fits, say which step the effect is concentrated in — that is usually the substantive finding, and pooling destroys it.

Sources and methodology

References for the model and for testing its central assumption.

Method. The proportional-odds likelihood is maximised by Newton steps with a numerically differentiated Hessian and a backtracking line search, and standard errors come from the observed information. The separate cutpoint fits are ordinary binary logistic regressions by iteratively reweighted least squares, and the parallel-lines statistic is twice the gap between their combined log-likelihood and the constrained one. The suite checks the degenerate case exactly: with two categories the model must reduce to binary logistic regression, and it agrees to 1.1e-10, while on a two-by-two table the coefficient equals the log odds ratio in closed form. It further confirms the thresholds come back strictly increasing, the odds ratios are the exponentials of the coefficients, and the test stays quiet when the assumption holds while firing when it is violated. That engine is verified on every change against 490 assertions. The count and the per-case breakdown are published on the formula verification page.

Related calculators

Where this goes next:

Multinomial LogisticFit a multinomial model to an unordered outcome, with odds ratios per category and a measured demonstration that the baseline rewrites every coefficient.
Logistic RegressionLogistic regression with odds ratios converted to risk ratios at your own event rate, a likelihood ratio test, AUC, and separation reported rather than hidden.
Kruskal-WallisApplies the tie correction and shows it against the uncorrected value, because on ordinal data it moves p from 0.054 to 0.027 — across the conventional threshold, on identical data.
Spearman CorrelationComputes rho correctly as Pearson on the midranks, and beside it the 6Σd²/(n(n²−1)) shortcut every textbook teaches — which is exact only when no two values tie, and overstates the correlation when they do.
Cliff's DeltaNon-parametric effect size from the full pairwise win–loss–tie count, with a DeLong interval, magnitude bands and Cohen's d for comparison.
Cramer's VThe effect size a chi-square test does not give you, with your own table rescaled six ways: the same 3x3 pattern gives V = 0.27136852 at n = 90 and at n = 1,800 while p falls from 0.0101 to 3.6e-56.

More in Math, or browse all calculators.

Educational use disclaimer

An educational tool. The proportional-odds assumption is central and frequently violated; the parallel-lines test reported here has limited power when categories are sparse, so a passing result is weak evidence. Sign conventions for ordinal coefficients differ between software packages, and coefficients copied between tools should be checked against the direction stated here.

How we calculate · Found an error? email us

Authorship & verification

Written and maintained by , a business operator who builds spreadsheet-based calculators.

What's changed (5 updates)

Published 13 September 2026

  1. Published a proportional-odds fit with the separate binary fit at every cutpoint printed beside it.
  2. Ran a parallel-lines test of the assumption on every input rather than offering it as an option.
  3. Shipped a preset where the assumption fails while the pooled coefficient reports p = 2.46e-16.
  4. Added a preset where it holds, so pooling has something to be judged against.
  5. Noted that sign conventions for ordinal coefficients differ between software packages.

Add this calculator to your site

Responsive embed — and private: nothing your visitors type leaves their browser.