Performance benchmarks comparing bossanova’s model implementations across different backends (JAX vs NumPy) and against R reference implementations.
Environment ¶ Property Value Generated 2026-03-04 09:28 UTC Python 3.14.2 Platform Darwin arm64 bossanova 0.1.0.dev20 R available Yes
Methodology ¶ Warmup : 2 runs to trigger JIT compilation (excluded from timing)
Timed runs : 5 runs per configuration
Reported metric : Minimum time (best case, reduces noise from GC/OS scheduling)
Subprocess isolation : Different backends run in separate processes to avoid state contamination
1.00× = same speed as R
>1× = faster than R (e.g., 2.00× means twice as fast)
<1× = slower than R (e.g., 0.50× means half as fast)
Values within 0.80×–1.25× are approximately equivalent given measurement variance
- indicates the operation is not separately available in R
Linear Models (LM) ¶ Small (n=500, p=5) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 0.915 ms 0.419 ms 0.552 ms 0.60× 1.32× infer 0.430 ms 0.367 ms 0.125 ms 0.29× 0.34× fit+infer 1.544 ms 0.843 ms 0.642 ms 0.42× 0.76× predict 0.080 ms 0.055 ms 0.323 ms 4.04× 5.89×
Medium (n=2000, p=10) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 2.853 ms 1.593 ms 0.914 ms 0.32× 0.57× infer 0.505 ms 0.590 ms 0.308 ms 0.61× 0.52× fit+infer 3.352 ms 2.659 ms 1.261 ms 0.38× 0.47× predict 0.138 ms 0.153 ms 0.428 ms 3.09× 2.80×
Large (n=5000, p=20) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 7.992 ms 5.791 ms 2.335 ms 0.29× 0.40× infer 0.751 ms 0.642 ms 0.750 ms 1.00× 1.17× fit+infer 8.745 ms 6.675 ms 3.406 ms 0.39× 0.51× predict 0.390 ms 0.370 ms 0.694 ms 1.78× 1.87×
XLarge (n=10000, p=50) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 36.039 ms 31.383 ms 13.128 ms 0.36× 0.42× infer 0.817 ms 0.735 ms 1.146 ms 1.40× 1.56× fit+infer 33.336 ms 32.206 ms 16.251 ms 0.49× 0.50× predict 3.907 ms 2.947 ms 2.357 ms 0.60× 0.80×
Average minimum time (ms) by method and backend:
Backend fit infer fit+infer predict JAX 11.95 ms 0.63 ms 11.74 ms 1.13 ms NUMPY 9.80 ms 0.58 ms 10.60 ms 0.88 ms R 4.23 ms 0.58 ms 5.39 ms 0.95 ms
Generalized Linear Models (GLM ) ¶ Small (n=500, p=5, binomial) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 1.935 ms 3.761 ms 0.867 ms 0.45× 0.23× infer 0.281 ms 0.214 ms 0.169 ms 0.60× 0.79× fit+infer 2.468 ms 3.574 ms 1.009 ms 0.41× 0.28× predict 0.105 ms 0.136 ms 0.036 ms 0.34× 0.26×
Medium (n=2000, p=10, binomial) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 2.448 ms 4.031 ms 2.717 ms 1.11× 0.67× infer 0.249 ms 0.231 ms 0.344 ms 1.38× 1.49× fit+infer 2.842 ms 3.841 ms 3.166 ms 1.11× 0.82× predict 0.188 ms 0.179 ms 0.036 ms 0.19× 0.20×
Large (n=5000, p=20, binomial) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 6.724 ms 19.553 ms 11.842 ms 1.76× 0.61× infer 0.520 ms 0.257 ms 0.988 ms 1.90× 3.85× fit+infer 6.368 ms 20.255 ms 12.745 ms 2.00× 0.63× predict 1.801 ms 0.962 ms 0.045 ms 0.03× 0.05×
Small Poisson (n=500, p=5, poisson) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 9.534 ms 1.864 ms 1.264 ms 0.13× 0.68× infer 0.300 ms 0.252 ms 0.146 ms 0.49× 0.58× fit+infer 2.655 ms 2.184 ms 1.367 ms 0.51× 0.63× predict 0.082 ms 0.047 ms 0.046 ms 0.56× 0.97×
Medium Poisson (n=2000, p=10, poisson) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 2.590 ms 3.742 ms 3.021 ms 1.17× 0.81× infer 0.407 ms 0.309 ms 0.421 ms 1.03× 1.36× fit+infer 3.031 ms 4.155 ms 3.457 ms 1.14× 0.83× predict 0.165 ms 0.127 ms 0.043 ms 0.26× 0.34×
Average minimum time (ms) by method and backend:
Backend fit infer fit+infer predict JAX 4.65 ms 0.35 ms 3.47 ms 0.47 ms NUMPY 6.59 ms 0.25 ms 6.80 ms 0.29 ms R 3.94 ms 0.41 ms 4.35 ms 0.04 ms
Linear Mixed Models (LMER) ¶ Small (20 subjects × 10 obs = 200 rows, p=3) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 10.620 ms 6.848 ms 14.718 ms 1.39× 2.15× infer 6.484 ms 7.155 ms 2.733 ms 0.42× 0.38× fit+infer 22.589 ms 20.532 ms 16.233 ms 0.72× 0.79× predict 0.073 ms 0.044 ms 0.110 ms 1.50× 2.47×
Medium (50 subjects × 20 obs = 1000 rows, p=5) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 18.896 ms 5.846 ms 21.886 ms 1.16× 3.74× infer 5.718 ms 8.461 ms 2.745 ms 0.48× 0.32× fit+infer 37.444 ms 16.489 ms 23.996 ms 0.64× 1.46× predict 0.117 ms 0.087 ms 0.130 ms 1.11× 1.49×
Large (100 subjects × 50 obs = 5000 rows, p=8) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 12.822 ms 8.509 ms 78.625 ms 6.13× 9.24× infer 8.606 ms 9.259 ms 3.663 ms 0.43× 0.40× fit+infer 17.406 ms 19.282 ms 77.869 ms 4.47× 4.04× predict 0.252 ms 0.426 ms 0.131 ms 0.52× 0.31×
XLarge (200 subjects × 50 obs = 10000 rows, p=10) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 14.899 ms 12.332 ms 162.542 ms 10.91× 13.18× infer 9.477 ms 11.395 ms 4.014 ms 0.42× 0.35× fit+infer 22.444 ms 27.538 ms 173.031 ms 7.71× 6.28× predict 0.596 ms 0.829 ms 0.194 ms 0.33× 0.23×
Average minimum time (ms) by method and backend:
Backend fit infer fit+infer predict JAX 14.31 ms 7.57 ms 24.97 ms 0.26 ms NUMPY 8.38 ms 9.07 ms 20.96 ms 0.35 ms R 69.44 ms 3.29 ms 72.78 ms 0.14 ms
Generalized Linear Mixed Models (GLM ER) ¶ Small Binomial (20 subjects × 10 obs = 200 rows, p=3, binomial) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 231.006 ms 249.691 ms 35.947 ms 0.16× 0.14× infer 0.293 ms 0.158 ms 1.670 ms 5.71× 10.59× fit+infer 237.093 ms 249.809 ms 37.167 ms 0.16× 0.15× predict 0.071 ms 0.044 ms 0.140 ms 1.97× 3.22×
Medium Binomial (50 subjects × 20 obs = 1000 rows, p=5, binomial) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 712.104 ms 522.445 ms 124.597 ms 0.17× 0.24× infer 0.319 ms 0.176 ms 1.784 ms 5.59× 10.11× fit+infer 887.421 ms 530.448 ms 129.233 ms 0.15× 0.24× predict 0.159 ms 0.080 ms 0.145 ms 0.91× 1.80×
Large Binomial (100 subjects × 30 obs = 3000 rows, p=8, binomial) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 899.386 ms 1101.395 ms 1143.976 ms 1.27× 1.04× infer 0.203 ms 0.177 ms 2.708 ms 13.35× 15.32× fit+infer 900.442 ms 1129.622 ms 998.018 ms 1.11× 0.88× predict 0.184 ms 0.162 ms 0.178 ms 0.97× 1.10×
Small Poisson (20 subjects × 10 obs = 200 rows, p=3, poisson) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 235.513 ms 275.275 ms 54.148 ms 0.23× 0.20× infer 0.192 ms 0.268 ms 2.177 ms 11.33× 8.11× fit+infer 236.278 ms 330.282 ms 54.504 ms 0.23× 0.17× predict 0.064 ms 0.084 ms 0.162 ms 2.55× 1.92×
Medium Poisson (50 subjects × 20 obs = 1000 rows, p=5, poisson) ¶ Method bossanova (JAX) bossanova (NumPy) R JAX speedup NumPy speedup fit 470.525 ms 2045.729 ms 200.337 ms 0.43× 0.10× infer 0.202 ms 0.261 ms 2.478 ms 12.28× 9.48× fit+infer 471.751 ms 1967.647 ms 190.954 ms 0.40× 0.10× predict 0.093 ms 0.081 ms 0.148 ms 1.60× 1.82×
Average minimum time (ms) by method and backend:
Backend fit infer fit+infer predict JAX 509.71 ms 0.24 ms 546.60 ms 0.11 ms NUMPY 838.91 ms 0.21 ms 841.56 ms 0.09 ms R 311.80 ms 2.16 ms 281.98 ms 0.15 ms
Method Descriptions ¶ Method Description 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 ModelsEach command runs all backends (JAX, NumPy, R) and writes updated results to the _generated/ fragments included above.