Fit dose-response relationships to dose-response data and calculate biometric results for (eco)toxicity evaluation

drfit(data, startlogED50 = NA, chooseone = TRUE, probit = TRUE, logit = FALSE,
weibull = FALSE, linlogit = FALSE, level = 0.95, linlogitWrong = NA,
allWrong = NA, ps0 = 1, ls0 = 0.5, ws0 = 0.5, b0 = 2, f0 = 0,
showED50 = FALSE,
EDx = NULL, EDx.tolerance = 1e-4)

## Arguments

data A data frame containing dose-response data. The data frame has to contain at least a factor called “substance”, a numeric vector “dose” with the dose values, a vector called “unit” containing the unit used for the dose and a numeric vector “response” with the response values of the test system normalized between 0 and 1. Such a data frame can be easily obtained if a compliant RODBC data source is available for use in conjunction with the function drdata. If there is a column called “ok” and it is set to “no fit” in a specific line, then the corresponding data point will be excluded from the fitting procedure, although it will be plotted. Especially for the linlogit model, a suitable log10 of the ED50 has to be given by the user, since it is not correctly estimated for data showing hormesis with the default estimation method. A boolean defining if cumulative density curves of normal distributions pnorm are fitted against the decadic logarithm of the dose. Default ist TRUE. A boolean defining if cumulative density curves of logistic distributions plogis are fitted to the decadic logarithm of the dose. Default is FALSE. A boolean defining if the cumulative density curves of weibull distributions (pweibull with additionall location parameter and scale=1) are fitted to the decadic logarithm of the dose. Default is FALSE. Note that the weibull distribution is fitted here to the log transformed doses which appears to be an uncommon approach. A boolean defining if the linear-logistic function linlogitf as defined by van Ewijk and Hoekstra 1993 is fitted to the data. Default is FALSE. The level for the confidence interval listed for the log ED50. An optional vector containing the names of the substances for which the linlogit function produces a wrong fit. An optional vector containing the names of the substances for which all functions produce a wrong fit. If TRUE (default), the models are tried in the order linlogit, probit, logit, weibull, and the first model that produces a valid fit is used. If FALSE, all models that are set to TRUE and that can be fitted will be reported. If the probit model is fitted, ps0 gives the possibility to adjust the starting value for the scale parameter of pnorm. If the logit model is fitted, ls0 gives the possibility to adjust the starting value for the scale parameter of plogis. If the weibull model is fitted, ws0 gives the possibility to adjust the starting value for the shape parameter of pweibull. If the linearlogistic model is fitted, b0 and f0 give the possibility to adjust the starting values for the parameters b and f. If set to TRUE, the ED50 and its confidence interval on the original dose scale (not log scale) is included in the output. A vector of inhibition values x in percent for which the corresponding doses EDx should be reported. Tolerance of the effect level, expressed on the response scale from 0 to 1.

## Value

A dataframe with the attribute models holding a list of the fitted dose-response models of class nls. The dataframe has at least one line for each substance.

For the “linlogit”, “logit” and “probit” models, the parameter a that is reported coincides with the logED50, i.e the logED50 is one of the model parameters that is being fitted. Therefore, a confidence interval for the confidence level level is calculated using the confint.nls function and listed.

The following variables are in the dataframe:

Substance

The name of the substance

ndl

The number of dose levels in the raw data

n

The total number of data points in the raw data used for the fit

lld

The decadic logarithm of the lowest dose

lhd

The total number of data points in the raw data used for the fit

mtype

If the data did not show a mean response < 0.5 at the highest dose level, the modeltype is set to “inactive”. If the mean response at the lowest dose is smaller than 0.5, the modeltype is set to “active”. In both cases, no fitting procedure is carried out. If the fitted ED50 is higher than the highest dose, “no fit” is given here.

logED50

The decadic logarithm of the ED50

low %

The lower bound of the confidence interval of log ED50. The name of the column depends on the requested confidence level.

high %

The higher bound of the confidence interval of log ED50. The name of the column depends on the requested confidence level.

unit

The unit used for the dose levels in the dose-response data

sigma

The square root of the estimated variance of the random error as returned by summary.nls.

a

For the “linlogit”, “logit” and “probit” models, the parameter a coincides with the logED50. In the case of the “weibull” model, a is a location parameter.

b

Parameter b in the case of the “linlogit” fit is the variable b from the linlogitf function. In the case of “probit” fit it is the standard deviation of the fitted normal distribution, in the case of the “logit” fit it is the scale parameter in the plogis function, and in the “weibull” fit it is the shape parameter of the fitted pweibull function.

c

Only the “linlogit” fit produces a third parameter c which is the variable f from the linlogitf function.

If the parameter showED50 was set to TRUE, the ED50 values and their confidence intervals are also included on the original dose scale. If one or more response leves were specified in the argument EDx, the corresponding dose levels are given in addition.

## Note

There is a demo for each dataset that can be accessed by demo(dataset)

Further examples are given in help pages to the datasets antifoul, IM1xIPC81 and IM1xVibrio. Since version 0.6.1 of this package, there is a drop-in replacement function drcfit which internally uses the drc package and also gives confidence intervals for EDx values via this package.

## Examples

data(antifoul)
r <- drfit(antifoul, showED50 = TRUE, EDx = c(5, 10, 20))#>
#> TBT: Fitting data...#> Waiting for profiling to be done...#>
#> Zn Pyrithion: Fitting data...#> Waiting for profiling to be done...format(r, digits = 2)#>      Substance ndl   n  lld lhd  mtype logED50  2.5%  97.5%   unit sigma     a
#> 1          TBT  38 135 -2.7 2.4 probit   -0.16 -0.27 -0.056 microM  0.19 -0.16
#> 2 Zn Pyrithion  27  81 -2.1 2.0 probit   -0.40 -0.51 -0.292 microM  0.23 -0.40
#>      b ED50 ED50 2.5% ED50 97.5%  EDx5 EDx10 EDx20
#> 1 0.68 0.68      0.54       0.88 0.053 0.093  0.18
#> 2 0.42 0.40      0.31       0.51 0.082 0.117  0.18