Descriptive statistics
Verification
Scope
mean(), var(), sd(), median(), quantile(), sum(), min(), and max(), including missing values. Each computed with the phit extension and in PHP, and compared with R.
References
- Reference
- R 4.6.1
- Versions
- R 4.6.1, PHP 8.5.10, phibble v0.8.0 (9e63ca5), phit 0.5.1
Data
- x
- c(2, 4, 4, 5, 7, 9); c(1, NA, 3) and c(1, NaN, 3) for missing values.
Method
Reference results computed in R by tests/r/stats.R and stored in tests/Fixtures/. The same operations run in phplyr in tests/StatsTest.php, which compare every value. Values compared is the number of assertions in a case; a case fails if any assertion fails.
- Check
- Comparison with a reference implementation
- Recorded
- 2026-11-02, PHP 8.5.10, macOS (arm64), commit 65e6a46
Tolerances
|x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1)
Applies to: Numerical results
exact equality
Applies to: Missing results
R's NA as null
x: package value; r: reference value. Absolute error: |x − r|. Relative error: |x − r| / max(|r|, 1). Max errors are over the values a row compares.
Results
28 comparisons in 14 cases: 28 pass, 0 fail, 0 skipped.
By case
| Case | Comparisons | Largest abs. error | Largest rel. error | Status |
|---|---|---|---|---|
| mean(x) | 2 | 2.7e-15 | 5.2e-16 | pass |
| var(x) | 2 | 2.7e-15 | 4.3e-16 | pass |
| sd(x) | 2 | 0 | 0 | pass |
| median(x) | 2 | 0 | 0 | pass |
| quantile(x, 0.9) | 2 | 0 | 0 | pass |
| quantile(x, 0) | 2 | 0 | 0 | pass |
| quantile(x, 1) | 2 | 0 | 0 | pass |
| sum(x) | 2 | 0 | 0 | pass |
| min(x) | 2 | 0 | 0 | pass |
| max(x) | 2 | 0 | 0 | pass |
| mean(c(1, NA, 3)) | 2 | pass | ||
| mean(c(1, NA, 3), na.rm = TRUE) | 2 | 0 | 0 | pass |
| sd(c(1, NaN, 3), na.rm = TRUE) | 2 | 4.9e-15 | 3.5e-15 | pass |
| var(1) | 2 | pass |
Every comparison
| Case | Implementation | Quantity | Criterion | Values | Package value | Reference value | Max abs. error | Max rel. error | Status |
|---|---|---|---|---|---|---|---|---|---|
| mean(x) | phit extension | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 5.166666667 | 5.166666667 | 2.7e-15 | 5.2e-16 | pass |
| PHP | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 5.166666667 | 5.166666667 | 2.7e-15 | 5.2e-16 | pass | |
| var(x) | phit extension | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 6.166666667 | 6.166666667 | 2.7e-15 | 4.3e-16 | pass |
| PHP | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 6.166666667 | 6.166666667 | 2.7e-15 | 4.3e-16 | pass | |
| sd(x) | phit extension | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 2.483277404 | 2.483277404 | 0 | 0 | pass |
| PHP | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 2.483277404 | 2.483277404 | 0 | 0 | pass | |
| median(x) | phit extension | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 4.5 | 4.5 | 0 | 0 | pass |
| PHP | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 4.5 | 4.5 | 0 | 0 | pass | |
| quantile(x, 0.9) | phit extension | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 8 | 8 | 0 | 0 | pass |
| PHP | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 8 | 8 | 0 | 0 | pass | |
| quantile(x, 0) | phit extension | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 2 | 2 | 0 | 0 | pass |
| PHP | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 2 | 2 | 0 | 0 | pass | |
| quantile(x, 1) | phit extension | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 9 | 9 | 0 | 0 | pass |
| PHP | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 9 | 9 | 0 | 0 | pass | |
| sum(x) | phit extension | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 31 | 31 | 0 | 0 | pass |
| PHP | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 31 | 31 | 0 | 0 | pass | |
| min(x) | phit extension | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 2 | 2 | 0 | 0 | pass |
| PHP | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 2 | 2 | 0 | 0 | pass | |
| max(x) | phit extension | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 9 | 9 | 0 | 0 | pass |
| PHP | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 9 | 9 | 0 | 0 | pass | |
| mean(c(1, NA, 3)) | phit extension | Values | exact equality | 1 | pass | ||||
| PHP | Values | exact equality | 1 | pass | |||||
| mean(c(1, NA, 3), na.rm = TRUE) | phit extension | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 2 | 2 | 0 | 0 | pass |
| PHP | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 2 | 2 | 0 | 0 | pass | |
| sd(c(1, NaN, 3), na.rm = TRUE) | phit extension | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 1.414213562 | 1.414213562 | 4.9e-15 | 3.5e-15 | pass |
| PHP | Values | |x − r| ≤ 1e-12 + 1e-12 × max(|r|, 1) | 1 | 1.414213562 | 1.414213562 | 4.9e-15 | 3.5e-15 | pass | |
| var(1) | phit extension | Values | exact equality | 1 | pass | ||||
| PHP | Values | exact equality | 1 | pass |
Reproduction
Rscript tests/r/stats.R
bin/site-verifications
- Raw record
- site/verifications/descriptives.json
- Input data
- tests/Fixtures