delicatessen.estimating_equations.pharmacokinetics.ee_loglogistic_ed

ee_loglogistic_ed(theta, dose, delta, lower, upper, ed50, steepness)

Estimating equation for the \(\delta\)-effective dose with the 4 parameter log-logistic model. The estimating equation is

\[\sum_{i=1}^n \left\{ \theta_z + \frac{\theta_m - \theta_z}{1 + (\theta_d / \theta_{50})^{\theta_s}} - \theta_m(1-\delta) - \theta_z \delta \right\} = 0\]

where \(\theta_d\) is the \(ED(\delta)\), and the other \(\theta\) are from a log-logistic model. For proper uncertainty estimation, this estimating equation should be stacked with the log-logistic model.

Parameters
  • theta (int, float) – Theta value corresponding to the ED(delta).

  • dose (ndarray, list, vector) – 1-dimensional vector of n dose values, used to construct correct shape for output (not used in the estimating function).

  • delta (float) – The effective dose level of interest, ED(delta).

  • lower (int, float) – Estimated parameter or pre-specified constant for the lower limit. This should be a pre-specified constant for both the 3PL and 2PL.

  • upper (int, float) – Estimated parameter or pre-specified constant for the lower limit. This should be a pre-specified constant for the 2PL.

  • ed50 (float) – Estimated parameter for the ED50 from the PL.

  • steepness (float) – Estimated parameter for the steepness from the PL.

Returns

Returns a 1-by-n NumPy array evaluated for the input theta.

Return type

array

Examples

Construction of a estimating equations for ED25 with ee_loglogistic should be done similar to the following

>>> from delicatessen import MEstimator
>>> from delicatessen.data import load_inderjit
>>> from delicatessen.estimating_equations import ee_loglogistic, ee_loglogistic_ed

For demonstration, we use dose-response data from Inderjit et al. (2002), which can be loaded from delicatessen directly.

>>> d = load_inderjit()   # Loading array of data
>>> resp_data = d[:, 0]   # Response data
>>> dose_data = d[:, 1]   # Dose data

Since there is a natural lower-bound of 0 for root growth, we set lower=0. While a natural upper bound does not exist for this example, we set upper=8 for illustrative purposes. Defining psi, or the stacked estimating equations

>>> def psi(theta):
>>>     lower = 0
>>>     pl_model = ee_loglogistic(theta=[lower, ]+list(theta), dose=dose_data, response=resp_data)
>>>     ed_25 = ee_loglogistic_ed(theta[3], dose=dose_data, delta=0.25,
>>>                               lower=lower, upper=theta[0],
>>>                               ed50=theta[1], steepness=theta[2])
>>>     return np.vstack((pl_model,
>>>                       ed_25,))

Notice that the estimating equations are stacked in the order of the parameters in theta (the first 3 belong to 3PL and the last belong to ED(25)).

>>> estr = MEstimator(psi, init=[np.max(resp_data),
>>>                              (np.max(resp_data)+np.min(resp_data)) / 2,
>>>                              (np.max(resp_data)+np.min(resp_data)) / 2,
>>>                              (np.max(resp_data)+np.min(resp_data)) / 2])
>>> estr.estimate(solver='lm')

Inspecting the parameter estimates, variance, and confidence intervals

>>> estr.theta
>>> estr.variance
>>> estr.confidence_intervals()

Inspecting the parameter estimates

>>> estr.theta[0]    # upper limit
>>> estr.theta[1]    # ED(50)
>>> estr.theta[2]    # steepness
>>> estr.theta[3]    # ED(25)

References

Ritz C, Baty F, Streibig JC, & Gerhard D. (2015). Dose-response analysis using R. PloS One, 10(12), e0146021.

An H, Justin TL, Aubrey GB, Marron JS, & Dittmer DP. (2019). dr4pl: A Stable Convergence Algorithm for the 4 Parameter Logistic Model. R J., 11(2), 171.

Inderjit, Streibig JC, & Olofsdotter M. (2002). Joint action of phenolic acid mixtures and its significance in allelopathy research. Physiologia Plantarum, 114(3), 422-428.