Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Performance benchmarks comparing bossanova’s model implementations across different backends (JAX vs NumPy) and against R reference implementations.

Environment

PropertyValue
Generated2026-03-04 09:28 UTC
Python3.14.2
PlatformDarwin arm64
bossanova0.1.0.dev20
R availableYes

Methodology

Linear Models (LM)

Small (n=500, p=5)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit0.915 ms0.419 ms0.552 ms0.60×1.32×
infer0.430 ms0.367 ms0.125 ms0.29×0.34×
fit+infer1.544 ms0.843 ms0.642 ms0.42×0.76×
predict0.080 ms0.055 ms0.323 ms4.04×5.89×

Medium (n=2000, p=10)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit2.853 ms1.593 ms0.914 ms0.32×0.57×
infer0.505 ms0.590 ms0.308 ms0.61×0.52×
fit+infer3.352 ms2.659 ms1.261 ms0.38×0.47×
predict0.138 ms0.153 ms0.428 ms3.09×2.80×

Large (n=5000, p=20)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit7.992 ms5.791 ms2.335 ms0.29×0.40×
infer0.751 ms0.642 ms0.750 ms1.00×1.17×
fit+infer8.745 ms6.675 ms3.406 ms0.39×0.51×
predict0.390 ms0.370 ms0.694 ms1.78×1.87×

XLarge (n=10000, p=50)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit36.039 ms31.383 ms13.128 ms0.36×0.42×
infer0.817 ms0.735 ms1.146 ms1.40×1.56×
fit+infer33.336 ms32.206 ms16.251 ms0.49×0.50×
predict3.907 ms2.947 ms2.357 ms0.60×0.80×

Average minimum time (ms) by method and backend:

Backendfitinferfit+inferpredict
JAX11.95 ms0.63 ms11.74 ms1.13 ms
NUMPY9.80 ms0.58 ms10.60 ms0.88 ms
R4.23 ms0.58 ms5.39 ms0.95 ms

Generalized Linear Models (GLM)

Small (n=500, p=5, binomial)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit1.935 ms3.761 ms0.867 ms0.45×0.23×
infer0.281 ms0.214 ms0.169 ms0.60×0.79×
fit+infer2.468 ms3.574 ms1.009 ms0.41×0.28×
predict0.105 ms0.136 ms0.036 ms0.34×0.26×

Medium (n=2000, p=10, binomial)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit2.448 ms4.031 ms2.717 ms1.11×0.67×
infer0.249 ms0.231 ms0.344 ms1.38×1.49×
fit+infer2.842 ms3.841 ms3.166 ms1.11×0.82×
predict0.188 ms0.179 ms0.036 ms0.19×0.20×

Large (n=5000, p=20, binomial)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit6.724 ms19.553 ms11.842 ms1.76×0.61×
infer0.520 ms0.257 ms0.988 ms1.90×3.85×
fit+infer6.368 ms20.255 ms12.745 ms2.00×0.63×
predict1.801 ms0.962 ms0.045 ms0.03×0.05×

Small Poisson (n=500, p=5, poisson)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit9.534 ms1.864 ms1.264 ms0.13×0.68×
infer0.300 ms0.252 ms0.146 ms0.49×0.58×
fit+infer2.655 ms2.184 ms1.367 ms0.51×0.63×
predict0.082 ms0.047 ms0.046 ms0.56×0.97×

Medium Poisson (n=2000, p=10, poisson)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit2.590 ms3.742 ms3.021 ms1.17×0.81×
infer0.407 ms0.309 ms0.421 ms1.03×1.36×
fit+infer3.031 ms4.155 ms3.457 ms1.14×0.83×
predict0.165 ms0.127 ms0.043 ms0.26×0.34×

Average minimum time (ms) by method and backend:

Backendfitinferfit+inferpredict
JAX4.65 ms0.35 ms3.47 ms0.47 ms
NUMPY6.59 ms0.25 ms6.80 ms0.29 ms
R3.94 ms0.41 ms4.35 ms0.04 ms

Linear Mixed Models (LMER)

Small (20 subjects × 10 obs = 200 rows, p=3)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit10.620 ms6.848 ms14.718 ms1.39×2.15×
infer6.484 ms7.155 ms2.733 ms0.42×0.38×
fit+infer22.589 ms20.532 ms16.233 ms0.72×0.79×
predict0.073 ms0.044 ms0.110 ms1.50×2.47×

Medium (50 subjects × 20 obs = 1000 rows, p=5)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit18.896 ms5.846 ms21.886 ms1.16×3.74×
infer5.718 ms8.461 ms2.745 ms0.48×0.32×
fit+infer37.444 ms16.489 ms23.996 ms0.64×1.46×
predict0.117 ms0.087 ms0.130 ms1.11×1.49×

Large (100 subjects × 50 obs = 5000 rows, p=8)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit12.822 ms8.509 ms78.625 ms6.13×9.24×
infer8.606 ms9.259 ms3.663 ms0.43×0.40×
fit+infer17.406 ms19.282 ms77.869 ms4.47×4.04×
predict0.252 ms0.426 ms0.131 ms0.52×0.31×

XLarge (200 subjects × 50 obs = 10000 rows, p=10)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit14.899 ms12.332 ms162.542 ms10.91×13.18×
infer9.477 ms11.395 ms4.014 ms0.42×0.35×
fit+infer22.444 ms27.538 ms173.031 ms7.71×6.28×
predict0.596 ms0.829 ms0.194 ms0.33×0.23×

Average minimum time (ms) by method and backend:

Backendfitinferfit+inferpredict
JAX14.31 ms7.57 ms24.97 ms0.26 ms
NUMPY8.38 ms9.07 ms20.96 ms0.35 ms
R69.44 ms3.29 ms72.78 ms0.14 ms

Generalized Linear Mixed Models (GLMER)

Small Binomial (20 subjects × 10 obs = 200 rows, p=3, binomial)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit231.006 ms249.691 ms35.947 ms0.16×0.14×
infer0.293 ms0.158 ms1.670 ms5.71×10.59×
fit+infer237.093 ms249.809 ms37.167 ms0.16×0.15×
predict0.071 ms0.044 ms0.140 ms1.97×3.22×

Medium Binomial (50 subjects × 20 obs = 1000 rows, p=5, binomial)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit712.104 ms522.445 ms124.597 ms0.17×0.24×
infer0.319 ms0.176 ms1.784 ms5.59×10.11×
fit+infer887.421 ms530.448 ms129.233 ms0.15×0.24×
predict0.159 ms0.080 ms0.145 ms0.91×1.80×

Large Binomial (100 subjects × 30 obs = 3000 rows, p=8, binomial)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit899.386 ms1101.395 ms1143.976 ms1.27×1.04×
infer0.203 ms0.177 ms2.708 ms13.35×15.32×
fit+infer900.442 ms1129.622 ms998.018 ms1.11×0.88×
predict0.184 ms0.162 ms0.178 ms0.97×1.10×

Small Poisson (20 subjects × 10 obs = 200 rows, p=3, poisson)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit235.513 ms275.275 ms54.148 ms0.23×0.20×
infer0.192 ms0.268 ms2.177 ms11.33×8.11×
fit+infer236.278 ms330.282 ms54.504 ms0.23×0.17×
predict0.064 ms0.084 ms0.162 ms2.55×1.92×

Medium Poisson (50 subjects × 20 obs = 1000 rows, p=5, poisson)

Methodbossanova (JAX)bossanova (NumPy)RJAX speedupNumPy speedup
fit470.525 ms2045.729 ms200.337 ms0.43×0.10×
infer0.202 ms0.261 ms2.478 ms12.28×9.48×
fit+infer471.751 ms1967.647 ms190.954 ms0.40×0.10×
predict0.093 ms0.081 ms0.148 ms1.60×1.82×

Average minimum time (ms) by method and backend:

Backendfitinferfit+inferpredict
JAX509.71 ms0.24 ms546.60 ms0.11 ms
NUMPY838.91 ms0.21 ms841.56 ms0.09 ms
R311.80 ms2.16 ms281.98 ms0.15 ms

Method Descriptions

MethodDescription
fitParameter estimation (OLS for LM, IRLS for GLM, PQL/Laplace for mixed models)
inferCompute standard errors, test statistics, p-values, and confidence intervals
fit+inferComplete model fitting with inference (equivalent to R’s summary())
predictGenerate predictions on new data (including random effects for mixed models)

Reproducing Benchmarks

Benchmarks can be regenerated using pixi tasks:

pixi run benchmark lm      # Linear Models
pixi run benchmark glm     # Generalized Linear Models
pixi run benchmark lmer    # Linear Mixed Models
pixi run benchmark glmer   # Generalized Linear Mixed Models

Each command runs all backends (JAX, NumPy, R) and writes updated results to the _generated/ fragments included above.