ELISAtools SoftMax Pro plates (real data)
ELISAtools 0.1.8 example data, Feng Feng, MIT license; 5 plates, 2 kit lots · generated 2026-09-29 13:14 · immunoassay v0.1.0
analyte (undisclosed)
analytes
32
flagged replicate groups
0
values measured in range
1 · Plate acceptance
A plate passes when R² ≥ 0.98, ≥ 75% of standard levels recover within 80–120% with CV ≤ 20%, a quantifiable range exists, and ≥ 67% of controls with expected ranges fall inside them. Limits are in-well concentrations.
| plate_id | analyte | verdict | model | R² | standards OK | lod | lloq | uloq | controls OK | flagged groups | reasons |
|---|
| Assay_2_p1 | analyte (undisclosed) | ✓ pass | 4PL | 0.9879 | 7/7 | 32.1 | 46.9 | 3,000.0 | n/a | 7 | |
| Assay_3_and_4_p1 | analyte (undisclosed) | ✓ pass | 4PL | 0.9942 | 7/7 | 8.996 | 46.9 | 3,000.0 | n/a | 5 | |
| Assay_3_and_4_p2 | analyte (undisclosed) | ✓ pass | 4PL | 0.9896 | 7/7 | 6.929 | 46.9 | 3,000.0 | n/a | 5 | |
| Assay_11_and_12_p1 | analyte (undisclosed) | ✓ pass | 4PL | 0.9965 | 7/7 | 25.2 | 46.9 | 3,000.0 | n/a | 11 | |
| Assay_11_and_12_p2 | analyte (undisclosed) | ✓ pass | 4PL | 0.9835 | 6/7 | 18.0 | 46.9 | 1,500.0 | n/a | 4 | |
2 · Standard curves
Weighted (1/y^2) least-squares fits. 5PL is chosen over 4PL only when its AICc is lower by more than 2. Weighted residuals should scatter evenly around zero; a curved pattern means the model is wrong for the data. The plate map shows raw OD. Excluded wells are marked ✗.
Assay_2_p1 · analyte (undisclosed)
| model | a | a_se | b | b_se | c (EC50) | c_se | d | d_se | R² | aicc_4pl | aicc_5pl |
|---|
| 4pl | -0.00225 | 0.00374 | 1.163 | 0.0673 | 3,118.7 | 1,234.2 | 4.77 | 1.371 | 0.9879 | -202.1 | -199.2 |
Standard recovery
| concentration | n_wells | n_quantified | mean_back_calc | cv_pct | recovery_pct |
|---|
| 46.9 | 3 | 3 | 40.8 | 12.9 | 87.0 |
| 93.8 | 3 | 3 | 108.0 | 14.4 | 115.2 |
| 187.5 | 3 | 3 | 201.8 | 16.7 | 107.6 |
| 375.0 | 3 | 3 | 393.7 | 11.4 | 105.0 |
| 750.0 | 3 | 3 | 726.7 | 17.5 | 96.9 |
| 1,500.0 | 3 | 3 | 1,514.0 | 9.464 | 100.9 |
| 3,000.0 | 3 | 3 | 3,179.1 | 16.5 | 106.0 |
Assay_3_and_4_p1 · analyte (undisclosed)
| model | a | a_se | b | b_se | c (EC50) | c_se | d | d_se | R² | aicc_4pl | aicc_5pl |
|---|
| 4pl | -0.000356 | 0.00189 | 1.184 | 0.03877 | 1,915.9 | 332.8 | 3.29 | 0.377 | 0.9942 | -231.0 | -229.9 |
Standard recovery
| concentration | n_wells | n_quantified | mean_back_calc | cv_pct | recovery_pct |
|---|
| 46.9 | 3 | 3 | 47.0 | 8.2 | 100.2 |
| 93.8 | 3 | 3 | 90.6 | 6.065 | 96.6 |
| 187.5 | 3 | 3 | 197.5 | 9.71 | 105.4 |
| 375.0 | 3 | 3 | 397.8 | 12.8 | 106.1 |
| 750.0 | 3 | 3 | 749.6 | 9.489 | 100.0 |
| 1,500.0 | 3 | 3 | 1,400.4 | 9.046 | 93.4 |
| 3,000.0 | 3 | 3 | 3,282.4 | 5.878 | 109.4 |
Assay_3_and_4_p2 · analyte (undisclosed)
| model | a | a_se | b | b_se | c (EC50) | c_se | d | d_se | R² | aicc_4pl | aicc_5pl |
|---|
| 4pl | 0.000201 | 0.00259 | 1.143 | 0.05492 | 3,068.9 | 1,024.6 | 4.159 | 0.9804 | 0.9896 | -216.5 | -213.3 |
Standard recovery
| concentration | n_wells | n_quantified | mean_back_calc | cv_pct | recovery_pct |
|---|
| 46.9 | 3 | 3 | 48.6 | 8.505 | 103.7 |
| 93.8 | 3 | 3 | 90.5 | 3.515 | 96.5 |
| 187.5 | 3 | 3 | 197.0 | 13.9 | 105.1 |
| 375.0 | 3 | 3 | 392.4 | 18.8 | 104.6 |
| 750.0 | 3 | 3 | 782.9 | 18.4 | 104.4 |
| 1,500.0 | 3 | 3 | 1,564.7 | 12.8 | 104.3 |
| 3,000.0 | 3 | 3 | 3,005.3 | 10.6 | 100.2 |
Assay_11_and_12_p1 · analyte (undisclosed)
| model | a | a_se | b | b_se | c (EC50) | c_se | d | d_se | R² | aicc_4pl | aicc_5pl |
|---|
| 4pl | -0.00624 | 0.00179 | 1.087 | 0.02698 | 1,531.6 | 186.7 | 3.559 | 0.2467 | 0.9965 | -220.8 | -219.4 |
Standard recovery
| concentration | n_wells | n_quantified | mean_back_calc | cv_pct | recovery_pct |
|---|
| 46.9 | 3 | 3 | 48.9 | 7.125 | 104.4 |
| 93.8 | 3 | 3 | 91.0 | 7.031 | 97.0 |
| 187.5 | 3 | 3 | 189.4 | 9.34 | 101.0 |
| 375.0 | 3 | 3 | 380.3 | 3.395 | 101.4 |
| 750.0 | 3 | 3 | 731.6 | 5.235 | 97.5 |
| 1,500.0 | 3 | 3 | 1,624.8 | 3.472 | 108.3 |
| 3,000.0 | 3 | 3 | 2,875.4 | 12.2 | 95.8 |
Assay_11_and_12_p2 · analyte (undisclosed)
| model | a | a_se | b | b_se | c (EC50) | c_se | d | d_se | R² | aicc_4pl | aicc_5pl |
|---|
| 4pl | -0.00456 | 0.00314 | 1.051 | 0.04852 | 1,663.7 | 401.9 | 3.419 | 0.462 | 0.9835 | -195.1 | -191.8 |
Standard recovery
| concentration | n_wells | n_quantified | mean_back_calc | cv_pct | recovery_pct |
|---|
| 46.9 | 3 | 3 | 47.3 | 5.041 | 101.0 |
| 93.8 | 3 | 3 | 96.9 | 9.989 | 103.4 |
| 187.5 | 3 | 3 | 185.5 | 18.2 | 98.9 |
| 375.0 | 3 | 3 | 385.8 | 9.538 | 102.9 |
| 750.0 | 3 | 3 | 813.9 | 4.568 | 108.5 |
| 1,500.0 | 3 | 3 | 1,391.0 | 11.4 | 92.7 |
| 3,000.0 | 3 | 3 | 3,496.1 | 30.0 | 116.5 |
Excluded wells
| plate_id | well | type | sample_id | od | outlier_reason |
|---|
| Assay_2_p1 | D4 | sample | Assay_2_p1:P5 | 0.0572 | replicate CV > 20% and |modified z| > 3.5 |
| Assay_3_and_4_p1 | D8 | sample | Assay_3_and_4_p1:P7 | 0.1804 | replicate CV > 20% and |modified z| > 3.5 |
| Assay_11_and_12_p1 | H1 | blank | BLANK | 0.0511 | replicate CV > 20% and |modified z| > 3.5 |
| Assay_11_and_12_p2 | H1 | blank | BLANK | 0.0485 | replicate CV > 20% and |modified z| > 3.5 |
3 · Controls and flagged samples
| plate_id | analyte | sample_id | measured | low | high | cv_pct | range_flag | in range |
|---|
| Assay_2_p1 | analyte (undisclosed) | QC_CONTROL | 868.5 | – | – | 3.693 | | – |
| Assay_3_and_4_p1 | analyte (undisclosed) | QC_CONTROL | 693.5 | – | – | 10.7 | | – |
| Assay_3_and_4_p2 | analyte (undisclosed) | QC_CONTROL | 714.6 | – | – | 1.857 | | – |
| Assay_11_and_12_p1 | analyte (undisclosed) | QC_CONTROL | 478.1 | – | – | 7.993 | | – |
| Assay_11_and_12_p2 | analyte (undisclosed) | QC_CONTROL | 577.4 | – | – | 9.333 | | – |
Flagged replicate groups
below_lloq / above_uloq: outside the validated range (not reported as numbers). below_lod: not distinguishable from blank. cv_high: replicate CV above 20%.
| plate_id | analyte | sample_id | group | dilution | wells | od_mean | conc_well | cv_pct | flags |
|---|
| Assay_2_p1 | analyte (undisclosed) | Assay_2_p1:P1 | | 10.0 | B4,B5,B6 | 0.01217 | 21.2 | 24.4 | below_lloq;below_lod;cv_high |
| Assay_2_p1 | analyte (undisclosed) | Assay_2_p1:P3 | | 10.0 | C4,C5,C6 | 0.0087 | 16.8 | 6.134 | below_lloq;below_lod |
| Assay_2_p1 | analyte (undisclosed) | Assay_2_p1:P5 | | 10.0 | D4,D5,D6 | 0.0083 | 16.3 | 11.6 | below_lloq;below_lod;1_outlier_well_removed |
| Assay_2_p1 | analyte (undisclosed) | Assay_2_p1:P2 | | 10.0 | E4,E5,E6 | 0.00923 | 17.5 | 16.0 | below_lloq;below_lod |
| Assay_2_p1 | analyte (undisclosed) | Assay_2_p1:P4 | | 10.0 | F4,F5,F6 | 0.01293 | 22.3 | 5.512 | below_lloq;below_lod |
| Assay_2_p1 | analyte (undisclosed) | Assay_2_p1:P11 | | 10.0 | F7,F8,F9 | 0.0333 | 46.4 | 12.6 | below_lloq |
| Assay_2_p1 | analyte (undisclosed) | Assay_2_p1:P6 | | 10.0 | G4,G5,G6 | 0.02967 | 42.3 | 10.6 | below_lloq |
| Assay_3_and_4_p1 | analyte (undisclosed) | Assay_3_and_4_p1:P1 | | 10.0 | B4,B5,B6 | 0.02127 | 27.7 | 10.3 | below_lloq |
| Assay_3_and_4_p1 | analyte (undisclosed) | Assay_3_and_4_p1:P12 | | 10.0 | C11,D10,D11 | 0.0332 | 40.2 | 11.9 | below_lloq |
| Assay_3_and_4_p1 | analyte (undisclosed) | Assay_3_and_4_p1:P7 | | 10.0 | D7,D8,D9 | 0.07847 | 83.7 | 10.1 | 1_outlier_well_removed |
| Assay_3_and_4_p1 | analyte (undisclosed) | Assay_3_and_4_p1:P2 | | 10.0 | E4,E5,E6 | 0.0364 | 43.5 | 9.427 | below_lloq |
| Assay_3_and_4_p1 | analyte (undisclosed) | Assay_3_and_4_p1:P11 | | 10.0 | F7,F8,F9 | 0.03037 | 37.3 | 8.279 | below_lloq |
| Assay_3_and_4_p2 | analyte (undisclosed) | Assay_3_and_4_p2:P15 | | 10.0 | B10,B11,C10 | 0.03127 | 42.6 | 6.201 | below_lloq |
| Assay_3_and_4_p2 | analyte (undisclosed) | Assay_3_and_4_p2:P12 | | 10.0 | C11,D10,D11 | 0.0124 | 18.7 | 25.7 | below_lloq;cv_high |
| Assay_3_and_4_p2 | analyte (undisclosed) | Assay_3_and_4_p2:P14 | | 10.0 | E10,E11,F10 | 0.0196 | 28.1 | 3.956 | below_lloq |
| Assay_3_and_4_p2 | analyte (undisclosed) | Assay_3_and_4_p2:P11 | | 10.0 | F7,F8,F9 | 0.01753 | 25.5 | 12.6 | below_lloq |
| Assay_3_and_4_p2 | analyte (undisclosed) | Assay_3_and_4_p2:P13 | | 10.0 | G7,G8,G9 | 0.03463 | 46.6 | 9.499 | below_lloq |
| Assay_11_and_12_p1 | analyte (undisclosed) | Assay_11_and_12_p1:P1 | | 10.0 | B4,B5,B6 | 0.01157 | 11.7 | 9.431 | below_lloq;below_lod |
| Assay_11_and_12_p1 | analyte (undisclosed) | Assay_11_and_12_p1:P14 | | 10.0 | B11,C11,D11 | 0.05883 | 39.2 | 16.6 | below_lloq |
| Assay_11_and_12_p1 | analyte (undisclosed) | Assay_11_and_12_p1:P3 | | 10.0 | C4,C5,C6 | 0.03597 | 26.1 | 2.817 | below_lloq |
| Assay_11_and_12_p1 | analyte (undisclosed) | Assay_11_and_12_p1:P5 | | 10.0 | D4,D5,D6 | 0.04513 | 31.4 | 11.8 | below_lloq |
| Assay_11_and_12_p1 | analyte (undisclosed) | Assay_11_and_12_p1:P7 | | 10.0 | D7,D8,D9 | 0.02107 | 17.4 | 22.7 | below_lloq;below_lod;cv_high |
| Assay_11_and_12_p1 | analyte (undisclosed) | Assay_11_and_12_p1:P2 | | 10.0 | E4,E5,E6 | 0.01167 | 11.8 | 11.8 | below_lloq;below_lod |
| Assay_11_and_12_p1 | analyte (undisclosed) | Assay_11_and_12_p1:P9 | | 10.0 | E7,E8,E9 | 0.02527 | 19.9 | 10.2 | below_lloq;below_lod |
| Assay_11_and_12_p1 | analyte (undisclosed) | Assay_11_and_12_p1:P12 | | 10.0 | E10,F10,G10 | 0.05743 | 38.4 | 4.561 | below_lloq |
| Assay_11_and_12_p1 | analyte (undisclosed) | Assay_11_and_12_p1:P4 | | 10.0 | F4,F5,F6 | 0.0121 | 12.1 | 11.5 | below_lloq;below_lod |
| Assay_11_and_12_p1 | analyte (undisclosed) | Assay_11_and_12_p1:P11 | | 10.0 | F7,F8,F9 | 0.05823 | 38.8 | 6.519 | below_lloq |
| Assay_11_and_12_p1 | analyte (undisclosed) | Assay_11_and_12_p1:P6 | | 10.0 | G4,G5,G6 | 0.02207 | 18.0 | 16.7 | below_lloq;below_lod |
| Assay_11_and_12_p2 | analyte (undisclosed) | Assay_11_and_12_p2:P1 | | 10.0 | B4,B5,B6 | 0.04417 | 29.5 | 8.865 | below_lloq |
| Assay_11_and_12_p2 | analyte (undisclosed) | Assay_11_and_12_p2:P6 | | 10.0 | D7,D8,D9 | 0.07213 | 45.8 | 13.0 | below_lloq |
| Assay_11_and_12_p2 | analyte (undisclosed) | Assay_11_and_12_p2:P2 | | 10.0 | E4,E5,E6 | 0.0664 | 42.5 | 13.5 | below_lloq |
| Assay_11_and_12_p2 | analyte (undisclosed) | Assay_11_and_12_p2:P5 | | 10.0 | G4,G5,G6 | 0.06693 | 42.8 | 6.183 | below_lloq |
4 · Dilution linearity
Samples run at more than one dilution should agree after correction (±20%). A concentration that rises with dilution points to matrix interference or the high-dose hook effect.
None.
5 · Inter-plate normalization
Bridge controls shared by every plate estimate a multiplicative plate factor, on the log scale with the average plate as reference. Corrected concentration = raw / factor.
| plate_id | analyte | factor | log_factor_se | n_bridges | bridge_ids |
|---|
| Assay_2_p1 | analyte (undisclosed) | 1.33 | – | 1 | QC_CONTROL |
| Assay_3_and_4_p1 | analyte (undisclosed) | 1.062 | – | 1 | QC_CONTROL |
| Assay_3_and_4_p2 | analyte (undisclosed) | 1.094 | – | 1 | QC_CONTROL |
| Assay_11_and_12_p1 | analyte (undisclosed) | 0.7321 | – | 1 | QC_CONTROL |
| Assay_11_and_12_p2 | analyte (undisclosed) | 0.8841 | – | 1 | QC_CONTROL |
| analyte | sample_id | inter-plate CV % before | inter-plate CV % after |
|---|
| analyte (undisclosed) | QC_CONTROL | 22.2 | 1.81e-13 |
6 · Group comparisons
Tests are run on log10-transformed concentrations. Shapiro-Wilk on every group decides between parametric tests (Welch t / Welch ANOVA) and rank tests (Mann-Whitney / Kruskal-Wallis). Omnibus p-values are Benjamini-Hochberg adjusted across analytes; pairwise p-values are Holm-adjusted within each analyte. Hollow points are censored values that were substituted.
None.
Omnibus tests
None.
Pairwise comparisons
None.
7 · Settings and warnings
{
"model": "auto",
"weighting": "1/y^2",
"include_zero_standard": true,
"qc": {
"max_cv_pct": 20.0,
"recovery_low_pct": 80.0,
"recovery_high_pct": 120.0,
"edge_tolerance_pct": 5.0,
"lod_sd_multiplier": 3.0,
"outlier_z": 3.5,
"max_std_exclusions": 2,
"min_r_squared": 0.98,
"min_std_pass_frac": 0.75,
"min_control_pass_frac": 0.6666666666666666
},
"stats": {
"transform": "log10",
"censored": "substitute",
"harmonize_lloq": true,
"lloq_divisor": 1.4142135623730951,
"alpha": 0.05,
"normality_alpha": 0.05,
"exclude_failed_plates": true,
"value_col": "conc_norm"
},
"normalize": true,
"linearity_max_deviation_pct": 20.0,
"group_order": null,
"control_ranges": null
}