delicatessen.estimating_equations.dose_response.ee_effective_dose_delta

ee_effective_dose_delta(theta, y, delta, steepness, ed50, lower, upper)

Default stacked estimating equation to pair with the 4 parameter logistic model for estimation of the \(delta\) effective dose. The estimating equation is

\[\sum_{i=1}^n \left\{ \theta_1 + \frac{\theta_4 - \theta_1}{1 + (\theta_5 / \theta_2)^{\theta_3}} - \theta_4(1-\delta) - \theta_1 \delta \right\} = 0\]

where \(\theta_5\) is the \(ED(\delta)\), and the other \(\theta\) are from a PL model (1: lower limit, 2: steepness, 3: ED(50), 4: upper limit). For proper uncertainty estimation, this estimating equation should be stacked with the correspond PL model.

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

  • y (ndarray, list, vector) – 1-dimensional vector of n response values, used to construct correct shape for output.

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

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

  • ed50 (float) – Estimated parameter for the ED50, or ED(alpha=50), from the PL.

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

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_3p_logistic should be done similar to the following

>>> from delicatessen import MEstimator
>>> from delicatessen.data import load_inderjit
>>> from delicatessen.estimating_equations import ee_2p_logistic, ee_effective_dose_delta

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
>>> dose_data = d[:, 1]   # Dose data
>>> resp_data = d[:, 0]   # Response 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):
>>>     pl_model = ee_3p_logistic(theta=theta, X=dose_data, y=resp_data,
>>>                               lower=0)
>>>     ed_25 = ee_effective_dose_delta(theta[3], y=resp_data, delta=0.20,
>>>                                     steepness=theta[0], ed50=theta[1],
>>>                                     lower=0, upper=theta[2])
>>>     # Returning stacked estimating equations
>>>     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.min(resp_data)) / 2,
>>>                              (np.max(resp_data)+np.min(resp_data)) / 2,
>>>                              np.max(resp_data),
>>>                              (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]    # ED(50)
>>> estr.theta[1]    # steepness
>>> estr.theta[2]    # upper limit
>>> 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.