Skip to contents

# Predict Antimicrobial Resistance

Source: `R/resistance_predict.R`
`resistance_predict.Rd`

Create a prediction model to predict antimicrobial resistance for the next years. Standard errors (SE) will be returned as columns `se_min` and `se_max`. See Examples for a real live example.

NOTE: These functions are deprecated and will be removed in a future version. Use the AMR package combined with the tidymodels framework instead, for which we have written a basic and short introduction on our website.

## Usage

    resistance_predict(
      x,
      col_ab,
      col_date = NULL,
      year_min = NULL,
      year_max = NULL,
      year_every = 1,
      minimum = 30,
      model = NULL,
      I_as_S = TRUE,
      preserve_measurements = TRUE,
      info = interactive(),
      ...
    )

    sir_predict(
      x,
      col_ab,
      col_date = NULL,
      year_min = NULL,
      year_max = NULL,
      year_every = 1,
      minimum = 30,
      model = NULL,
      I_as_S = TRUE,
      preserve_measurements = TRUE,
      info = interactive(),
      ...
    )

    # S3 method for class 'resistance_predict'
    plot(x, main = paste("Resistance Prediction of", x_name), ...)

    ggplot_sir_predict(
      x,
      main = paste("Resistance Prediction of", x_name),
      ribbon = TRUE,
      ...
    )

    # S3 method for class 'resistance_predict'
    autoplot(
      object,
      main = paste("Resistance Prediction of", x_name),
      ribbon = TRUE,
      ...
    )

## Arguments

x

  A data.frame containing isolates. Can be left blank for automatic determination, see Examples.

col_ab

  Column name of `x` containing antimicrobial interpretations (`"R"`, `"I"` and `"S"`).

col_date

  Column name of the date, will be used to calculate years if this column doesn't consist of years already - the default is the first column of with a date class.

year_min

  Lowest year to use in the prediction model, dafaults to the lowest year in `col_date`.

year_max

  Highest year to use in the prediction model - the default is 10 years after today.

year_every

  Unit of sequence between lowest year found in the data and `year_max`.

minimum

  Minimal amount of available isolates per year to include. Years containing less observations will be estimated by the model.

model

  The statistical model of choice. This could be a generalised linear regression model with binomial distribution (i.e. using `glm(..., family = binomial)`, assuming that a period of zero resistance was followed by a period of increasing resistance leading slowly to more and more resistance. See Details for all valid options.

I_as_S

  A logical to indicate whether values `"I"` should be treated as `"S"` (will otherwise be treated as `"R"`). The default, `TRUE`, follows the redefinition by EUCAST about the interpretation of I (increased exposure) in 2019, see section Interpretation of S, I and R below.

preserve_measurements

  A logical to indicate whether predictions of years that are actually available in the data should be overwritten by the original data. The standard errors of those years will be `NA`.

info

  A logical to indicate whether textual analysis should be printed with the name and `summary()` of the statistical model.

...

  Arguments passed on to functions.

main

  Title of the plot.

ribbon

  A logical to indicate whether a ribbon should be shown (default) or error bars.

object

  Model data to be plotted.

## Value

A data.frame with extra class `resistance_predict` with columns:

- `year`

- `value`, the same as `estimated` when `preserve_measurements = FALSE`, and a combination of `observed` and `estimated` otherwise

- `se_min`, the lower bound of the standard error with a minimum of `0` (so the standard error will never go below 0%)

- `se_max` the upper bound of the standard error with a maximum of `1` (so the standard error will never go above 100%)

- `observations`, the total number of available observations in that year, i.e. \(S + I + R\)

- `observed`, the original observed resistant percentages

- `estimated`, the estimated resistant percentages, calculated by the model

Furthermore, the model itself is available as an attribute: `attributes(x)$model`, see Examples.

## Details

Valid options for the statistical model (argument `model`) are:

- `"binomial"` or `"binom"` or `"logit"`: a generalised linear regression model with binomial distribution

- `"loglin"` or `"poisson"`: a generalised log-linear regression model with poisson distribution

- `"lin"` or `"linear"`: a linear regression model

## Interpretation of SIR

In 2019, the European Committee on Antimicrobial Susceptibility Testing (EUCAST) has decided to change the definitions of susceptibility testing categories S, I, and R (https://www.eucast.org/bacteria/clinical-breakpoints-and-interpretation/definition-of-s-i-and-r/).

This AMR package follows insight; use `susceptibility()` (equal to `proportion_SI()`) to determine antimicrobial susceptibility and `count_susceptible()` (equal to `count_SI()`) to count susceptible isolates.

## See also

The `proportion()` functions to calculate resistance

Models: `lm()` `glm()`

## Examples

    x <- resistance_predict(example_isolates,
      col_ab = "AMX",
      year_min = 2010,
      model = "binomial"
    )
    #> Warning: The `resistance_predict()` function is deprecated and will be removed in a
    #> future version, see `?AMR-deprecated`. Use the tidymodels framework instead,
    #> for which we have written a basic and short introduction on our website:
    #> https://amr-for-r.org/articles/AMR_with_tidymodels.html This warning will be
    #> shown once per session.
    plot(x)

    # \donttest{
    if (require("ggplot2")) {
      ggplot_sir_predict(x)
    }
    #> Warning: Removed 8 rows containing missing values or values outside the scale range
    #> (`geom_ribbon()`).

    # using dplyr:
    if (require("dplyr")) {
      x <- example_isolates %>%
        filter_first_isolate() %>%
        filter(mo_genus(mo) == "Staphylococcus") %>%
        resistance_predict("PEN", model = "binomial")
      print(plot(x))

      # get the model from the object
      mymodel <- attributes(x)$model
      summary(mymodel)
    }

    #> NULL
    #>
    #> Call:
    #> glm(formula = df_matrix ~ year, family = binomial)
    #>
    #> Coefficients:
    #>             Estimate Std. Error z value Pr(>|z|)
    #> (Intercept) 35.76101   72.29172   0.495    0.621
    #> year        -0.01720    0.03603  -0.477    0.633
    #>
    #> (Dispersion parameter for binomial family taken to be 1)
    #>
    #>     Null deviance: 5.3681  on 11  degrees of freedom
    #> Residual deviance: 5.1408  on 10  degrees of freedom
    #> AIC: 50.271
    #>
    #> Number of Fisher Scoring iterations: 4
    #>

    # create nice plots with ggplot2 yourself
    if (require("dplyr") && require("ggplot2")) {
      data <- example_isolates %>%
        filter(mo == as.mo("E. coli")) %>%
        resistance_predict(
          col_ab = "AMX",
          col_date = "date",
          model = "binomial",
          info = FALSE,
          minimum = 15
        )
      head(data)
      autoplot(data)
    }
    #> Warning: Removed 16 rows containing missing values or values outside the scale range
    #> (`geom_ribbon()`).

    # }