Logistic regression
Verification
Scope
Coefficients, covariance matrices, standard errors, z statistics, p-values, confidence intervals, fitted values, residuals, log likelihood, deviance, null deviance, and AIC. Identical design matrices and missing-data exclusions across implementations.
References
- Reference
- R glm(family = binomial)
- Versions
- R 4.6.1, statsmodels 0.15.0, numpy 2.5.4, Python 3.14.7, PHP 8.5.10
Data
- Inputs
- Six saved R fixtures: the simulated learning sample, one predictor, no intercept, intercept only, correlated columns, and imbalanced outcomes, plus a listwise-deletion case with two dropped rows.
Method
Each design is fitted by R, statsmodels, and phit's matrix function, with the intercept supplied as a column. Every quantity is compared with R, and each case's status is recomputed from the saved values.
- Check
- Comparison with a reference implementation
- Recorded
- 2026-11-01, PHP 8.5.10, macOS 27.0.1 (arm64), commit 066e2e1
Tolerances
|x − r| ≤ 1e-9 + 1e-7 × |r|
Applies to: Numerical results
exact equality
Applies to: Row indices, counts, and warnings
x: package value; r: reference value. Absolute error: |x − r|. Max errors are over the values a row compares. statsmodels: that implementation’s error against the same reference.
Results
91 comparisons in 7 cases: 91 pass, 0 fail, 0 skipped.
By case
| Case | Comparisons | Largest abs. error | Status |
|---|---|---|---|
| Simulated learning sample | 13 | 1.1e-11 | pass |
| One predictor | 13 | 1.8e-12 | pass |
| No intercept | 13 | 3.8e-12 | pass |
| Intercept only | 13 | 6.5e-13 | pass |
| Correlated predictors | 13 | 1.0e-12 | pass |
| Imbalanced outcomes | 13 | 3.5e-8 | pass |
| Listwise deletion of missing values | 13 | 1.4e-11 | pass |
All 91 comparisons
| Case | Quantity | Criterion | Values | Package value | Reference value | Max abs. error | statsmodels | Status |
|---|---|---|---|---|---|---|---|---|
| Simulated learning sample | Coefficients | |x − r| ≤ 1e-9 + 1e-7 × |r| | 3 | 1.1e-14 | 2.5e-16 | pass | ||
| Covariance matrix | |x − r| ≤ 1e-9 + 1e-7 × |r| | 9 | 8.6e-13 | 9.0e-13 | pass | |||
| Standard errors | |x − r| ≤ 1e-9 + 1e-7 × |r| | 3 | 2.9e-13 | 3.0e-13 | pass | |||
| z statistics | |x − r| ≤ 1e-9 + 1e-7 × |r| | 3 | 4.1e-13 | 4.4e-13 | pass | |||
| p-values | |x − r| ≤ 1e-9 + 1e-7 × |r| | 3 | 1.1e-11 | 6.7e-14 | pass | |||
| Confidence intervals | |x − r| ≤ 1e-9 + 1e-7 × |r| | 6 | 5.8e-13 | 6.0e-13 | pass | |||
| Fitted values | |x − r| ≤ 1e-9 + 1e-7 × |r| | 80 | 1.2e-15 | 7.8e-16 | pass | |||
| Residuals | |x − r| ≤ 1e-9 + 1e-7 × |r| | 80 | 1.2e-15 | 7.8e-16 | pass | |||
| Log likelihood | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | -49.48432506 | -49.48432506 | 1.4e-14 | 2.1e-14 | pass | |
| Deviance | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 98.96865011 | 98.96865011 | 2.8e-14 | 4.3e-14 | pass | |
| Null deviance | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 104.7748889 | 104.7748889 | 1.4e-13 | 1.3e-13 | pass | |
| AIC | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 104.9686501 | 104.9686501 | 2.8e-14 | 4.3e-14 | pass | |
| Residual degrees of freedom | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 77 | 77 | 0 | 0 | pass | |
| One predictor | Coefficients | |x − r| ≤ 1e-9 + 1e-7 × |r| | 2 | 1.1e-15 | 2.2e-16 | pass | ||
| Covariance matrix | |x − r| ≤ 1e-9 + 1e-7 × |r| | 4 | 3.2e-13 | 3.2e-13 | pass | |||
| Standard errors | |x − r| ≤ 1e-9 + 1e-7 × |r| | 2 | 2.8e-13 | 2.8e-13 | pass | |||
| z statistics | |x − r| ≤ 1e-9 + 1e-7 × |r| | 2 | 1.4e-12 | 1.4e-12 | pass | |||
| p-values | |x − r| ≤ 1e-9 + 1e-7 × |r| | 2 | 1.8e-12 | 6.9e-14 | pass | |||
| Confidence intervals | |x − r| ≤ 1e-9 + 1e-7 × |r| | 4 | 5.6e-13 | 5.6e-13 | pass | |||
| Fitted values | |x − r| ≤ 1e-9 + 1e-7 × |r| | 80 | 1.9e-16 | 1.1e-16 | pass | |||
| Residuals | |x − r| ≤ 1e-9 + 1e-7 × |r| | 80 | 2.2e-16 | 1.1e-16 | pass | |||
| Log likelihood | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | -50.19852352 | -50.19852352 | 7.1e-15 | 1.4e-14 | pass | |
| Deviance | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 100.397047 | 100.397047 | 2.8e-14 | 4.3e-14 | pass | |
| Null deviance | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 104.7748889 | 104.7748889 | 1.4e-13 | 1.3e-13 | pass | |
| AIC | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 104.397047 | 104.397047 | 1.4e-14 | 2.8e-14 | pass | |
| Residual degrees of freedom | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 78 | 78 | 0 | 0 | pass | |
| No intercept | Coefficients | |x − r| ≤ 1e-9 + 1e-7 × |r| | 2 | 1.4e-16 | 3.5e-18 | pass | ||
| Covariance matrix | |x − r| ≤ 1e-9 + 1e-7 × |r| | 4 | 3.0e-15 | 3.0e-15 | pass | |||
| Standard errors | |x − r| ≤ 1e-9 + 1e-7 × |r| | 2 | 1.5e-14 | 1.5e-14 | pass | |||
| z statistics | |x − r| ≤ 1e-9 + 1e-7 × |r| | 2 | 4.4e-13 | 4.3e-13 | pass | |||
| p-values | |x − r| ≤ 1e-9 + 1e-7 × |r| | 2 | 3.8e-12 | 4.7e-14 | pass | |||
| Confidence intervals | |x − r| ≤ 1e-9 + 1e-7 × |r| | 4 | 3.0e-14 | 2.9e-14 | pass | |||
| Fitted values | |x − r| ≤ 1e-9 + 1e-7 × |r| | 80 | 2.2e-16 | 1.7e-16 | pass | |||
| Residuals | |x − r| ≤ 1e-9 + 1e-7 × |r| | 80 | 2.2e-16 | 2.2e-16 | pass | |||
| Log likelihood | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | -51.9402042 | -51.9402042 | 7.1e-15 | 7.1e-15 | pass | |
| Deviance | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 103.8804084 | 103.8804084 | 1.4e-14 | 1.4e-14 | pass | |
| Null deviance | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 110.9035489 | 110.9035489 | 0 | 0 | pass | |
| AIC | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 107.8804084 | 107.8804084 | 1.4e-14 | 1.4e-14 | pass | |
| Residual degrees of freedom | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 78 | 78 | 0 | 0 | pass | |
| Intercept only | Coefficients | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 1.1e-16 | 1.1e-16 | pass | ||
| Covariance matrix | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 3.1e-16 | 3.3e-16 | pass | |||
| Standard errors | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 6.7e-16 | 6.9e-16 | pass | |||
| z statistics | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 6.7e-15 | 7.1e-15 | pass | |||
| p-values | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 6.5e-13 | 3.0e-16 | pass | |||
| Confidence intervals | |x − r| ≤ 1e-9 + 1e-7 × |r| | 2 | 1.6e-15 | 1.6e-15 | pass | |||
| Fitted values | |x − r| ≤ 1e-9 + 1e-7 × |r| | 80 | 0 | 0 | pass | |||
| Residuals | |x − r| ≤ 1e-9 + 1e-7 × |r| | 80 | 0 | 0 | pass | |||
| Log likelihood | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | -52.38744444 | -52.38744444 | 7.1e-14 | 6.4e-14 | pass | |
| Deviance | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 104.7748889 | 104.7748889 | 1.8e-13 | 1.7e-13 | pass | |
| Null deviance | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 104.7748889 | 104.7748889 | 1.4e-13 | 1.3e-13 | pass | |
| AIC | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 106.7748889 | 106.7748889 | 1.4e-13 | 1.3e-13 | pass | |
| Residual degrees of freedom | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 79 | 79 | 0 | 0 | pass | |
| Correlated predictors | Coefficients | |x − r| ≤ 1e-9 + 1e-7 × |r| | 3 | 9.3e-15 | 3.8e-14 | pass | ||
| Covariance matrix | |x − r| ≤ 1e-9 + 1e-7 × |r| | 9 | 9.6e-13 | 1.3e-12 | pass | |||
| Standard errors | |x − r| ≤ 1e-9 + 1e-7 × |r| | 3 | 2.8e-13 | 3.8e-13 | pass | |||
| z statistics | |x − r| ≤ 1e-9 + 1e-7 × |r| | 3 | 1.0e-12 | 1.1e-12 | pass | |||
| p-values | |x − r| ≤ 1e-9 + 1e-7 × |r| | 3 | 1.9e-13 | 7.8e-14 | pass | |||
| Confidence intervals | |x − r| ≤ 1e-9 + 1e-7 × |r| | 6 | 5.7e-13 | 7.8e-13 | pass | |||
| Fitted values | |x − r| ≤ 1e-9 + 1e-7 × |r| | 80 | 1.2e-15 | 2.1e-15 | pass | |||
| Residuals | |x − r| ≤ 1e-9 + 1e-7 × |r| | 80 | 1.2e-15 | 2.1e-15 | pass | |||
| Log likelihood | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | -50.03090901 | -50.03090901 | 0 | 7.1e-15 | pass | |
| Deviance | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 100.061818 | 100.061818 | 0 | 1.4e-14 | pass | |
| Null deviance | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 104.7748889 | 104.7748889 | 1.4e-13 | 1.3e-13 | pass | |
| AIC | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 106.061818 | 106.061818 | 0 | 1.4e-14 | pass | |
| Residual degrees of freedom | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 77 | 77 | 0 | 0 | pass | |
| Imbalanced outcomes | Coefficients | |x − r| ≤ 1e-9 + 1e-7 × |r| | 3 | 4.4e-15 | 1.8e-15 | pass | ||
| Covariance matrix | |x − r| ≤ 1e-9 + 1e-7 × |r| | 9 | 3.5e-8 | 3.5e-8 | pass | |||
| Standard errors | |x − r| ≤ 1e-9 + 1e-7 × |r| | 3 | 5.3e-9 | 5.3e-9 | pass | |||
| z statistics | |x − r| ≤ 1e-9 + 1e-7 × |r| | 3 | 2.7e-9 | 2.7e-9 | pass | |||
| p-values | |x − r| ≤ 1e-9 + 1e-7 × |r| | 3 | 7.5e-10 | 7.4e-10 | pass | |||
| Confidence intervals | |x − r| ≤ 1e-9 + 1e-7 × |r| | 6 | 1.0e-8 | 1.0e-8 | pass | |||
| Fitted values | |x − r| ≤ 1e-9 + 1e-7 × |r| | 80 | 2.2e-16 | 3.3e-16 | pass | |||
| Residuals | |x − r| ≤ 1e-9 + 1e-7 × |r| | 80 | 2.2e-16 | 3.3e-16 | pass | |||
| Log likelihood | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | -14.63309801 | -14.63309801 | 7.1e-15 | 7.1e-15 | pass | |
| Deviance | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 29.26619601 | 29.26619601 | 1.4e-14 | 1.4e-14 | pass | |
| Null deviance | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 31.76243894 | 31.76243894 | 4.6e-14 | 4.6e-14 | pass | |
| AIC | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 35.26619601 | 35.26619601 | 1.4e-14 | 1.4e-14 | pass | |
| Residual degrees of freedom | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 77 | 77 | 0 | 0 | pass | |
| Listwise deletion of missing values | Coefficients | |x − r| ≤ 1e-9 + 1e-7 × |r| | 3 | 6.2e-15 | 1.6e-14 | pass | ||
| Covariance matrix | |x − r| ≤ 1e-9 + 1e-7 × |r| | 9 | 1.1e-12 | 1.2e-12 | pass | |||
| Standard errors | |x − r| ≤ 1e-9 + 1e-7 × |r| | 3 | 3.8e-13 | 4.1e-13 | pass | |||
| z statistics | |x − r| ≤ 1e-9 + 1e-7 × |r| | 3 | 5.2e-13 | 5.6e-13 | pass | |||
| p-values | |x − r| ≤ 1e-9 + 1e-7 × |r| | 3 | 1.4e-11 | 9.3e-14 | pass | |||
| Confidence intervals | |x − r| ≤ 1e-9 + 1e-7 × |r| | 6 | 7.6e-13 | 8.1e-13 | pass | |||
| Fitted values | |x − r| ≤ 1e-9 + 1e-7 × |r| | 78 | 1.2e-15 | 2.4e-15 | pass | |||
| Residuals | |x − r| ≤ 1e-9 + 1e-7 × |r| | 78 | 1.2e-15 | 2.4e-15 | pass | |||
| Log likelihood | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | -48.882739 | -48.882739 | 7.1e-15 | 1.4e-14 | pass | |
| Deviance | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 97.76547801 | 97.76547801 | 1.4e-14 | 2.8e-14 | pass | |
| Null deviance | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 102.9450296 | 102.9450296 | 4.3e-14 | 2.8e-14 | pass | |
| AIC | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 103.765478 | 103.765478 | 1.4e-14 | 2.8e-14 | pass | |
| Residual degrees of freedom | |x − r| ≤ 1e-9 + 1e-7 × |r| | 1 | 75 | 75 | 0 | 0 | pass |
Limitations
Exclusions
- Separated and quasi-separated designs are rejected; their tests are in the test-suite record, not compared with R.
Known differences
- R intervals come from confint.default() (Wald), not profile-likelihood confint().
- phit reports the covariance at the converged coefficients; R glm() evaluates it at the last IRLS iterate. With the tight fitting tolerances used here the difference is negligible. See the R compatibility page for details.
- Without an intercept, the null deviance uses probability 0.5.
Reproduction
cargo build -p phit --release --locked
.context/notebooks-venv/bin/python docs/verifications/compare_logistic.py
- Raw record
- site/verifications/logistic.json
- Full results
- docs/verifications/logistic-results.json
- Input data
- docs/data/learning.csv