phit

Probit 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(link = "probit"))
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

Results by case
Case Comparisons Largest abs. error Status
Simulated learning sample 13 6.4e-10 pass
One predictor 13 2.7e-10 pass
No intercept 13 5.6e-11 pass
Intercept only 13 2.0e-12 pass
Correlated predictors 13 2.7e-10 pass
Imbalanced outcomes 13 1.4e-10 pass
Listwise deletion of missing values 13 3.7e-10 pass
All 91 comparisons
Every comparison
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.9e-10 1.3e-10 pass
Covariance matrix |x − r| ≤ 1e-9 + 1e-7 × |r| 9 1.7e-10 1.5e-10 pass
Standard errors |x − r| ≤ 1e-9 + 1e-7 × |r| 3 1.2e-10 1.1e-10 pass
z statistics |x − r| ≤ 1e-9 + 1e-7 × |r| 3 6.4e-10 5.8e-10 pass
p-values |x − r| ≤ 1e-9 + 1e-7 × |r| 3 1.9e-10 1.8e-10 pass
Confidence intervals |x − r| ≤ 1e-9 + 1e-7 × |r| 6 4.2e-10 3.3e-10 pass
Fitted values |x − r| ≤ 1e-9 + 1e-7 × |r| 120 3.3e-11 3.5e-11 pass
Residuals |x − r| ≤ 1e-9 + 1e-7 × |r| 120 3.3e-11 3.5e-11 pass
Log likelihood |x − r| ≤ 1e-9 + 1e-7 × |r| 1 -72.92760486 -72.92760486 1.4e-10 1.4e-14 pass
Deviance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 145.8552097 145.8552097 2.7e-10 0 pass
Null deviance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 162.2990865 162.2990865 8.5e-14 5.7e-14 pass
AIC |x − r| ≤ 1e-9 + 1e-7 × |r| 1 151.8552097 151.8552097 2.7e-10 2.8e-14 pass
Residual degrees of freedom |x − r| ≤ 1e-9 + 1e-7 × |r| 1 117 117 0 0 pass
One predictor Coefficients |x − r| ≤ 1e-9 + 1e-7 × |r| 2 5.6e-11 1.5e-13 pass
Covariance matrix |x − r| ≤ 1e-9 + 1e-7 × |r| 4 4.2e-12 1.3e-12 pass
Standard errors |x − r| ≤ 1e-9 + 1e-7 × |r| 2 7.1e-12 2.2e-12 pass
z statistics |x − r| ≤ 1e-9 + 1e-7 × |r| 2 8.9e-11 3.3e-11 pass
p-values |x − r| ≤ 1e-9 + 1e-7 × |r| 2 2.5e-14 7.2e-15 pass
Confidence intervals |x − r| ≤ 1e-9 + 1e-7 × |r| 4 7.0e-11 4.5e-12 pass
Fitted values |x − r| ≤ 1e-9 + 1e-7 × |r| 120 1.2e-11 3.1e-14 pass
Residuals |x − r| ≤ 1e-9 + 1e-7 × |r| 120 1.2e-11 3.1e-14 pass
Log likelihood |x − r| ≤ 1e-9 + 1e-7 × |r| 1 -72.92761153 -72.92761153 1.4e-10 0 pass
Deviance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 145.8552231 145.8552231 2.7e-10 2.8e-14 pass
Null deviance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 162.2990865 162.2990865 8.5e-14 5.7e-14 pass
AIC |x − r| ≤ 1e-9 + 1e-7 × |r| 1 149.8552231 149.8552231 2.7e-10 0 pass
Residual degrees of freedom |x − r| ≤ 1e-9 + 1e-7 × |r| 1 118 118 0 0 pass
No intercept Coefficients |x − r| ≤ 1e-9 + 1e-7 × |r| 2 7.7e-12 2.8e-15 pass
Covariance matrix |x − r| ≤ 1e-9 + 1e-7 × |r| 4 1.3e-13 1.9e-15 pass
Standard errors |x − r| ≤ 1e-9 + 1e-7 × |r| 2 1.2e-12 1.8e-14 pass
z statistics |x − r| ≤ 1e-9 + 1e-7 × |r| 2 5.6e-11 1.3e-12 pass
p-values |x − r| ≤ 1e-9 + 1e-7 × |r| 2 2.0e-14 6.7e-16 pass
Confidence intervals |x − r| ≤ 1e-9 + 1e-7 × |r| 4 1.0e-11 3.7e-14 pass
Fitted values |x − r| ≤ 1e-9 + 1e-7 × |r| 120 1.7e-11 5.2e-15 pass
Residuals |x − r| ≤ 1e-9 + 1e-7 × |r| 120 1.7e-11 5.2e-15 pass
Log likelihood |x − r| ≤ 1e-9 + 1e-7 × |r| 1 -74.53280174 -74.53280174 7.9e-12 4.3e-14 pass
Deviance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 149.0656035 149.0656035 1.6e-11 5.7e-14 pass
Null deviance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 166.3553233 166.3553233 0 0 pass
AIC |x − r| ≤ 1e-9 + 1e-7 × |r| 1 153.0656035 153.0656035 1.6e-11 8.5e-14 pass
Residual degrees of freedom |x − r| ≤ 1e-9 + 1e-7 × |r| 1 118 118 0 0 pass
Intercept only Coefficients |x − r| ≤ 1e-9 + 1e-7 × |r| 1 8.3e-17 1.9e-16 pass
Covariance matrix |x − r| ≤ 1e-9 + 1e-7 × |r| 1 6.9e-18 1.0e-17 pass
Standard errors |x − r| ≤ 1e-9 + 1e-7 × |r| 1 2.8e-17 4.2e-17 pass
z statistics |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0 2.7e-15 pass
p-values |x − r| ≤ 1e-9 + 1e-7 × |r| 1 2.0e-12 2.9e-16 pass
Confidence intervals |x − r| ≤ 1e-9 + 1e-7 × |r| 2 2.2e-16 3.6e-16 pass
Fitted values |x − r| ≤ 1e-9 + 1e-7 × |r| 120 5.6e-17 5.6e-17 pass
Residuals |x − r| ≤ 1e-9 + 1e-7 × |r| 120 5.6e-17 1.1e-16 pass
Log likelihood |x − r| ≤ 1e-9 + 1e-7 × |r| 1 -81.14954326 -81.14954326 5.7e-14 4.3e-14 pass
Deviance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 162.2990865 162.2990865 1.1e-13 8.5e-14 pass
Null deviance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 162.2990865 162.2990865 8.5e-14 5.7e-14 pass
AIC |x − r| ≤ 1e-9 + 1e-7 × |r| 1 164.2990865 164.2990865 1.1e-13 8.5e-14 pass
Residual degrees of freedom |x − r| ≤ 1e-9 + 1e-7 × |r| 1 119 119 0 0 pass
Correlated predictors Coefficients |x − r| ≤ 1e-9 + 1e-7 × |r| 3 5.6e-11 3.2e-11 pass
Covariance matrix |x − r| ≤ 1e-9 + 1e-7 × |r| 9 2.2e-11 3.9e-11 pass
Standard errors |x − r| ≤ 1e-9 + 1e-7 × |r| 3 1.2e-11 2.2e-11 pass
z statistics |x − r| ≤ 1e-9 + 1e-7 × |r| 3 1.8e-10 1.3e-10 pass
p-values |x − r| ≤ 1e-9 + 1e-7 × |r| 3 4.5e-11 2.0e-11 pass
Confidence intervals |x − r| ≤ 1e-9 + 1e-7 × |r| 6 7.6e-11 7.6e-11 pass
Fitted values |x − r| ≤ 1e-9 + 1e-7 × |r| 120 1.3e-11 4.3e-12 pass
Residuals |x − r| ≤ 1e-9 + 1e-7 × |r| 120 1.3e-11 4.3e-12 pass
Log likelihood |x − r| ≤ 1e-9 + 1e-7 × |r| 1 -72.86030716 -72.86030716 1.4e-10 1.4e-14 pass
Deviance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 145.7206143 145.7206143 2.7e-10 0 pass
Null deviance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 162.2990865 162.2990865 8.5e-14 5.7e-14 pass
AIC |x − r| ≤ 1e-9 + 1e-7 × |r| 1 151.7206143 151.7206143 2.7e-10 2.8e-14 pass
Residual degrees of freedom |x − r| ≤ 1e-9 + 1e-7 × |r| 1 117 117 0 0 pass
Imbalanced outcomes Coefficients |x − r| ≤ 1e-9 + 1e-7 × |r| 3 1.0e-10 6.6e-13 pass
Covariance matrix |x − r| ≤ 1e-9 + 1e-7 × |r| 9 5.7e-11 3.8e-12 pass
Standard errors |x − r| ≤ 1e-9 + 1e-7 × |r| 3 1.7e-11 1.2e-12 pass
z statistics |x − r| ≤ 1e-9 + 1e-7 × |r| 3 1.0e-10 1.3e-12 pass
p-values |x − r| ≤ 1e-9 + 1e-7 × |r| 3 2.0e-11 9.1e-14 pass
Confidence intervals |x − r| ≤ 1e-9 + 1e-7 × |r| 6 1.4e-10 2.9e-12 pass
Fitted values |x − r| ≤ 1e-9 + 1e-7 × |r| 120 3.8e-12 3.8e-14 pass
Residuals |x − r| ≤ 1e-9 + 1e-7 × |r| 120 3.8e-12 3.8e-14 pass
Log likelihood |x − r| ≤ 1e-9 + 1e-7 × |r| 1 -14.99359308 -14.99359308 3.4e-11 3.6e-15 pass
Deviance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 29.98718615 29.98718615 6.7e-11 7.1e-15 pass
Null deviance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 35.07473904 35.07473904 1.6e-13 1.6e-13 pass
AIC |x − r| ≤ 1e-9 + 1e-7 × |r| 1 35.98718615 35.98718615 6.7e-11 7.1e-15 pass
Residual degrees of freedom |x − r| ≤ 1e-9 + 1e-7 × |r| 1 117 117 0 0 pass
Listwise deletion of missing values Coefficients |x − r| ≤ 1e-9 + 1e-7 × |r| 3 5.9e-11 3.9e-14 pass
Covariance matrix |x − r| ≤ 1e-9 + 1e-7 × |r| 9 1.9e-11 7.0e-15 pass
Standard errors |x − r| ≤ 1e-9 + 1e-7 × |r| 3 1.3e-11 6.1e-15 pass
z statistics |x − r| ≤ 1e-9 + 1e-7 × |r| 3 5.6e-11 1.6e-13 pass
p-values |x − r| ≤ 1e-9 + 1e-7 × |r| 3 7.1e-12 5.4e-14 pass
Confidence intervals |x − r| ≤ 1e-9 + 1e-7 × |r| 6 8.5e-11 4.9e-14 pass
Fitted values |x − r| ≤ 1e-9 + 1e-7 × |r| 118 1.5e-11 1.2e-14 pass
Residuals |x − r| ≤ 1e-9 + 1e-7 × |r| 118 1.5e-11 1.2e-14 pass
Log likelihood |x − r| ≤ 1e-9 + 1e-7 × |r| 1 -71.01719103 -71.01719103 1.9e-10 1.4e-14 pass
Deviance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 142.0343821 142.0343821 3.7e-10 2.8e-14 pass
Null deviance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 159.4569404 159.4569404 2.3e-13 2.3e-13 pass
AIC |x − r| ≤ 1e-9 + 1e-7 × |r| 1 148.0343821 148.0343821 3.7e-10 2.8e-14 pass
Residual degrees of freedom |x − r| ≤ 1e-9 + 1e-7 × |r| 1 115 115 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.
  • The covariance is the inverse expected information, as in glm(); a discrete-model probit fit with observed-Hessian covariance can differ.

Reproduction

From the repository root
cargo build -p phit --release --locked
.context/notebooks-venv/bin/python docs/verifications/compare_probit.py
Raw record
site/verifications/probit.json
Full results
docs/verifications/probit-results.json
Input data
docs/data/learning.csv