phit

OLS

Verification

Scope

Coefficients, covariance matrices, standard errors, test statistics, p-values, confidence intervals, fitted values, residuals, and fit statistics. Identical design matrices and missing-data exclusions across implementations.

References

Reference
R lm(), summary(), confint(), logLik()
Versions
R 4.6.1, statsmodels 0.15.0, numpy 2.5.4, Python 3.14.7, PHP 8.5.10

Data

Inputs
Seven designs: the simulated housing sample with one and two predictors, saved R fixtures for simple, multiple, no-intercept, and correlated designs, and a listwise-deletion case (6 rows, 4 retained).

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

105 comparisons in 7 cases: 105 pass, 0 fail, 0 skipped.

By case

Results by case
Case Comparisons Largest abs. error Status
Simulated housing, one predictor 15 2.9e-11 pass
Simulated housing, two predictors 15 1.2e-10 pass
One predictor 15 7.1e-14 pass
Two predictors 15 3.6e-14 pass
No intercept 15 1.4e-14 pass
Correlated predictors 15 2.7e-12 pass
Listwise deletion of missing values 15 1.5e-12 pass
All 105 comparisons
Every comparison
Case Quantity Criterion Values Package value Reference value Max abs. error statsmodels Status
Simulated housing, one predictor Coefficients |x − r| ≤ 1e-9 + 1e-7 × |r| 2 4.0e-13 1.7e-13 pass
Covariance matrix |x − r| ≤ 1e-9 + 1e-7 × |r| 4 7.3e-12 1.5e-11 pass
Standard errors |x − r| ≤ 1e-9 + 1e-7 × |r| 2 1.3e-15 2.8e-14 pass
t statistics |x − r| ≤ 1e-9 + 1e-7 × |r| 2 5.3e-15 1.8e-15 pass
p-values |x − r| ≤ 1e-9 + 1e-7 × |r| 2 1.1e-16 2.8e-16 pass
Confidence intervals |x − r| ≤ 1e-9 + 1e-7 × |r| 4 8.0e-13 2.4e-12 pass
Fitted values |x − r| ≤ 1e-9 + 1e-7 × |r| 8 9.1e-13 6.8e-13 pass
Residuals |x − r| ≤ 1e-9 + 1e-7 × |r| 8 8.5e-13 5.7e-13 pass
Residual sum of squares |x − r| ≤ 1e-9 + 1e-7 × |r| 1 204471.4031 204471.4031 2.9e-11 8.7e-11 pass
Residual variance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 34078.56718 34078.56718 7.3e-12 1.5e-11 pass
Residual standard deviation |x − r| ≤ 1e-9 + 1e-7 × |r| 1 184.6038114 184.6038114 2.8e-14 2.8e-14 pass
R² |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.8763743506 0.8763743506 0 0 pass
Adjusted R² |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.8557700757 0.8557700757 0 1.1e-16 pass
Residual degrees of freedom |x − r| ≤ 1e-9 + 1e-7 × |r| 1 6 6 0 0 pass
Log likelihood |x − r| ≤ 1e-9 + 1e-7 × |r| 1 -51.94647572 -51.94647572 7.1e-15 7.1e-15 pass
Simulated housing, two predictors Coefficients |x − r| ≤ 1e-9 + 1e-7 × |r| 3 1.3e-12 4.5e-13 pass
Covariance matrix |x − r| ≤ 1e-9 + 1e-7 × |r| 9 1.2e-10 1.5e-11 pass
Standard errors |x − r| ≤ 1e-9 + 1e-7 × |r| 3 1.7e-13 5.7e-14 pass
t statistics |x − r| ≤ 1e-9 + 1e-7 × |r| 3 4.7e-15 2.0e-15 pass
p-values |x − r| ≤ 1e-9 + 1e-7 × |r| 3 1.5e-15 5.0e-16 pass
Confidence intervals |x − r| ≤ 1e-9 + 1e-7 × |r| 6 2.0e-12 6.8e-13 pass
Fitted values |x − r| ≤ 1e-9 + 1e-7 × |r| 8 4.5e-13 2.3e-12 pass
Residuals |x − r| ≤ 1e-9 + 1e-7 × |r| 8 4.5e-13 2.4e-12 pass
Residual sum of squares |x − r| ≤ 1e-9 + 1e-7 × |r| 1 181323.1269 181323.1269 8.7e-11 2.9e-11 pass
Residual variance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 36264.62537 36264.62537 1.5e-11 7.3e-12 pass
Residual standard deviation |x − r| ≤ 1e-9 + 1e-7 × |r| 1 190.4327319 190.4327319 2.8e-14 2.8e-14 pass
R² |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.8903700519 0.8903700519 0 0 pass
Adjusted R² |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.8465180727 0.8465180727 0 0 pass
Residual degrees of freedom |x − r| ≤ 1e-9 + 1e-7 × |r| 1 5 5 0 0 pass
Log likelihood |x − r| ≤ 1e-9 + 1e-7 × |r| 1 -51.4658859 -51.4658859 7.1e-15 7.1e-15 pass
One predictor Coefficients |x − r| ≤ 1e-9 + 1e-7 × |r| 2 7.8e-16 4.7e-15 pass
Covariance matrix |x − r| ≤ 1e-9 + 1e-7 × |r| 4 2.4e-16 2.9e-16 pass
Standard errors |x − r| ≤ 1e-9 + 1e-7 × |r| 2 5.8e-16 7.2e-16 pass
t statistics |x − r| ≤ 1e-9 + 1e-7 × |r| 2 7.1e-14 1.1e-13 pass
p-values |x − r| ≤ 1e-9 + 1e-7 × |r| 2 3.8e-15 1.7e-14 pass
Confidence intervals |x − r| ≤ 1e-9 + 1e-7 × |r| 4 2.2e-15 7.0e-15 pass
Fitted values |x − r| ≤ 1e-9 + 1e-7 × |r| 5 1.8e-15 4.4e-15 pass
Residuals |x − r| ≤ 1e-9 + 1e-7 × |r| 5 1.9e-15 4.1e-15 pass
Residual sum of squares |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.107 0.107 3.6e-16 7.5e-16 pass
Residual variance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.03566666667 0.03566666667 1.2e-16 2.5e-16 pass
Residual standard deviation |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.1888562063 0.1888562063 3.3e-16 6.7e-16 pass
R² |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.9973585465 0.9973585465 1.1e-16 1.1e-16 pass
Adjusted R² |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.9964780619 0.9964780619 2.2e-16 2.2e-16 pass
Residual degrees of freedom |x − r| ≤ 1e-9 + 1e-7 × |r| 1 3 3 0 0 pass
Log likelihood |x − r| ≤ 1e-9 + 1e-7 × |r| 1 2.516218226 2.516218226 8.4e-15 1.6e-14 pass
Two predictors Coefficients |x − r| ≤ 1e-9 + 1e-7 × |r| 3 4.4e-15 1.3e-15 pass
Covariance matrix |x − r| ≤ 1e-9 + 1e-7 × |r| 9 7.5e-16 3.6e-16 pass
Standard errors |x − r| ≤ 1e-9 + 1e-7 × |r| 3 8.3e-16 4.4e-16 pass
t statistics |x − r| ≤ 1e-9 + 1e-7 × |r| 3 3.6e-14 1.8e-14 pass
p-values |x − r| ≤ 1e-9 + 1e-7 × |r| 3 7.6e-17 1.4e-17 pass
Confidence intervals |x − r| ≤ 1e-9 + 1e-7 × |r| 6 6.7e-15 2.2e-15 pass
Fitted values |x − r| ≤ 1e-9 + 1e-7 × |r| 10 3.6e-15 3.6e-15 pass
Residuals |x − r| ≤ 1e-9 + 1e-7 × |r| 10 3.1e-15 2.1e-15 pass
Residual sum of squares |x − r| ≤ 1e-9 + 1e-7 × |r| 1 2.054054054 2.054054054 5.8e-15 3.1e-15 pass
Residual variance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.2934362934 0.2934362934 8.3e-16 4.4e-16 pass
Residual standard deviation |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.5416976033 0.5416976033 7.8e-16 3.3e-16 pass
R² |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.9918001834 0.9918001834 0 0 pass
Adjusted R² |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.9894573787 0.9894573787 0 0 pass
Residual degrees of freedom |x − r| ≤ 1e-9 + 1e-7 × |r| 1 7 7 0 0 pass
Log likelihood |x − r| ≤ 1e-9 + 1e-7 × |r| 1 -6.275537005 -6.275537005 1.4e-14 6.2e-15 pass
No intercept Coefficients |x − r| ≤ 1e-9 + 1e-7 × |r| 2 6.1e-16 2.1e-15 pass
Covariance matrix |x − r| ≤ 1e-9 + 1e-7 × |r| 4 6.9e-17 9.7e-17 pass
Standard errors |x − r| ≤ 1e-9 + 1e-7 × |r| 2 1.1e-16 2.2e-16 pass
t statistics |x − r| ≤ 1e-9 + 1e-7 × |r| 2 1.4e-14 4.3e-14 pass
p-values |x − r| ≤ 1e-9 + 1e-7 × |r| 2 6.8e-16 1.2e-15 pass
Confidence intervals |x − r| ≤ 1e-9 + 1e-7 × |r| 4 2.2e-15 2.5e-15 pass
Fitted values |x − r| ≤ 1e-9 + 1e-7 × |r| 10 3.6e-15 1.1e-14 pass
Residuals |x − r| ≤ 1e-9 + 1e-7 × |r| 10 3.6e-15 1.1e-14 pass
Residual sum of squares |x − r| ≤ 1e-9 + 1e-7 × |r| 1 4.8515625 4.8515625 3.6e-15 8.0e-15 pass
Residual variance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.6064453125 0.6064453125 4.4e-16 1.0e-15 pass
Residual standard deviation |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.7787459871 0.7787459871 3.3e-16 6.7e-16 pass
R² |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.9969039167 0.9969039167 0 0 pass
Adjusted R² |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.9961298959 0.9961298959 0 0 pass
Residual degrees of freedom |x − r| ≤ 1e-9 + 1e-7 × |r| 1 8 8 0 0 pass
Log likelihood |x − r| ≤ 1e-9 + 1e-7 × |r| 1 -10.57296396 -10.57296396 3.6e-15 8.9e-15 pass
Correlated predictors Coefficients |x − r| ≤ 1e-9 + 1e-7 × |r| 3 7.2e-13 8.9e-14 pass
Covariance matrix |x − r| ≤ 1e-9 + 1e-7 × |r| 9 2.7e-12 2.9e-12 pass
Standard errors |x − r| ≤ 1e-9 + 1e-7 × |r| 3 1.1e-13 1.2e-13 pass
t statistics |x − r| ≤ 1e-9 + 1e-7 × |r| 3 9.9e-14 1.7e-13 pass
p-values |x − r| ≤ 1e-9 + 1e-7 × |r| 3 7.4e-14 1.3e-13 pass
Confidence intervals |x − r| ≤ 1e-9 + 1e-7 × |r| 6 9.7e-13 2.9e-13 pass
Fitted values |x − r| ≤ 1e-9 + 1e-7 × |r| 10 4.8e-14 2.9e-13 pass
Residuals |x − r| ≤ 1e-9 + 1e-7 × |r| 10 4.8e-14 2.9e-13 pass
Residual sum of squares |x − r| ≤ 1e-9 + 1e-7 × |r| 1 4.115877437 4.115877437 2.6e-14 5.9e-14 pass
Residual variance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.587982491 0.587982491 3.8e-15 8.4e-15 pass
Residual standard deviation |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.7668001637 0.7668001637 2.4e-15 5.6e-15 pass
R² |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.9878551861 0.9878551861 1.1e-16 1.1e-16 pass
Adjusted R² |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.9843852392 0.9843852392 1.1e-16 1.1e-16 pass
Residual degrees of freedom |x − r| ≤ 1e-9 + 1e-7 × |r| 1 7 7 0 0 pass
Log likelihood |x − r| ≤ 1e-9 + 1e-7 × |r| 1 -9.750720069 -9.750720069 3.2e-14 7.3e-14 pass
Listwise deletion of missing values Coefficients |x − r| ≤ 1e-9 + 1e-7 × |r| 2 1.8e-15 3.6e-15 pass
Covariance matrix |x − r| ≤ 1e-9 + 1e-7 × |r| 4 1.6e-16 1.4e-17 pass
Standard errors |x − r| ≤ 1e-9 + 1e-7 × |r| 2 1.1e-15 9.7e-17 pass
t statistics |x − r| ≤ 1e-9 + 1e-7 × |r| 2 1.5e-12 1.4e-13 pass
p-values |x − r| ≤ 1e-9 + 1e-7 × |r| 2 9.3e-15 8.9e-15 pass
Confidence intervals |x − r| ≤ 1e-9 + 1e-7 × |r| 4 6.1e-15 3.9e-15 pass
Fitted values |x − r| ≤ 1e-9 + 1e-7 × |r| 4 2.7e-15 4.4e-15 pass
Residuals |x − r| ≤ 1e-9 + 1e-7 × |r| 4 2.5e-15 4.3e-15 pass
Residual sum of squares |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.009 0.009 2.9e-16 2.9e-17 pass
Residual variance |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.0045 0.0045 1.4e-16 1.5e-17 pass
Residual standard deviation |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.06708203932 0.06708203932 1.1e-15 1.1e-16 pass
R² |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.9997772829 0.9997772829 0 0 pass
Adjusted R² |x − r| ≤ 1e-9 + 1e-7 × |r| 1 0.9996659243 0.9996659243 0 0 pass
Residual degrees of freedom |x − r| ≤ 1e-9 + 1e-7 × |r| 1 2 2 0 0 pass
Log likelihood |x − r| ≤ 1e-9 + 1e-7 × |r| 1 6.517895993 6.517895993 6.4e-14 7.1e-15 pass

Limitations

Exclusions

  • Perfect fits compare coefficients, predictions, residuals, and standard errors only: their t statistics, p-values, R², and likelihood are not finite or not stable.
  • R reports undefined quantities as NA; those entries are not compared.

Known differences

  • phit rejects a rank-deficient design; R lm() drops aliased columns and reports NA.
  • Without an intercept, R² is uncentered, as in R.

Reproduction

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