Independent population-PK analysis — run R-20261008-141300-3341
sensitivity
template pk_2cmt_oral_v1 v1.0.3 ·
child of R-20261008-134356-4ad9 ·
status completed · 2026-10-08T14:13:14Z
1. Pre-comparison checks
| Check | Status | Detail |
|---|---|---|
| convergence | pass | Optimizer message: Normal exit from bobyqa |
| covariance step | pass | Covariance matrix obtained (method |r|,|s| (full)) |
| RSE feasibility | pass | All RSE below 50% |
| parameter bounds | pass | All estimates and variances within plausible bounds |
| estimation diagnostics | warn | nlmixr2 reported: gradient problems with covariance; see $scaleInfo; since sandwich matrix is corrected, you may compare to $covR or $covS if you wish; S matrix non-positive definite but corrected by S = sqrtm(S%*%S); R matrix non-positive definite but corrected by R = sqrtm(R%*%R); last objective function was not at minimum, possible problems in optimization; ETAs were reset to zero during optimization; (Can control by foceiControl(resetEtaP=.)) |
2. Comparison with the applicant's reported values
Relative difference = (independent − applicant) / applicant. Flag when |Δ| > 20%.
| Parameter | Applicant | Independent | 95% CI | Δ | Applicant value in CI | Flag |
|---|---|---|---|---|---|---|
| CL/F (L/h) | 4.2 | 4.14 | 3.85 – 4.46 | -1.4% | yes | |
| V2/F (L) | 35 | 35.2 | 31.1 – 39.8 | +0.6% | yes | |
| Q/F (L/h) | 8.1 | 7.97 | 7.55 – 8.42 | -1.6% | yes | |
| V3/F (L) | 120 | 115 | 108 – 122 | -4.4% | yes | |
| KA (1/h) | 1.1 | 1.13 | 0.948 – 1.36 | +3.1% | yes | |
| IIV CL (CV%) | 30 | 27.4 | – | -8.8% | – |
Possible sources of difference
No parameter differs from the applicant's value by more than the tolerance. Generic factors are listed for completeness.
Facts about this run
- BLQ method used in this run: M3; 7 censored observations used; BLQ fraction 1.7% overall, 6.2% of samples with NTIME ≥ 24 h.
- Actual sampling times used; 9 records deviate from nominal time beyond the QC tolerance.
- 3 records excluded and 11 records corrected during data preparation (see QC log).
- Estimation: FOCEi, template pk_2cmt_oral_v1.
- Software: R 4.6.1, nlmixr2 7.0.1, nlmixr2est 7.1.0, rxode2 5.1.7.1.
Generic factors
- Handling of BLQ observations — M1 (discarding) and M3 (likelihood-based censoring) use different information from late samples, which mostly informs terminal-phase parameters (V3/F, Q/F) and CL/F.
- Time variables and rounding — Use of actual vs nominal times, and rounding of sampling times, changes the observation design seen by the model.
- Data exclusions and corrections — Records excluded or corrected during data preparation (pre-dose records, unit conversions, outliers) may differ from the applicant's data handling.
- Estimation settings — Estimation algorithm, interaction term, initial estimates, parameterisation and optimiser tolerances can lead to different local optima.
- Software and versions — Different software (e.g. NONMEM vs nlmixr2) or versions may give numerically different estimates for the same model.
3. Parameter estimates
| Parameter | Estimate | RSE % | 95% CI | IIV CV% | η-shrinkage SD% | Fixed |
|---|---|---|---|---|---|---|
| CL/F (L/h) | 4.143 | 3.73 | 3.85 – 4.46 | 27.4 | 4.77 | no |
| V2/F (L) | 35.2 | 6.33 | 31.1 – 39.8 | 25.6 | 20.2 | no |
| Q/F (L/h) | 7.973 | 2.79 | 7.55 – 8.42 | – | – | no |
| V3/F (L) | 114.7 | 2.95 | 108 – 122 | – | – | no |
| KA (1/h) | 1.134 | 9.16 | 0.948 – 1.36 | 29.1 | 35.1 | no |
| Residual: add.sd | 8.09 | 34 | – | – | – | no |
| Residual: prop.sd | 0.1437 | 3.74 | – | – | – | no |
RSE on the natural scale ≈ 100 × SE(log θ); 95% CI = exp(log θ ± 1.96 SE). OFV = 4397.2982 · AIC = 5189.2065 · 60 subjects, 420 observations (7 censored) · covariance |r|,|s| (full) · estimation time 11.3 s.
4. Goodness-of-fit
5. Data QC and preparation
Every exclusion or correction is listed. Raw records: 483 → prepared: 480 (420 observations, 60 subjects).
| Check | Outcome | Records | Detail | Subjects |
|---|---|---|---|---|
| required_columns | pass | 0 | All 11 required columns present | |
| units | fix | 4 | Converted DV and LLOQ from ug/mL to ng/mL | SYN-052 |
| duplicates | pass | 0 | No duplicate records | |
| chronology | pass | 0 | Every subject has a dose record (60 subjects) | |
| records_before_dose | exclude | 3 | Observation records before the first dose excluded (3 with a quantified concentration > 0, which is not expected before dosing) | SYN-007, SYN-023, SYN-041 |
| ntime_vs_time | warn | 9 | Actual time deviates from nominal by more than max(0.5 h, 10% of NTIME); records kept, actual TIME used | SYN-005, SYN-007, SYN-012, SYN-014, SYN-019, SYN-025, SYN-035, SYN-046 |
| missing_covariates | pass | 0 | WT available for all subjects | |
| blq_proportion | pass | 7 | 7 BLQ records = 1.7% of observations (6.2% of samples with NTIME >= 24 h) | |
| blq_handling | fix | 7 | BLQ method M3: BLQ records kept as left-censored (DV set to LLOQ, CENS = 1) |
6. Analysis spec (confirmed by the assessor)
Confirmed 2026-10-08T14:13:00Z by djindetoss (GitHub) (/confirm on issue #1).
{
"compartments": 2,
"absorption": "first_order",
"route": "oral",
"error_model": "combined",
"iiv": [
"CL",
"V2",
"KA"
],
"estimation": "FOCEi",
"reference_values": {
"CL": 4.2,
"V2": 35.0,
"Q": 8.1,
"V3": 120.0,
"KA": 1.1,
"IIV_CL": 30.0
},
"analysis_type": "sensitivity",
"blq_method": "M3",
"template": "pk_2cmt_oral_v1"
}
7. Traceability manifest
| Run ID / parent | R-20261008-141300-3341 / R-20261008-134356-4ad9 (root R-20261008-134033-5040) |
| Template | pk_2cmt_oral_v1 v1.0.3, catalogue 1.0.3, template hash 589f254e36326ab2… |
| Script SHA-256 | fdffd00a137b56c3daa89e23c5ac8b89b3918ed8e8ca2f41756e74f8b8f8b03b |
| Raw data SHA-256 | 1cb7adff311dcd25660f2353d892964c98ad1932a6b69b6ed28c6ebfcaa48c6b |
| Prepared data SHA-256 | 38d30404d452db3275fe44a8f1a96a4e78d3d35377ba67e53bfba0a645a67ff2 |
| Seed | 20240607 |
| Extractor | anthropic (claude-opus-5-5, prompt system_v2) jobs J-71710b716b |
| R packages | nlmixr2 7.0.1, nlmixr2est 7.1.0, rxode2 5.1.7.1, lotri 1.0.5, ggplot2 4.0.3, jsonlite 2.0.0, R 4.6.1, BLAS /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3, LAPACK /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so |
| Python packages | python 3.12.3, jinja2 3.1.4, pandas 2.2.3, numpy 2.1.3, jsonschema 4.23.0, typer 0.12.5 |
| Environment | Linux-6.17.0-1022-azure-x86_64-with-glibc2.39 · image ghcr.io/djindetoss/pk-analysis-poc@sha256:dd39ca7673a48f1e3f7b6df134be2b4f4ae00ef4e0a726894a72cbdbdf295b4b · commit n/a |
Full manifest.json
{
"run_id": "R-20261008-141300-3341",
"parent_run_id": "R-20261008-134356-4ad9",
"root_run_id": "R-20261008-134033-5040",
"purpose": "analysis",
"analysis_type": "sensitivity",
"sensitivity_fields": [
"blq_method"
],
"status": "completed",
"created_at": "2026-10-08T14:13:00Z",
"completed_at": "2026-10-08T14:13:14Z",
"spec": {
"compartments": 2,
"absorption": "first_order",
"route": "oral",
"error_model": "combined",
"iiv": [
"CL",
"V2",
"KA"
],
"estimation": "FOCEi",
"reference_values": {
"CL": 4.2,
"V2": 35.0,
"Q": 8.1,
"V3": 120.0,
"KA": 1.1,
"IIV_CL": 30.0
},
"analysis_type": "sensitivity",
"blq_method": "M3",
"template": "pk_2cmt_oral_v1"
},
"spec_hash": "0030756b6dc1154888296838e116220220efa71e79063db429abd47172f527db",
"methodology_hash": "15de490dc0bac871c1176633475cba04a3be6b1269daf85223fe38a62eed9bde",
"template": {
"id": "pk_2cmt_oral_v1",
"version": "1.0.3",
"hash": "589f254e36326ab2ae18dce251949169b318f7e59c79210d33428f972dc38600",
"catalogue_version": "1.0.3"
},
"script_hash": "fdffd00a137b56c3daa89e23c5ac8b89b3918ed8e8ca2f41756e74f8b8f8b03b",
"seed": 20240607,
"input_data": {
"raw_file": "data/raw/adpc_synthetic.csv",
"raw_hash": "1cb7adff311dcd25660f2353d892964c98ad1932a6b69b6ed28c6ebfcaa48c6b",
"prepared_hash": "38d30404d452db3275fe44a8f1a96a4e78d3d35377ba67e53bfba0a645a67ff2"
},
"extractor": {
"name": "anthropic",
"model": "claude-opus-5-5",
"prompt_version": "system_v2",
"job_ids": [
"J-71710b716b"
]
},
"confirmation": {
"at": "2026-10-08T14:13:00Z",
"by": "djindetoss (GitHub)",
"mode": "/confirm on issue #1"
},
"packages": {
"python": {
"python": "3.12.3",
"jinja2": "3.1.4",
"pandas": "2.2.3",
"numpy": "2.1.3",
"jsonschema": "4.23.0",
"typer": "0.12.5"
},
"r": {
"nlmixr2": "7.0.1",
"nlmixr2est": "7.1.0",
"rxode2": "5.1.7.1",
"lotri": "1.0.5",
"ggplot2": "4.0.3",
"jsonlite": "2.0.0",
"R": "4.6.1",
"BLAS": "/usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3",
"LAPACK": "/usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so"
}
},
"environment": {
"platform": "Linux-6.17.0-1022-azure-x86_64-with-glibc2.39",
"machine": "x86_64",
"cpu": "Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz",
"math_env": {
"OPENBLAS_CORETYPE": "Prescott",
"OPENBLAS_NUM_THREADS": "1",
"GLIBC_TUNABLES": "glibc.cpu.hwcaps=-AVX2_Usable,-AVX512F_Usable,-FMA_Usable,-FMA4_Usable,-AVX2,-AVX512F,-FMA,-FMA4"
},
"container_image": "ghcr.io/djindetoss/pk-analysis-poc@sha256:dd39ca7673a48f1e3f7b6df134be2b4f4ae00ef4e0a726894a72cbdbdf295b4b",
"git_commit": null,
"python_executable": "/opt/venv/bin/python"
},
"tool_version": "0.1.0",
"settings": {
"tolerance": 0.2,
"rse_threshold": 50.0,
"qc": {
"ntime_abs_tol_h": 0.5,
"ntime_rel_tol": 0.1,
"blq_warn_fraction": 0.1
}
},
"engine": {
"returncode": 0,
"elapsed_s": 14.2,
"resumed_from_checkpoint": false
},
"outputs": {},
"comparable": true
}Generated 2026-10-08T14:13:14Z by pk-analysis-poc 0.1.0 — synthetic data, demonstrator only.