Demo study: LPS challenge, IL-6 and TNF-α

Simulated data with known ground truth (immunoassay.simulate.default_demo_study) · generated 2026-09-29 13:14 · immunoassay v0.1.0

4/4
plates passed QC
IL-6, TNF-α
analytes
36
samples
12
flagged replicate groups
65
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_idanalyteverdictmodelR²standards OKlodlloquloqcontrols OKflagged groupsreasons
IL6_P1IL-6✓ pass4PL0.9977/74.1315.61,000.03/34
IL6_P2IL-6✓ pass4PL0.9977/75.04515.61,000.03/33
TNFa_P1TNF-α✓ pass4PL0.99817/75.3637.812500.02/33
TNFa_P2TNF-α✓ pass4PL0.99677/74.217.812500.03/32

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 ✗.

IL6_P1 · IL-6

figure figure
modelaa_sebb_sec (EC50)c_sedd_seR²aicc_4plaicc_5pl
4pl0.0001620.003021.1530.04458350.448.82.9680.22130.997-139.1-135.1
Standard recovery
concentrationn_wellsn_quantifiedmean_back_calccv_pctrecovery_pct
15.62216.60.9573106.3
31.22230.912.198.9
62.52260.40.783396.6
125.022125.810.1100.7
250.022273.35.323109.3
500.022471.210.494.2
1,000.0221,015.03.086101.5

IL6_P2 · IL-6

figure figure
modelaa_sebb_sec (EC50)c_sedd_seR²aicc_4plaicc_5pl
4pl-0.001280.002691.0910.04308331.749.32.7050.20480.997-141.9-137.6
Standard recovery
concentrationn_wellsn_quantifiedmean_back_calccv_pctrecovery_pct
15.62215.10.894396.7
31.22232.47.684103.8
62.52264.42.536103.1
125.022117.13.61793.7
250.022262.310.3104.9
500.022522.314.5104.5
1,000.022967.47.05496.7

TNFa_P1 · TNF-α

figure figure
modelaa_sebb_sec (EC50)c_sedd_seR²aicc_4plaicc_5pl
4pl-0.002090.003691.2250.0511175.523.52.6540.20120.9981-135.2-131.3
Standard recovery
concentrationn_wellsn_quantifiedmean_back_calccv_pctrecovery_pct
7.812227.71414.398.7
15.62214.92.64695.5
31.22234.14.394109.1
62.52261.72.82398.7
125.022118.32.57894.6
250.022266.83.097106.7
500.022497.411.999.5

TNFa_P2 · TNF-α

figure figure
modelaa_sebb_sec (EC50)c_sedd_seR²aicc_4plaicc_5pl
4pl-0.001630.004351.1370.05121237.543.73.6820.38440.9967-129.3-124.9
Standard recovery
concentrationn_wellsn_quantifiedmean_back_calccv_pctrecovery_pct
7.812227.5139.60896.2
15.62216.51.157105.3
31.22230.82.07898.4
62.52263.115.2101.0
125.022128.113.1102.5
250.022250.83.313100.3
500.022504.814.4101.0

Excluded wells

None.

3 · Controls and flagged samples

plate_idanalytesample_idmeasuredlowhighcv_pctrange_flagin range
IL6_P1IL-6CTRL_LO45.330.050.03.9531
IL6_P1IL-6CTRL_MID163.6120.0200.00.5581
IL6_P1IL-6CTRL_HI690.3450.0750.011.81
IL6_P2IL-6CTRL_LO32.230.050.07.6411
IL6_P2IL-6CTRL_MID139.2120.0200.01.1891
IL6_P2IL-6CTRL_HI477.0450.0750.04.3991
TNFa_P1TNF-αCTRL_LO22.615.025.06.2941
TNFa_P1TNF-αCTRL_MID79.252.587.57.1651
TNFa_P1TNF-αCTRL_HI335.8187.5312.515.80
TNFa_P2TNF-αCTRL_LO19.615.025.00.96531
TNFa_P2TNF-αCTRL_MID68.752.587.511.91
TNFa_P2TNF-αCTRL_HI225.7187.5312.52.9271

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_idanalytesample_idgroupdilutionwellsod_meanconc_wellcv_pctflags
IL6_P1IL-6S011vehicle2E7,E80.069213.72.547below_lloq
IL6_P1IL-6S030LPS+drug8G7,G80.0561511.41.899below_lloq
IL6_P1IL-6S019LPS2H5,H60.9724212.584.7cv_high
IL6_P1IL-6S003vehicle8H7,H80.04188.7538.969below_lloq
IL6_P2IL-6S005vehicle2E3,E40.084414.46.795below_lloq
IL6_P2IL-6S005vehicle8G7,G80.00615–197.8below_lloq;below_lod;cv_high
IL6_P2IL-6S004vehicle8H7,H80.01432.94933.2below_lloq;below_lod;cv_high
TNFa_P1TNF-αS012vehicle2A5,A60.139716.757.3cv_high
TNFa_P1TNF-αS011vehicle8A9,A100.06989.41922.5cv_high
TNFa_P1TNF-αS004vehicle2E5,E60.03024.83923.2below_lloq;below_lod;cv_high
TNFa_P2TNF-αS006vehicle8A9,A100.009551.4512.8below_lloq;below_lod
TNFa_P2TNF-αS006vehicle2G3,G40.067757.3225.2below_lloq;cv_high

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.

plate_idanalytesample_iddilutionsneat_concsmax_deviation_pcttrendlinearinterpretation
IL6_P1IL-6S0212;8599.8;723.39.337rises_with_dilution✗ failpossible matrix interference or high-dose hook effect
IL6_P1IL-6S0362;8213.9;244.46.655flat✓ passdilution-linear
IL6_P1IL-6S0302;872.75;90.95––fewer than two dilutions in range; linearity not assessable
IL6_P1IL-6S0032;869.2;70.03––fewer than two dilutions in range; linearity not assessable
IL6_P2IL-6S0252;8185.4;196.32.838flat✓ passdilution-linear
IL6_P2IL-6S0142;8773.8;810.82.33flat✓ passdilution-linear
IL6_P2IL-6S0052;828.88;NA––fewer than two dilutions in range; linearity not assessable
IL6_P2IL-6S0042;836.87;23.59––fewer than two dilutions in range; linearity not assessable
TNFa_P1TNF-αS0112;872.3;75.35––fewer than two dilutions in range; linearity not assessable
TNFa_P1TNF-αS0162;8142.9;126.75.992flat✓ passdilution-linear
TNFa_P1TNF-αS0302;8201.3;196.31.265flat✓ passdilution-linear
TNFa_P1TNF-αS0152;8125.7;128.61.175flat✓ passdilution-linear
TNFa_P2TNF-αS0062;814.64;11.6––fewer than two dilutions in range; linearity not assessable
TNFa_P2TNF-αS0282;8125;119.72.187flat✓ passdilution-linear
TNFa_P2TNF-αS0332;8145.6;137.52.852flat✓ passdilution-linear
TNFa_P2TNF-αS0252;8106.1;94.575.771flat✓ passdilution-linear

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_idanalytefactorlog_factor_sen_bridgesbridge_ids
IL6_P1IL-61.1570.032583CTRL_HI,CTRL_LO,CTRL_MID
IL6_P2IL-60.86440.032583CTRL_HI,CTRL_LO,CTRL_MID
TNFa_P1TNF-α1.120.042673CTRL_HI,CTRL_LO,CTRL_MID
TNFa_P2TNF-α0.89280.042673CTRL_HI,CTRL_LO,CTRL_MID
analytesample_idinter-plate CV % beforeinter-plate CV % after
IL-6CTRL_HI25.85.528
IL-6CTRL_LO24.03.617
IL-6CTRL_MID11.49.136
TNF-αCTRL_HI27.712.0
TNF-αCTRL_LO9.8936.128
TNF-αCTRL_MID10.15.932
figure figure

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.

analytehandlingn
IL-6excluded: cv_fail1
IL-6measured33
IL-6substituted: below common LLOQ 36.2 → /1.412
TNF-αexcluded: cv_fail1
TNF-αmeasured32
TNF-αsubstituted: below common LLOQ 17.5 → /1.413

Omnibus tests

analytegroupsnteststatisticpp (BH)significanteffectvalueshapiro
IL-6vehicle vs LPS vs LPS+drugvehicle=12, LPS=11, LPS+drug=12Welch ANOVA35.31.86e-072.61e-07✓ passeta²0.6502vehicle: p=0.61, LPS: p=0.8, LPS+drug: p=0.46
TNF-αvehicle vs LPS vs LPS+drugvehicle=11, LPS=12, LPS+drug=12Welch ANOVA36.42.61e-072.61e-07✓ passeta²0.7802vehicle: p=0.46, LPS: p=0.25, LPS+drug: p=0.79

Pairwise comparisons

analytereferencegrouptesteffect_nameestimate95% CI low95% CI highstd. effectvaluep (Holm)significant
IL-6vehicleLPSWelch t-testfold change6.5744.15210.4Hedges' g3.4379.73e-08✓ pass
IL-6vehicleLPS+drugWelch t-testfold change2.4531.4664.105Hedges' g1.430.00181✓ pass
IL-6LPSLPS+drugWelch t-testfold change0.37310.21970.6337Hedges' g-1.5430.00181✓ pass
TNF-αvehicleLPSWelch t-testfold change4.1022.7516.115Hedges' g3.1023.29e-06✓ pass
TNF-αvehicleLPS+drugWelch t-testfold change4.7943.2467.081Hedges' g3.5761.83e-06✓ pass
TNF-αLPSLPS+drugWelch t-testfold change1.1690.92181.482Hedges' g0.53790.1865✗ fail
figure figure

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": [
    "vehicle",
    "LPS",
    "LPS+drug"
  ],
  "control_ranges": [
    {
      "analyte": "IL-6",
      "sample_id": "CTRL_LO",
      "nominal": 40.0,
      "low": 30.0,
      "high": 50.0
    },
    {
      "analyte": "IL-6",
      "sample_id": "CTRL_MID",
      "nominal": 160.0,
      "low": 120.0,
      "high": 200.0
    },
    {
      "analyte": "IL-6",
      "sample_id": "CTRL_HI",
      "nominal": 600.0,
      "low": 450.0,
      "high": 750.0
    },
    {
      "analyte": "TNF-\u03b1",
      "sample_id": "CTRL_LO",
      "nominal": 20.0,
      "low": 15.0,
      "high": 25.0
    },
    {
      "analyte": "TNF-\u03b1",
      "sample_id": "CTRL_MID",
      "nominal": 70.0,
      "low": 52.5,
      "high": 87.5
    },
    {
      "analyte": "TNF-\u03b1",
      "sample_id": "CTRL_HI",
      "nominal": 250.0,
      "low": 187.5,
      "high": 312.5
    }
  ]
}