Skill Tracer
Skills › Scientific Agent Skills › pkpd-modeling › pd-and-exposure-response.md

pd-and-exposure-response.md

52 lines · skills/pkpd-modeling/references/pd-and-exposure-response.md at 5f2bc03

Open on GitHub
1# PD and exposure-response workflow
2

PD and exposure-response workflow

Raw lines 1 to 2
3## Choose a structure the observations can distinguish
4
5| Structure | Equation/role | Main identification concern |
6| --- | --- | --- |
7| Direct Emax | `E0 + Emax*C/(EC50+C)` | Without a plateau, Emax and EC50 trade off |
8| Sigmoid Emax | `E0 + Emax*C^h/(EC50^h+C^h)` | Hill, EC50 and Emax need concentration-range support |
9| Effect compartment | `dCe/dt=ke0*(C-Ce)` | Delay can also arise from sampling, metabolites or turnover |
10| Indirect response | Production/loss modulated by drug | Baseline turnover and drug effect can be confounded |
11| Logistic | `logit(p)=a+b*exposure` | Separation, confounding and repeated observations |
13Effect-compartment Ce is a link variable, not an additional drug mass. Indirect response models I–IV
14inhibit/stimulate production or loss. An inhibitory fraction must stay between zero and one;
15stimulation terms must not make rates negative. Estimate/fix turnover with independent evidence
16where possible. Similar hysteresis loops do not uniquely select one mechanism.
18The ODE and regression helpers check finite inputs and solver/optimizer outcomes, but local
19standard errors are not evidence of structural identifiability. A converged fit with a deficient
20Jacobian must not imply precise parameters. Check profiles, bounds, starting-value sensitivity and
21predictions under perturbation, especially when the sampled range never reaches a plateau.

Choose a structure the observations can distinguish

StructureEquation/roleMain identification concern
Direct EmaxE0 + Emax*C/(EC50+C)Without a plateau, Emax and EC50 trade off
Sigmoid EmaxE0 + Emax*C^h/(EC50^h+C^h)Hill, EC50 and Emax need concentration-range support
Effect compartmentdCe/dt=ke0*(C-Ce)Delay can also arise from sampling, metabolites or turnover
Indirect responseProduction/loss modulated by drugBaseline turnover and drug effect can be confounded
Logisticlogit(p)=a+b*exposureSeparation, confounding and repeated observations

Effect-compartment Ce is a link variable, not an additional drug mass. Indirect response models I–IV inhibit/stimulate production or loss. An inhibitory fraction must stay between zero and one; stimulation terms must not make rates negative. Estimate/fix turnover with independent evidence where possible. Similar hysteresis loops do not uniquely select one mechanism.

The ODE and regression helpers check finite inputs and solver/optimizer outcomes, but local standard errors are not evidence of structural identifiability. A converged fit with a deficient Jacobian must not imply precise parameters. Check profiles, bounds, starting-value sensitivity and predictions under perturbation, especially when the sampled range never reaches a plateau.

Raw lines 3 to 22
23## Exposure-response is not automatically causal
25Randomized dose does not randomize realized exposure. Clearance can covary with disease severity,
26body size, adherence and prognosis. Derived exposure carries estimation error; time-varying
27clearance and survival-dependent sampling can induce bias. Define the estimand, temporal ordering,
28confounders, missingness and sensitivity analyses before interpreting a slope as a dose benefit.
29Balance efficacy and safety outcomes rather than maximizing a single modeled response.
30[FDA exposure-response guidance](https://www.fda.gov/regulatory-information/search-fda-guidance-documents/exposure-response-relationships-study-design-data-analysis-and-regulatory-applications).
32`exposure_response.py` uses independent observations. Repeated longitudinal responses, count or
33time-to-event endpoints need models with appropriate distributions and dependence. Logistic data
34must contain both outcomes and exposure variation; complete/quasi-complete separation is rejected
35rather than returning a misleading finite estimate. C-QTc limitations are in [DDI/QT](ddi-and-qt.md).

Exposure-response is not automatically causal

Randomized dose does not randomize realized exposure. Clearance can covary with disease severity, body size, adherence and prognosis. Derived exposure carries estimation error; time-varying clearance and survival-dependent sampling can induce bias. Define the estimand, temporal ordering, confounders, missingness and sensitivity analyses before interpreting a slope as a dose benefit. Balance efficacy and safety outcomes rather than maximizing a single modeled response. FDA exposure-response guidance.

exposure_response.py uses independent observations. Repeated longitudinal responses, count or time-to-event endpoints need models with appropriate distributions and dependence. Logistic data must contain both outcomes and exposure variation; complete/quasi-complete separation is rejected rather than returning a misleading finite estimate. C-QTc limitations are in DDI/QT.

Raw lines 23 to 36
37## Pharmpy model construction
39These transformations were executed independently on the bundled example model under Pharmpy 2.2.0.
40They return new models; they do not estimate parameters or establish adequacy:
42```python
43import pharmpy.modeling as m
44base = m.load_example_model("pheno")
45direct = m.set_direct_effect(base, expr="sigmoid")
46link = m.add_effect_compartment(base, expr="emax")
47turnover = m.add_indirect_effect(base, expr="emax", prod=True)
48```
50`prod=True` targets production; `False` targets elimination. Inspect the resulting symbolic model,
51observation mapping, parameter signs and baseline conditions before fitting it to actual data.
52[Pharmpy modeling API](https://pharmpy.github.io/latest/api/pharmpy.modeling.add_indirect_effect.html).

Pharmpy model construction

These transformations were executed independently on the bundled example model under Pharmpy 2.2.0. They return new models; they do not estimate parameters or establish adequacy:

import pharmpy.modeling as m
base = m.load_example_model("pheno")
direct = m.set_direct_effect(base, expr="sigmoid")
link = m.add_effect_compartment(base, expr="emax")
turnover = m.add_indirect_effect(base, expr="emax", prod=True)

prod=True targets production; False targets elimination. Inspect the resulting symbolic model, observation mapping, parameter signs and baseline conditions before fitting it to actual data. Pharmpy modeling API.

Raw lines 37 to 52