mirror of
https://github.com/msberends/AMR.git
synced 2025-04-15 22:30:33 +02:00
708 lines
78 KiB
HTML
708 lines
78 KiB
HTML
<!DOCTYPE html>
|
||
<!-- Generated by pkgdown: do not edit by hand --><html lang="en">
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
<meta charset="utf-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||
<title>AMR with tidymodels • AMR (for R)</title>
|
||
<!-- favicons --><link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
|
||
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
|
||
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="../apple-touch-icon.png">
|
||
<link rel="apple-touch-icon" type="image/png" sizes="120x120" href="../apple-touch-icon-120x120.png">
|
||
<link rel="apple-touch-icon" type="image/png" sizes="76x76" href="../apple-touch-icon-76x76.png">
|
||
<link rel="apple-touch-icon" type="image/png" sizes="60x60" href="../apple-touch-icon-60x60.png">
|
||
<script src="../deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||
<link href="../deps/bootstrap-5.3.1/bootstrap.min.css" rel="stylesheet">
|
||
<script src="../deps/bootstrap-5.3.1/bootstrap.bundle.min.js"></script><link href="../deps/Lato-0.4.9/font.css" rel="stylesheet">
|
||
<link href="../deps/Fira_Code-0.4.9/font.css" rel="stylesheet">
|
||
<link href="../deps/font-awesome-6.5.2/css/all.min.css" rel="stylesheet">
|
||
<link href="../deps/font-awesome-6.5.2/css/v4-shims.min.css" rel="stylesheet">
|
||
<script src="../deps/headroom-0.11.0/headroom.min.js"></script><script src="../deps/headroom-0.11.0/jQuery.headroom.min.js"></script><script src="../deps/bootstrap-toc-1.0.1/bootstrap-toc.min.js"></script><script src="../deps/clipboard.js-2.0.11/clipboard.min.js"></script><script src="../deps/search-1.0.0/autocomplete.jquery.min.js"></script><script src="../deps/search-1.0.0/fuse.min.js"></script><script src="../deps/search-1.0.0/mark.min.js"></script><!-- pkgdown --><script src="../pkgdown.js"></script><link href="../extra.css" rel="stylesheet">
|
||
<script src="../extra.js"></script><meta property="og:title" content="AMR with tidymodels">
|
||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.css" integrity="sha384-nB0miv6/jRmo5UMMR1wu3Gz6NLsoTkbqJghGIsx//Rlm+ZU03BU6SQNC66uf4l5+" crossorigin="anonymous">
|
||
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.js" integrity="sha384-7zkQWkzuo3B5mTepMUcHkMB5jZaolc2xDwL6VFqjFALcbeS9Ggm/Yr2r3Dy4lfFg" crossorigin="anonymous"></script><script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/contrib/auto-render.min.js" integrity="sha384-43gviWU0YVjaDtb/GhzOouOXtZMP/7XUzwPTstBeZFe/+rCMvRwr4yROQP43s0Xk" crossorigin="anonymous" onload="renderMathInElement(document.body);"></script>
|
||
</head>
|
||
<body>
|
||
<a href="#main" class="visually-hidden-focusable">Skip to contents</a>
|
||
|
||
|
||
<nav class="navbar navbar-expand-lg fixed-top bg-primary" data-bs-theme="dark" aria-label="Site navigation"><div class="container">
|
||
|
||
<a class="navbar-brand me-2" href="../index.html">AMR (for R)</a>
|
||
|
||
<small class="nav-text text-muted me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="">2.1.1.9235</small>
|
||
|
||
|
||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
|
||
<span class="navbar-toggler-icon"></span>
|
||
</button>
|
||
|
||
<div id="navbar" class="collapse navbar-collapse ms-3">
|
||
<ul class="navbar-nav me-auto">
|
||
<li class="active nav-item dropdown">
|
||
<button class="nav-link dropdown-toggle" type="button" id="dropdown-how-to" data-bs-toggle="dropdown" aria-expanded="false" aria-haspopup="true"><span class="fa fa-question-circle"></span> How to</button>
|
||
<ul class="dropdown-menu" aria-labelledby="dropdown-how-to">
|
||
<li><a class="dropdown-item" href="../articles/AMR.html"><span class="fa fa-directions"></span> Conduct AMR Analysis</a></li>
|
||
<li><a class="dropdown-item" href="../reference/antibiogram.html"><span class="fa fa-file-prescription"></span> Generate Antibiogram (Trad./Syndromic/WISCA)</a></li>
|
||
<li><a class="dropdown-item" href="../articles/AMR_with_tidymodels.html"><span class="fa fa-square-root-variable"></span> Use AMR for Predictive Modelling (tidymodels)</a></li>
|
||
<li><a class="dropdown-item" href="../articles/datasets.html"><span class="fa fa-database"></span> Download Data Sets for Own Use</a></li>
|
||
<li><a class="dropdown-item" href="../reference/AMR-options.html"><span class="fa fa-gear"></span> Set User- Or Team-specific Package Settings</a></li>
|
||
<li><a class="dropdown-item" href="../articles/PCA.html"><span class="fa fa-compress"></span> Conduct Principal Component Analysis for AMR</a></li>
|
||
<li><a class="dropdown-item" href="../articles/MDR.html"><span class="fa fa-skull-crossbones"></span> Determine Multi-Drug Resistance (MDR)</a></li>
|
||
<li><a class="dropdown-item" href="../articles/WHONET.html"><span class="fa fa-globe-americas"></span> Work with WHONET Data</a></li>
|
||
<li><a class="dropdown-item" href="../articles/EUCAST.html"><span class="fa fa-exchange-alt"></span> Apply EUCAST Rules</a></li>
|
||
<li><a class="dropdown-item" href="../reference/mo_property.html"><span class="fa fa-bug"></span> Get Taxonomy of a Microorganism</a></li>
|
||
<li><a class="dropdown-item" href="../reference/ab_property.html"><span class="fa fa-capsules"></span> Get Properties of an Antibiotic Drug</a></li>
|
||
<li><a class="dropdown-item" href="../reference/av_property.html"><span class="fa fa-capsules"></span> Get Properties of an Antiviral Drug</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="nav-item"><a class="nav-link" href="../articles/AMR_for_Python.html"><span class="fa fab fa-python"></span> AMR for Python</a></li>
|
||
<li class="nav-item"><a class="nav-link" href="../reference/index.html"><span class="fa fa-book-open"></span> Manual</a></li>
|
||
<li class="nav-item"><a class="nav-link" href="../authors.html"><span class="fa fa-users"></span> Authors</a></li>
|
||
</ul>
|
||
<ul class="navbar-nav">
|
||
<li class="nav-item"><form class="form-inline" role="search">
|
||
<input class="form-control" type="search" name="search-input" id="search-input" autocomplete="off" aria-label="Search site" placeholder="Search for" data-search-index="../search.json">
|
||
</form></li>
|
||
<li class="nav-item"><a class="nav-link" href="../news/index.html"><span class="fa fa-newspaper"></span> Changelog</a></li>
|
||
<li class="nav-item"><a class="external-link nav-link" href="https://github.com/msberends/AMR"><span class="fa fa-github"></span> Source Code</a></li>
|
||
</ul>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
</nav><div class="container template-article">
|
||
|
||
|
||
|
||
|
||
<div class="row">
|
||
<main id="main" class="col-md-9"><div class="page-header">
|
||
<img src="../logo.svg" class="logo" alt=""><h1>AMR with tidymodels</h1>
|
||
|
||
|
||
<small class="dont-index">Source: <a href="https://github.com/msberends/AMR/blob/main/vignettes/AMR_with_tidymodels.Rmd" class="external-link"><code>vignettes/AMR_with_tidymodels.Rmd</code></a></small>
|
||
<div class="d-none name"><code>AMR_with_tidymodels.Rmd</code></div>
|
||
</div>
|
||
|
||
|
||
|
||
<blockquote>
|
||
<p>This page was entirely written by our <a href="https://chatgpt.com/g/g-M4UNLwFi5-amr-for-r-assistant" class="external-link">AMR for R
|
||
Assistant</a>, a ChatGPT manually-trained model able to answer any
|
||
question about the AMR package.</p>
|
||
</blockquote>
|
||
<p>Antimicrobial resistance (AMR) is a global health crisis, and
|
||
understanding resistance patterns is crucial for managing effective
|
||
treatments. The <code>AMR</code> R package provides robust tools for
|
||
analysing AMR data, including convenient antimicrobial selector
|
||
functions like <code><a href="../reference/antimicrobial_selectors.html">aminoglycosides()</a></code> and
|
||
<code><a href="../reference/antimicrobial_selectors.html">betalactams()</a></code>.</p>
|
||
<p>In this post, we will explore how to use the <code>tidymodels</code>
|
||
framework to predict resistance patterns in the
|
||
<code>example_isolates</code> dataset in two examples.</p>
|
||
<div class="section level2">
|
||
<h2 id="example-1-using-antimicrobial-selectors">Example 1: Using Antimicrobial Selectors<a class="anchor" aria-label="anchor" href="#example-1-using-antimicrobial-selectors"></a>
|
||
</h2>
|
||
<p>By leveraging the power of <code>tidymodels</code> and the
|
||
<code>AMR</code> package, we’ll build a reproducible machine learning
|
||
workflow to predict the Gramstain of the microorganism to two important
|
||
antibiotic classes: aminoglycosides and beta-lactams.</p>
|
||
<div class="section level3">
|
||
<h3 id="objective">
|
||
<strong>Objective</strong><a class="anchor" aria-label="anchor" href="#objective"></a>
|
||
</h3>
|
||
<p>Our goal is to build a predictive model using the
|
||
<code>tidymodels</code> framework to determine the Gramstain of the
|
||
microorganism based on microbial data. We will:</p>
|
||
<ol style="list-style-type: decimal">
|
||
<li>Preprocess data using the selector functions
|
||
<code><a href="../reference/antimicrobial_selectors.html">aminoglycosides()</a></code> and <code><a href="../reference/antimicrobial_selectors.html">betalactams()</a></code>.</li>
|
||
<li>Define a logistic regression model for prediction.</li>
|
||
<li>Use a structured <code>tidymodels</code> workflow to preprocess,
|
||
train, and evaluate the model.</li>
|
||
</ol>
|
||
</div>
|
||
<div class="section level3">
|
||
<h3 id="data-preparation">
|
||
<strong>Data Preparation</strong><a class="anchor" aria-label="anchor" href="#data-preparation"></a>
|
||
</h3>
|
||
<p>We begin by loading the required libraries and preparing the
|
||
<code>example_isolates</code> dataset from the <code>AMR</code>
|
||
package.</p>
|
||
<div class="sourceCode" id="cb1"><pre class="downlit sourceCode r">
|
||
<code class="sourceCode R"><span><span class="co"># Load required libraries</span></span>
|
||
<span><span class="kw"><a href="https://rdrr.io/r/base/library.html" class="external-link">library</a></span><span class="op">(</span><span class="va"><a href="https://www.amr-for-r.org/" class="external-link">AMR</a></span><span class="op">)</span> <span class="co"># For AMR data analysis</span></span>
|
||
<span><span class="kw"><a href="https://rdrr.io/r/base/library.html" class="external-link">library</a></span><span class="op">(</span><span class="va"><a href="https://tidymodels.tidymodels.org" class="external-link">tidymodels</a></span><span class="op">)</span> <span class="co"># For machine learning workflows, and data manipulation (dplyr, tidyr, ...)</span></span></code></pre></div>
|
||
<p>Prepare the data:</p>
|
||
<div class="sourceCode" id="cb2"><pre class="downlit sourceCode r">
|
||
<code class="sourceCode R"><span><span class="co"># Your data could look like this:</span></span>
|
||
<span><span class="va">example_isolates</span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># A tibble: 2,000 × 46</span></span></span>
|
||
<span><span class="co">#> date patient age gender ward mo PEN OXA FLC AMX </span></span>
|
||
<span><span class="co">#> <span style="color: #949494; font-style: italic;"><date></span> <span style="color: #949494; font-style: italic;"><chr></span> <span style="color: #949494; font-style: italic;"><dbl></span> <span style="color: #949494; font-style: italic;"><chr></span> <span style="color: #949494; font-style: italic;"><chr></span> <span style="color: #949494; font-style: italic;"><mo></span> <span style="color: #949494; font-style: italic;"><sir></span> <span style="color: #949494; font-style: italic;"><sir></span> <span style="color: #949494; font-style: italic;"><sir></span> <span style="color: #949494; font-style: italic;"><sir></span></span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 1</span> 2002-01-02 A77334 65 F Clinical <span style="color: #949494;">B_</span>ESCHR<span style="color: #949494;">_</span>COLI <span style="color: #080808; background-color: #FFAFAF;"> R </span> <span style="color: #B2B2B2;"> NA</span> <span style="color: #B2B2B2;"> NA</span> <span style="color: #B2B2B2;"> NA</span> </span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 2</span> 2002-01-03 A77334 65 F Clinical <span style="color: #949494;">B_</span>ESCHR<span style="color: #949494;">_</span>COLI <span style="color: #080808; background-color: #FFAFAF;"> R </span> <span style="color: #B2B2B2;"> NA</span> <span style="color: #B2B2B2;"> NA</span> <span style="color: #B2B2B2;"> NA</span> </span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 3</span> 2002-01-07 067927 45 F ICU <span style="color: #949494;">B_</span>STPHY<span style="color: #949494;">_</span>EPDR <span style="color: #080808; background-color: #FFAFAF;"> R </span> <span style="color: #B2B2B2;"> NA</span> <span style="color: #080808; background-color: #FFAFAF;"> R </span> <span style="color: #B2B2B2;"> NA</span> </span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 4</span> 2002-01-07 067927 45 F ICU <span style="color: #949494;">B_</span>STPHY<span style="color: #949494;">_</span>EPDR <span style="color: #080808; background-color: #FFAFAF;"> R </span> <span style="color: #B2B2B2;"> NA</span> <span style="color: #080808; background-color: #FFAFAF;"> R </span> <span style="color: #B2B2B2;"> NA</span> </span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 5</span> 2002-01-13 067927 45 F ICU <span style="color: #949494;">B_</span>STPHY<span style="color: #949494;">_</span>EPDR <span style="color: #080808; background-color: #FFAFAF;"> R </span> <span style="color: #B2B2B2;"> NA</span> <span style="color: #080808; background-color: #FFAFAF;"> R </span> <span style="color: #B2B2B2;"> NA</span> </span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 6</span> 2002-01-13 067927 45 F ICU <span style="color: #949494;">B_</span>STPHY<span style="color: #949494;">_</span>EPDR <span style="color: #080808; background-color: #FFAFAF;"> R </span> <span style="color: #B2B2B2;"> NA</span> <span style="color: #080808; background-color: #FFAFAF;"> R </span> <span style="color: #B2B2B2;"> NA</span> </span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 7</span> 2002-01-14 462729 78 M Clinical <span style="color: #949494;">B_</span>STPHY<span style="color: #949494;">_</span>AURS <span style="color: #080808; background-color: #FFAFAF;"> R </span> <span style="color: #B2B2B2;"> NA</span> <span style="color: #080808; background-color: #5FD7AF;"> S </span> <span style="color: #080808; background-color: #FFAFAF;"> R </span></span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 8</span> 2002-01-14 462729 78 M Clinical <span style="color: #949494;">B_</span>STPHY<span style="color: #949494;">_</span>AURS <span style="color: #080808; background-color: #FFAFAF;"> R </span> <span style="color: #B2B2B2;"> NA</span> <span style="color: #080808; background-color: #5FD7AF;"> S </span> <span style="color: #080808; background-color: #FFAFAF;"> R </span></span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 9</span> 2002-01-16 067927 45 F ICU <span style="color: #949494;">B_</span>STPHY<span style="color: #949494;">_</span>EPDR <span style="color: #080808; background-color: #FFAFAF;"> R </span> <span style="color: #B2B2B2;"> NA</span> <span style="color: #080808; background-color: #FFAFAF;"> R </span> <span style="color: #B2B2B2;"> NA</span> </span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;">10</span> 2002-01-17 858515 79 F ICU <span style="color: #949494;">B_</span>STPHY<span style="color: #949494;">_</span>EPDR <span style="color: #080808; background-color: #FFAFAF;"> R </span> <span style="color: #B2B2B2;"> NA</span> <span style="color: #080808; background-color: #5FD7AF;"> S </span> <span style="color: #B2B2B2;"> NA</span> </span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># ℹ 1,990 more rows</span></span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># ℹ 36 more variables: AMC <sir>, AMP <sir>, TZP <sir>, CZO <sir>, FEP <sir>,</span></span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># CXM <sir>, FOX <sir>, CTX <sir>, CAZ <sir>, CRO <sir>, GEN <sir>,</span></span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># TOB <sir>, AMK <sir>, KAN <sir>, TMP <sir>, SXT <sir>, NIT <sir>,</span></span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># FOS <sir>, LNZ <sir>, CIP <sir>, MFX <sir>, VAN <sir>, TEC <sir>,</span></span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># TCY <sir>, TGC <sir>, DOX <sir>, ERY <sir>, CLI <sir>, AZM <sir>,</span></span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># IPM <sir>, MEM <sir>, MTR <sir>, CHL <sir>, COL <sir>, MUP <sir>, …</span></span></span>
|
||
<span></span>
|
||
<span><span class="co"># Select relevant columns for prediction</span></span>
|
||
<span><span class="va">data</span> <span class="op"><-</span> <span class="va">example_isolates</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="co"># select AB results dynamically</span></span>
|
||
<span> <span class="fu"><a href="https://dplyr.tidyverse.org/reference/select.html" class="external-link">select</a></span><span class="op">(</span><span class="va">mo</span>, <span class="fu"><a href="../reference/antimicrobial_selectors.html">aminoglycosides</a></span><span class="op">(</span><span class="op">)</span>, <span class="fu"><a href="../reference/antimicrobial_selectors.html">betalactams</a></span><span class="op">(</span><span class="op">)</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="co"># replace NAs with NI (not-interpretable)</span></span>
|
||
<span> <span class="fu"><a href="https://dplyr.tidyverse.org/reference/mutate.html" class="external-link">mutate</a></span><span class="op">(</span><span class="fu"><a href="https://dplyr.tidyverse.org/reference/across.html" class="external-link">across</a></span><span class="op">(</span><span class="fu"><a href="https://tidyselect.r-lib.org/reference/where.html" class="external-link">where</a></span><span class="op">(</span><span class="va">is.sir</span><span class="op">)</span>,</span>
|
||
<span> <span class="op">~</span><span class="fu">replace_na</span><span class="op">(</span><span class="va">.x</span>, <span class="st">"NI"</span><span class="op">)</span><span class="op">)</span>,</span>
|
||
<span> <span class="co"># make factors of SIR columns</span></span>
|
||
<span> <span class="fu"><a href="https://dplyr.tidyverse.org/reference/across.html" class="external-link">across</a></span><span class="op">(</span><span class="fu"><a href="https://tidyselect.r-lib.org/reference/where.html" class="external-link">where</a></span><span class="op">(</span><span class="va">is.sir</span><span class="op">)</span>,</span>
|
||
<span> <span class="va">as.integer</span><span class="op">)</span>,</span>
|
||
<span> <span class="co"># get Gramstain of microorganisms</span></span>
|
||
<span> mo <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/factor.html" class="external-link">as.factor</a></span><span class="op">(</span><span class="fu"><a href="../reference/mo_property.html">mo_gramstain</a></span><span class="op">(</span><span class="va">mo</span><span class="op">)</span><span class="op">)</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="co"># drop NAs - the ones without a Gramstain (fungi, etc.)</span></span>
|
||
<span> <span class="fu">drop_na</span><span class="op">(</span><span class="op">)</span></span>
|
||
<span><span class="co">#> <span style="color: #0000BB;">ℹ For </span><span style="color: #0000BB; background-color: #EEEEEE;">aminoglycosides()</span><span style="color: #0000BB;"> using columns '</span><span style="color: #0000BB; font-weight: bold;">GEN</span><span style="color: #0000BB;">' (gentamicin), '</span><span style="color: #0000BB; font-weight: bold;">TOB</span><span style="color: #0000BB;">'</span></span></span>
|
||
<span><span class="co"><span style="color: #0000BB;">#> (tobramycin), '</span><span style="color: #0000BB; font-weight: bold;">AMK</span><span style="color: #0000BB;">' (amikacin), and '</span><span style="color: #0000BB; font-weight: bold;">KAN</span><span style="color: #0000BB;">' (kanamycin)</span></span></span>
|
||
<span><span class="co">#> <span style="color: #0000BB;">ℹ For </span><span style="color: #0000BB; background-color: #EEEEEE;">betalactams()</span><span style="color: #0000BB;"> using columns '</span><span style="color: #0000BB; font-weight: bold;">PEN</span><span style="color: #0000BB;">' (benzylpenicillin), '</span><span style="color: #0000BB; font-weight: bold;">OXA</span><span style="color: #0000BB;">'</span></span></span>
|
||
<span><span class="co"><span style="color: #0000BB;">#> (oxacillin), '</span><span style="color: #0000BB; font-weight: bold;">FLC</span><span style="color: #0000BB;">' (flucloxacillin), '</span><span style="color: #0000BB; font-weight: bold;">AMX</span><span style="color: #0000BB;">' (amoxicillin), '</span><span style="color: #0000BB; font-weight: bold;">AMC</span><span style="color: #0000BB;">'</span></span></span>
|
||
<span><span class="co"><span style="color: #0000BB;">#> (amoxicillin/clavulanic acid), '</span><span style="color: #0000BB; font-weight: bold;">AMP</span><span style="color: #0000BB;">' (ampicillin), '</span><span style="color: #0000BB; font-weight: bold;">TZP</span><span style="color: #0000BB;">'</span></span></span>
|
||
<span><span class="co"><span style="color: #0000BB;">#> (piperacillin/tazobactam), '</span><span style="color: #0000BB; font-weight: bold;">CZO</span><span style="color: #0000BB;">' (cefazolin), '</span><span style="color: #0000BB; font-weight: bold;">FEP</span><span style="color: #0000BB;">' (cefepime), '</span><span style="color: #0000BB; font-weight: bold;">CXM</span><span style="color: #0000BB;">'</span></span></span>
|
||
<span><span class="co"><span style="color: #0000BB;">#> (cefuroxime), '</span><span style="color: #0000BB; font-weight: bold;">FOX</span><span style="color: #0000BB;">' (cefoxitin), '</span><span style="color: #0000BB; font-weight: bold;">CTX</span><span style="color: #0000BB;">' (cefotaxime), '</span><span style="color: #0000BB; font-weight: bold;">CAZ</span><span style="color: #0000BB;">' (ceftazidime),</span></span></span>
|
||
<span><span class="co"><span style="color: #0000BB;">#> '</span><span style="color: #0000BB; font-weight: bold;">CRO</span><span style="color: #0000BB;">' (ceftriaxone), '</span><span style="color: #0000BB; font-weight: bold;">IPM</span><span style="color: #0000BB;">' (imipenem), and '</span><span style="color: #0000BB; font-weight: bold;">MEM</span><span style="color: #0000BB;">' (meropenem)</span></span></span></code></pre></div>
|
||
<p><strong>Explanation:</strong></p>
|
||
<ul>
|
||
<li>
|
||
<code><a href="../reference/antimicrobial_selectors.html">aminoglycosides()</a></code> and <code><a href="../reference/antimicrobial_selectors.html">betalactams()</a></code>
|
||
dynamically select columns for antimicrobials in these classes.</li>
|
||
<li>
|
||
<code>drop_na()</code> ensures the model receives complete cases for
|
||
training.</li>
|
||
</ul>
|
||
</div>
|
||
<div class="section level3">
|
||
<h3 id="defining-the-workflow">
|
||
<strong>Defining the Workflow</strong><a class="anchor" aria-label="anchor" href="#defining-the-workflow"></a>
|
||
</h3>
|
||
<p>We now define the <code>tidymodels</code> workflow, which consists of
|
||
three steps: preprocessing, model specification, and fitting.</p>
|
||
<div class="section level4">
|
||
<h4 id="preprocessing-with-a-recipe">1. Preprocessing with a Recipe<a class="anchor" aria-label="anchor" href="#preprocessing-with-a-recipe"></a>
|
||
</h4>
|
||
<p>We create a recipe to preprocess the data for modelling.</p>
|
||
<div class="sourceCode" id="cb3"><pre class="downlit sourceCode r">
|
||
<code class="sourceCode R"><span><span class="co"># Define the recipe for data preprocessing</span></span>
|
||
<span><span class="va">resistance_recipe</span> <span class="op"><-</span> <span class="fu">recipe</span><span class="op">(</span><span class="va">mo</span> <span class="op">~</span> <span class="va">.</span>, data <span class="op">=</span> <span class="va">data</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu">step_corr</span><span class="op">(</span><span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="fu"><a href="../reference/antimicrobial_selectors.html">aminoglycosides</a></span><span class="op">(</span><span class="op">)</span>, <span class="fu"><a href="../reference/antimicrobial_selectors.html">betalactams</a></span><span class="op">(</span><span class="op">)</span><span class="op">)</span>, threshold <span class="op">=</span> <span class="fl">0.9</span><span class="op">)</span></span>
|
||
<span><span class="va">resistance_recipe</span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> <span style="color: #00BBBB;">──</span> <span style="font-weight: bold;">Recipe</span> <span style="color: #00BBBB;">──────────────────────────────────────────────────────────────────────</span></span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> ── Inputs</span></span>
|
||
<span><span class="co">#> Number of variables by role</span></span>
|
||
<span><span class="co">#> outcome: 1</span></span>
|
||
<span><span class="co">#> predictor: 20</span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> ── Operations</span></span>
|
||
<span><span class="co">#> <span style="color: #00BBBB;">•</span> Correlation filter on: <span style="color: #0000BB;">c(aminoglycosides(), betalactams())</span></span></span></code></pre></div>
|
||
<p>For a recipe that includes at least one preprocessing operation, like
|
||
we have with <code>step_corr()</code>, the necessary parameters can be
|
||
estimated from a training set using <code>prep()</code>:</p>
|
||
<div class="sourceCode" id="cb4"><pre class="downlit sourceCode r">
|
||
<code class="sourceCode R"><span><span class="fu">prep</span><span class="op">(</span><span class="va">resistance_recipe</span><span class="op">)</span></span>
|
||
<span><span class="co">#> <span style="color: #0000BB;">ℹ For </span><span style="color: #0000BB; background-color: #EEEEEE;">aminoglycosides()</span><span style="color: #0000BB;"> using columns '</span><span style="color: #0000BB; font-weight: bold;">GEN</span><span style="color: #0000BB;">' (gentamicin), '</span><span style="color: #0000BB; font-weight: bold;">TOB</span><span style="color: #0000BB;">'</span></span></span>
|
||
<span><span class="co"><span style="color: #0000BB;">#> (tobramycin), '</span><span style="color: #0000BB; font-weight: bold;">AMK</span><span style="color: #0000BB;">' (amikacin), and '</span><span style="color: #0000BB; font-weight: bold;">KAN</span><span style="color: #0000BB;">' (kanamycin)</span></span></span>
|
||
<span><span class="co">#> <span style="color: #0000BB;">ℹ For </span><span style="color: #0000BB; background-color: #EEEEEE;">betalactams()</span><span style="color: #0000BB;"> using columns '</span><span style="color: #0000BB; font-weight: bold;">PEN</span><span style="color: #0000BB;">' (benzylpenicillin), '</span><span style="color: #0000BB; font-weight: bold;">OXA</span><span style="color: #0000BB;">'</span></span></span>
|
||
<span><span class="co"><span style="color: #0000BB;">#> (oxacillin), '</span><span style="color: #0000BB; font-weight: bold;">FLC</span><span style="color: #0000BB;">' (flucloxacillin), '</span><span style="color: #0000BB; font-weight: bold;">AMX</span><span style="color: #0000BB;">' (amoxicillin), '</span><span style="color: #0000BB; font-weight: bold;">AMC</span><span style="color: #0000BB;">'</span></span></span>
|
||
<span><span class="co"><span style="color: #0000BB;">#> (amoxicillin/clavulanic acid), '</span><span style="color: #0000BB; font-weight: bold;">AMP</span><span style="color: #0000BB;">' (ampicillin), '</span><span style="color: #0000BB; font-weight: bold;">TZP</span><span style="color: #0000BB;">'</span></span></span>
|
||
<span><span class="co"><span style="color: #0000BB;">#> (piperacillin/tazobactam), '</span><span style="color: #0000BB; font-weight: bold;">CZO</span><span style="color: #0000BB;">' (cefazolin), '</span><span style="color: #0000BB; font-weight: bold;">FEP</span><span style="color: #0000BB;">' (cefepime), '</span><span style="color: #0000BB; font-weight: bold;">CXM</span><span style="color: #0000BB;">'</span></span></span>
|
||
<span><span class="co"><span style="color: #0000BB;">#> (cefuroxime), '</span><span style="color: #0000BB; font-weight: bold;">FOX</span><span style="color: #0000BB;">' (cefoxitin), '</span><span style="color: #0000BB; font-weight: bold;">CTX</span><span style="color: #0000BB;">' (cefotaxime), '</span><span style="color: #0000BB; font-weight: bold;">CAZ</span><span style="color: #0000BB;">' (ceftazidime),</span></span></span>
|
||
<span><span class="co"><span style="color: #0000BB;">#> '</span><span style="color: #0000BB; font-weight: bold;">CRO</span><span style="color: #0000BB;">' (ceftriaxone), '</span><span style="color: #0000BB; font-weight: bold;">IPM</span><span style="color: #0000BB;">' (imipenem), and '</span><span style="color: #0000BB; font-weight: bold;">MEM</span><span style="color: #0000BB;">' (meropenem)</span></span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> <span style="color: #00BBBB;">──</span> <span style="font-weight: bold;">Recipe</span> <span style="color: #00BBBB;">──────────────────────────────────────────────────────────────────────</span></span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> ── Inputs</span></span>
|
||
<span><span class="co">#> Number of variables by role</span></span>
|
||
<span><span class="co">#> outcome: 1</span></span>
|
||
<span><span class="co">#> predictor: 20</span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> ── Training information</span></span>
|
||
<span><span class="co">#> Training data contained 1968 data points and no incomplete rows.</span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> ── Operations</span></span>
|
||
<span><span class="co">#> <span style="color: #00BBBB;">•</span> Correlation filter on: <span style="color: #0000BB;">AMX</span> <span style="color: #0000BB;">CTX</span> | <span style="font-style: italic;">Trained</span></span></span></code></pre></div>
|
||
<p><strong>Explanation:</strong></p>
|
||
<ul>
|
||
<li>
|
||
<code>recipe(mo ~ ., data = data)</code> will take the
|
||
<code>mo</code> column as outcome and all other columns as
|
||
predictors.</li>
|
||
<li>
|
||
<code>step_corr()</code> removes predictors (i.e., antibiotic
|
||
columns) that have a higher correlation than 90%.</li>
|
||
</ul>
|
||
<p>Notice how the recipe contains just the antimicrobial selector
|
||
functions - no need to define the columns specifically. In the
|
||
preparation (retrieved with <code>prep()</code>) we can see that the
|
||
columns or variables ‘AMX’ and ‘CTX’ were removed as they correlate too
|
||
much with existing, other variables.</p>
|
||
</div>
|
||
<div class="section level4">
|
||
<h4 id="specifying-the-model">2. Specifying the Model<a class="anchor" aria-label="anchor" href="#specifying-the-model"></a>
|
||
</h4>
|
||
<p>We define a logistic regression model since resistance prediction is
|
||
a binary classification task.</p>
|
||
<div class="sourceCode" id="cb5"><pre class="downlit sourceCode r">
|
||
<code class="sourceCode R"><span><span class="co"># Specify a logistic regression model</span></span>
|
||
<span><span class="va">logistic_model</span> <span class="op"><-</span> <span class="fu">logistic_reg</span><span class="op">(</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu">set_engine</span><span class="op">(</span><span class="st">"glm"</span><span class="op">)</span> <span class="co"># Use the Generalised Linear Model engine</span></span>
|
||
<span><span class="va">logistic_model</span></span>
|
||
<span><span class="co">#> Logistic Regression Model Specification (classification)</span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> Computational engine: glm</span></span></code></pre></div>
|
||
<p><strong>Explanation:</strong></p>
|
||
<ul>
|
||
<li>
|
||
<code>logistic_reg()</code> sets up a logistic regression
|
||
model.</li>
|
||
<li>
|
||
<code>set_engine("glm")</code> specifies the use of R’s built-in GLM
|
||
engine.</li>
|
||
</ul>
|
||
</div>
|
||
<div class="section level4">
|
||
<h4 id="building-the-workflow">3. Building the Workflow<a class="anchor" aria-label="anchor" href="#building-the-workflow"></a>
|
||
</h4>
|
||
<p>We bundle the recipe and model together into a <code>workflow</code>,
|
||
which organises the entire modeling process.</p>
|
||
<div class="sourceCode" id="cb6"><pre class="downlit sourceCode r">
|
||
<code class="sourceCode R"><span><span class="co"># Combine the recipe and model into a workflow</span></span>
|
||
<span><span class="va">resistance_workflow</span> <span class="op"><-</span> <span class="fu">workflow</span><span class="op">(</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu">add_recipe</span><span class="op">(</span><span class="va">resistance_recipe</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span> <span class="co"># Add the preprocessing recipe</span></span>
|
||
<span> <span class="fu">add_model</span><span class="op">(</span><span class="va">logistic_model</span><span class="op">)</span> <span class="co"># Add the logistic regression model</span></span>
|
||
<span><span class="va">resistance_workflow</span></span>
|
||
<span><span class="co">#> ══ Workflow ════════════════════════════════════════════════════════════════════</span></span>
|
||
<span><span class="co">#> <span style="font-style: italic;">Preprocessor:</span> Recipe</span></span>
|
||
<span><span class="co">#> <span style="font-style: italic;">Model:</span> logistic_reg()</span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> ── Preprocessor ────────────────────────────────────────────────────────────────</span></span>
|
||
<span><span class="co">#> 1 Recipe Step</span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> • step_corr()</span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> ── Model ───────────────────────────────────────────────────────────────────────</span></span>
|
||
<span><span class="co">#> Logistic Regression Model Specification (classification)</span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> Computational engine: glm</span></span></code></pre></div>
|
||
</div>
|
||
</div>
|
||
<div class="section level3">
|
||
<h3 id="training-and-evaluating-the-model">
|
||
<strong>Training and Evaluating the Model</strong><a class="anchor" aria-label="anchor" href="#training-and-evaluating-the-model"></a>
|
||
</h3>
|
||
<p>To train the model, we split the data into training and testing sets.
|
||
Then, we fit the workflow on the training set and evaluate its
|
||
performance.</p>
|
||
<div class="sourceCode" id="cb7"><pre class="downlit sourceCode r">
|
||
<code class="sourceCode R"><span><span class="co"># Split data into training and testing sets</span></span>
|
||
<span><span class="fu"><a href="https://rdrr.io/r/base/Random.html" class="external-link">set.seed</a></span><span class="op">(</span><span class="fl">123</span><span class="op">)</span> <span class="co"># For reproducibility</span></span>
|
||
<span><span class="va">data_split</span> <span class="op"><-</span> <span class="fu">initial_split</span><span class="op">(</span><span class="va">data</span>, prop <span class="op">=</span> <span class="fl">0.8</span><span class="op">)</span> <span class="co"># 80% training, 20% testing</span></span>
|
||
<span><span class="va">training_data</span> <span class="op"><-</span> <span class="fu">training</span><span class="op">(</span><span class="va">data_split</span><span class="op">)</span> <span class="co"># Training set</span></span>
|
||
<span><span class="va">testing_data</span> <span class="op"><-</span> <span class="fu">testing</span><span class="op">(</span><span class="va">data_split</span><span class="op">)</span> <span class="co"># Testing set</span></span>
|
||
<span></span>
|
||
<span><span class="co"># Fit the workflow to the training data</span></span>
|
||
<span><span class="va">fitted_workflow</span> <span class="op"><-</span> <span class="va">resistance_workflow</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu">fit</span><span class="op">(</span><span class="va">training_data</span><span class="op">)</span> <span class="co"># Train the model</span></span></code></pre></div>
|
||
<p><strong>Explanation:</strong></p>
|
||
<ul>
|
||
<li>
|
||
<code>initial_split()</code> splits the data into training and
|
||
testing sets.</li>
|
||
<li>
|
||
<code>fit()</code> trains the workflow on the training set.</li>
|
||
</ul>
|
||
<p>Notice how in <code>fit()</code>, the antimicrobial selector
|
||
functions are internally called again. For training, these functions are
|
||
called since they are stored in the recipe.</p>
|
||
<p>Next, we evaluate the model on the testing data.</p>
|
||
<div class="sourceCode" id="cb8"><pre class="downlit sourceCode r">
|
||
<code class="sourceCode R"><span><span class="co"># Make predictions on the testing set</span></span>
|
||
<span><span class="va">predictions</span> <span class="op"><-</span> <span class="va">fitted_workflow</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu"><a href="https://rdrr.io/r/stats/predict.html" class="external-link">predict</a></span><span class="op">(</span><span class="va">testing_data</span><span class="op">)</span> <span class="co"># Generate predictions</span></span>
|
||
<span><span class="va">probabilities</span> <span class="op"><-</span> <span class="va">fitted_workflow</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu"><a href="https://rdrr.io/r/stats/predict.html" class="external-link">predict</a></span><span class="op">(</span><span class="va">testing_data</span>, type <span class="op">=</span> <span class="st">"prob"</span><span class="op">)</span> <span class="co"># Generate probabilities</span></span>
|
||
<span></span>
|
||
<span><span class="va">predictions</span> <span class="op"><-</span> <span class="va">predictions</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu"><a href="https://dplyr.tidyverse.org/reference/bind_cols.html" class="external-link">bind_cols</a></span><span class="op">(</span><span class="va">probabilities</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu"><a href="https://dplyr.tidyverse.org/reference/bind_cols.html" class="external-link">bind_cols</a></span><span class="op">(</span><span class="va">testing_data</span><span class="op">)</span> <span class="co"># Combine with true labels</span></span>
|
||
<span></span>
|
||
<span><span class="va">predictions</span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># A tibble: 394 × 24</span></span></span>
|
||
<span><span class="co">#> .pred_class `.pred_Gram-negative` `.pred_Gram-positive` mo GEN TOB</span></span>
|
||
<span><span class="co">#> <span style="color: #949494; font-style: italic;"><fct></span> <span style="color: #949494; font-style: italic;"><dbl></span> <span style="color: #949494; font-style: italic;"><dbl></span> <span style="color: #949494; font-style: italic;"><fct></span> <span style="color: #949494; font-style: italic;"><int></span> <span style="color: #949494; font-style: italic;"><int></span></span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 1</span> Gram-positive 1.07<span style="color: #949494;">e</span><span style="color: #BB0000;">- 1</span> 8.93<span style="color: #949494;">e</span><span style="color: #BB0000;">- 1</span> Gram-p… 5 5</span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 2</span> Gram-positive 3.17<span style="color: #949494;">e</span><span style="color: #BB0000;">- 8</span> 1.00<span style="color: #949494;">e</span>+ 0 Gram-p… 5 1</span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 3</span> Gram-negative 9.99<span style="color: #949494;">e</span><span style="color: #BB0000;">- 1</span> 1.42<span style="color: #949494;">e</span><span style="color: #BB0000;">- 3</span> Gram-n… 5 5</span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 4</span> Gram-positive 2.22<span style="color: #949494;">e</span><span style="color: #BB0000;">-16</span> 1 <span style="color: #949494;">e</span>+ 0 Gram-p… 5 5</span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 5</span> Gram-negative 9.46<span style="color: #949494;">e</span><span style="color: #BB0000;">- 1</span> 5.42<span style="color: #949494;">e</span><span style="color: #BB0000;">- 2</span> Gram-n… 5 5</span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 6</span> Gram-positive 1.07<span style="color: #949494;">e</span><span style="color: #BB0000;">- 1</span> 8.93<span style="color: #949494;">e</span><span style="color: #BB0000;">- 1</span> Gram-p… 5 5</span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 7</span> Gram-positive 2.22<span style="color: #949494;">e</span><span style="color: #BB0000;">-16</span> 1 <span style="color: #949494;">e</span>+ 0 Gram-p… 1 5</span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 8</span> Gram-positive 2.22<span style="color: #949494;">e</span><span style="color: #BB0000;">-16</span> 1 <span style="color: #949494;">e</span>+ 0 Gram-p… 4 4</span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 9</span> Gram-negative 1 <span style="color: #949494;">e</span>+ 0 2.22<span style="color: #949494;">e</span><span style="color: #BB0000;">-16</span> Gram-n… 1 1</span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;">10</span> Gram-positive 6.05<span style="color: #949494;">e</span><span style="color: #BB0000;">-11</span> 1.00<span style="color: #949494;">e</span>+ 0 Gram-p… 4 4</span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># ℹ 384 more rows</span></span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># ℹ 18 more variables: AMK <int>, KAN <int>, PEN <int>, OXA <int>, FLC <int>,</span></span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># AMX <int>, AMC <int>, AMP <int>, TZP <int>, CZO <int>, FEP <int>,</span></span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># CXM <int>, FOX <int>, CTX <int>, CAZ <int>, CRO <int>, IPM <int>, MEM <int></span></span></span>
|
||
<span></span>
|
||
<span><span class="co"># Evaluate model performance</span></span>
|
||
<span><span class="va">metrics</span> <span class="op"><-</span> <span class="va">predictions</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu">metrics</span><span class="op">(</span>truth <span class="op">=</span> <span class="va">mo</span>, estimate <span class="op">=</span> <span class="va">.pred_class</span><span class="op">)</span> <span class="co"># Calculate performance metrics</span></span>
|
||
<span></span>
|
||
<span><span class="va">metrics</span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># A tibble: 2 × 3</span></span></span>
|
||
<span><span class="co">#> .metric .estimator .estimate</span></span>
|
||
<span><span class="co">#> <span style="color: #949494; font-style: italic;"><chr></span> <span style="color: #949494; font-style: italic;"><chr></span> <span style="color: #949494; font-style: italic;"><dbl></span></span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;">1</span> accuracy binary 0.995</span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;">2</span> kap binary 0.989</span></span>
|
||
<span></span>
|
||
<span></span>
|
||
<span><span class="co"># To assess some other model properties, you can make our own `metrics()` function</span></span>
|
||
<span><span class="va">our_metrics</span> <span class="op"><-</span> <span class="fu">metric_set</span><span class="op">(</span><span class="va">accuracy</span>, <span class="va">kap</span>, <span class="va">ppv</span>, <span class="va">npv</span><span class="op">)</span> <span class="co"># add Positive Predictive Value and Negative Predictive Value</span></span>
|
||
<span><span class="va">metrics2</span> <span class="op"><-</span> <span class="va">predictions</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu">our_metrics</span><span class="op">(</span>truth <span class="op">=</span> <span class="va">mo</span>, estimate <span class="op">=</span> <span class="va">.pred_class</span><span class="op">)</span> <span class="co"># run again on our `our_metrics()` function</span></span>
|
||
<span></span>
|
||
<span><span class="va">metrics2</span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># A tibble: 4 × 3</span></span></span>
|
||
<span><span class="co">#> .metric .estimator .estimate</span></span>
|
||
<span><span class="co">#> <span style="color: #949494; font-style: italic;"><chr></span> <span style="color: #949494; font-style: italic;"><chr></span> <span style="color: #949494; font-style: italic;"><dbl></span></span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;">1</span> accuracy binary 0.995</span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;">2</span> kap binary 0.989</span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;">3</span> ppv binary 0.987</span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;">4</span> npv binary 1</span></span></code></pre></div>
|
||
<p><strong>Explanation:</strong></p>
|
||
<ul>
|
||
<li>
|
||
<code><a href="https://rdrr.io/r/stats/predict.html" class="external-link">predict()</a></code> generates predictions on the testing
|
||
set.</li>
|
||
<li>
|
||
<code>metrics()</code> computes evaluation metrics like accuracy and
|
||
kappa.</li>
|
||
</ul>
|
||
<p>It appears we can predict the Gram stain with a 99.5% accuracy based
|
||
on AMR results of only aminoglycosides and beta-lactam antibiotics. The
|
||
ROC curve looks like this:</p>
|
||
<div class="sourceCode" id="cb9"><pre class="downlit sourceCode r">
|
||
<code class="sourceCode R"><span><span class="va">predictions</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu">roc_curve</span><span class="op">(</span><span class="va">mo</span>, <span class="va">`.pred_Gram-negative`</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu"><a href="https://ggplot2.tidyverse.org/reference/autoplot.html" class="external-link">autoplot</a></span><span class="op">(</span><span class="op">)</span></span></code></pre></div>
|
||
<p><img src="AMR_with_tidymodels_files/figure-html/unnamed-chunk-8-1.png" width="720"></p>
|
||
</div>
|
||
<div class="section level3">
|
||
<h3 id="conclusion">
|
||
<strong>Conclusion</strong><a class="anchor" aria-label="anchor" href="#conclusion"></a>
|
||
</h3>
|
||
<p>In this post, we demonstrated how to build a machine learning
|
||
pipeline with the <code>tidymodels</code> framework and the
|
||
<code>AMR</code> package. By combining selector functions like
|
||
<code><a href="../reference/antimicrobial_selectors.html">aminoglycosides()</a></code> and <code><a href="../reference/antimicrobial_selectors.html">betalactams()</a></code> with
|
||
<code>tidymodels</code>, we efficiently prepared data, trained a model,
|
||
and evaluated its performance.</p>
|
||
<p>This workflow is extensible to other antimicrobial classes and
|
||
resistance patterns, empowering users to analyse AMR data systematically
|
||
and reproducibly.</p>
|
||
<hr>
|
||
</div>
|
||
</div>
|
||
<div class="section level2">
|
||
<h2 id="example-2-predicting-amr-over-time">Example 2: Predicting AMR Over Time<a class="anchor" aria-label="anchor" href="#example-2-predicting-amr-over-time"></a>
|
||
</h2>
|
||
<p>In this second example, we aim to predict antimicrobial resistance
|
||
(AMR) trends over time using <code>tidymodels</code>. We will model
|
||
resistance to three antibiotics (amoxicillin <code>AMX</code>,
|
||
amoxicillin-clavulanic acid <code>AMC</code>, and ciprofloxacin
|
||
<code>CIP</code>), based on historical data grouped by year and hospital
|
||
ward.</p>
|
||
<div class="section level3">
|
||
<h3 id="objective-1">
|
||
<strong>Objective</strong><a class="anchor" aria-label="anchor" href="#objective-1"></a>
|
||
</h3>
|
||
<p>Our goal is to:</p>
|
||
<ol style="list-style-type: decimal">
|
||
<li>Prepare the dataset by aggregating resistance data over time.</li>
|
||
<li>Define a regression model to predict AMR trends.</li>
|
||
<li>Use <code>tidymodels</code> to preprocess, train, and evaluate the
|
||
model.</li>
|
||
</ol>
|
||
</div>
|
||
<div class="section level3">
|
||
<h3 id="data-preparation-1">
|
||
<strong>Data Preparation</strong><a class="anchor" aria-label="anchor" href="#data-preparation-1"></a>
|
||
</h3>
|
||
<p>We start by transforming the <code>example_isolates</code> dataset
|
||
into a structured time-series format.</p>
|
||
<div class="sourceCode" id="cb10"><pre class="downlit sourceCode r">
|
||
<code class="sourceCode R"><span><span class="co"># Load required libraries</span></span>
|
||
<span><span class="kw"><a href="https://rdrr.io/r/base/library.html" class="external-link">library</a></span><span class="op">(</span><span class="va"><a href="https://www.amr-for-r.org/" class="external-link">AMR</a></span><span class="op">)</span></span>
|
||
<span><span class="kw"><a href="https://rdrr.io/r/base/library.html" class="external-link">library</a></span><span class="op">(</span><span class="va"><a href="https://tidymodels.tidymodels.org" class="external-link">tidymodels</a></span><span class="op">)</span></span>
|
||
<span></span>
|
||
<span><span class="co"># Transform dataset</span></span>
|
||
<span><span class="va">data_time</span> <span class="op"><-</span> <span class="va">example_isolates</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu"><a href="../reference/top_n_microorganisms.html">top_n_microorganisms</a></span><span class="op">(</span>n <span class="op">=</span> <span class="fl">10</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span> <span class="co"># Filter on the top #10 species</span></span>
|
||
<span> <span class="fu"><a href="https://dplyr.tidyverse.org/reference/mutate.html" class="external-link">mutate</a></span><span class="op">(</span>year <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/integer.html" class="external-link">as.integer</a></span><span class="op">(</span><span class="fu"><a href="https://rdrr.io/r/base/format.html" class="external-link">format</a></span><span class="op">(</span><span class="va">date</span>, <span class="st">"%Y"</span><span class="op">)</span><span class="op">)</span>, <span class="co"># Extract year from date</span></span>
|
||
<span> gramstain <span class="op">=</span> <span class="fu"><a href="../reference/mo_property.html">mo_gramstain</a></span><span class="op">(</span><span class="va">mo</span><span class="op">)</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span> <span class="co"># Get taxonomic names</span></span>
|
||
<span> <span class="fu"><a href="https://dplyr.tidyverse.org/reference/group_by.html" class="external-link">group_by</a></span><span class="op">(</span><span class="va">year</span>, <span class="va">gramstain</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu"><a href="https://dplyr.tidyverse.org/reference/summarise.html" class="external-link">summarise</a></span><span class="op">(</span><span class="fu"><a href="https://dplyr.tidyverse.org/reference/across.html" class="external-link">across</a></span><span class="op">(</span><span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="va">AMX</span>, <span class="va">AMC</span>, <span class="va">CIP</span><span class="op">)</span>, </span>
|
||
<span> <span class="kw">function</span><span class="op">(</span><span class="va">x</span><span class="op">)</span> <span class="fu"><a href="../reference/proportion.html">resistance</a></span><span class="op">(</span><span class="va">x</span>, minimum <span class="op">=</span> <span class="fl">0</span><span class="op">)</span>,</span>
|
||
<span> .names <span class="op">=</span> <span class="st">"res_{.col}"</span><span class="op">)</span>, </span>
|
||
<span> .groups <span class="op">=</span> <span class="st">"drop"</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span> </span>
|
||
<span> <span class="fu"><a href="https://dplyr.tidyverse.org/reference/filter.html" class="external-link">filter</a></span><span class="op">(</span><span class="op">!</span><span class="fu"><a href="https://rdrr.io/r/base/NA.html" class="external-link">is.na</a></span><span class="op">(</span><span class="va">res_AMX</span><span class="op">)</span> <span class="op">&</span> <span class="op">!</span><span class="fu"><a href="https://rdrr.io/r/base/NA.html" class="external-link">is.na</a></span><span class="op">(</span><span class="va">res_AMC</span><span class="op">)</span> <span class="op">&</span> <span class="op">!</span><span class="fu"><a href="https://rdrr.io/r/base/NA.html" class="external-link">is.na</a></span><span class="op">(</span><span class="va">res_CIP</span><span class="op">)</span><span class="op">)</span> <span class="co"># Drop missing values</span></span>
|
||
<span><span class="co">#> <span style="color: #0000BB;">ℹ Using column '</span><span style="color: #0000BB; font-weight: bold;">mo</span><span style="color: #0000BB;">' as input for </span><span style="color: #0000BB; background-color: #EEEEEE;">col_mo</span><span style="color: #0000BB;">.</span></span></span>
|
||
<span></span>
|
||
<span><span class="va">data_time</span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># A tibble: 32 × 5</span></span></span>
|
||
<span><span class="co">#> year gramstain res_AMX res_AMC res_CIP</span></span>
|
||
<span><span class="co">#> <span style="color: #949494; font-style: italic;"><int></span> <span style="color: #949494; font-style: italic;"><chr></span> <span style="color: #949494; font-style: italic;"><dbl></span> <span style="color: #949494; font-style: italic;"><dbl></span> <span style="color: #949494; font-style: italic;"><dbl></span></span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 1</span> <span style="text-decoration: underline;">2</span>002 Gram-negative 1 0.105 0.060<span style="text-decoration: underline;">6</span></span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 2</span> <span style="text-decoration: underline;">2</span>002 Gram-positive 0.838 0.182 0.162 </span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 3</span> <span style="text-decoration: underline;">2</span>003 Gram-negative 1 0.071<span style="text-decoration: underline;">4</span> 0 </span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 4</span> <span style="text-decoration: underline;">2</span>003 Gram-positive 0.714 0.244 0.154 </span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 5</span> <span style="text-decoration: underline;">2</span>004 Gram-negative 0.464 0.093<span style="text-decoration: underline;">8</span> 0 </span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 6</span> <span style="text-decoration: underline;">2</span>004 Gram-positive 0.849 0.299 0.244 </span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 7</span> <span style="text-decoration: underline;">2</span>005 Gram-negative 0.412 0.132 0.058<span style="text-decoration: underline;">8</span></span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 8</span> <span style="text-decoration: underline;">2</span>005 Gram-positive 0.882 0.382 0.154 </span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;"> 9</span> <span style="text-decoration: underline;">2</span>006 Gram-negative 0.379 0 0.1 </span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;">10</span> <span style="text-decoration: underline;">2</span>006 Gram-positive 0.778 0.333 0.353 </span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># ℹ 22 more rows</span></span></span></code></pre></div>
|
||
<p><strong>Explanation:</strong></p>
|
||
<ul>
|
||
<li>
|
||
<code>mo_name(mo)</code>: Converts microbial codes into proper
|
||
species names.</li>
|
||
<li>
|
||
<code><a href="../reference/proportion.html">resistance()</a></code>: Converts AMR results into numeric values
|
||
(proportion of resistant isolates).</li>
|
||
<li>
|
||
<code>group_by(year, ward, species)</code>: Aggregates resistance
|
||
rates by year and ward.</li>
|
||
</ul>
|
||
</div>
|
||
<div class="section level3">
|
||
<h3 id="defining-the-workflow-1">
|
||
<strong>Defining the Workflow</strong><a class="anchor" aria-label="anchor" href="#defining-the-workflow-1"></a>
|
||
</h3>
|
||
<p>We now define the modeling workflow, which consists of a
|
||
preprocessing step, a model specification, and the fitting process.</p>
|
||
<div class="section level4">
|
||
<h4 id="preprocessing-with-a-recipe-1">1. Preprocessing with a Recipe<a class="anchor" aria-label="anchor" href="#preprocessing-with-a-recipe-1"></a>
|
||
</h4>
|
||
<div class="sourceCode" id="cb11"><pre class="downlit sourceCode r">
|
||
<code class="sourceCode R"><span><span class="co"># Define the recipe</span></span>
|
||
<span><span class="va">resistance_recipe_time</span> <span class="op"><-</span> <span class="fu">recipe</span><span class="op">(</span><span class="va">res_AMX</span> <span class="op">~</span> <span class="va">year</span> <span class="op">+</span> <span class="va">gramstain</span>, data <span class="op">=</span> <span class="va">data_time</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu">step_dummy</span><span class="op">(</span><span class="va">gramstain</span>, one_hot <span class="op">=</span> <span class="cn">TRUE</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span> <span class="co"># Convert categorical to numerical</span></span>
|
||
<span> <span class="fu">step_normalize</span><span class="op">(</span><span class="va">year</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span> <span class="co"># Normalise year for better model performance</span></span>
|
||
<span> <span class="fu">step_nzv</span><span class="op">(</span><span class="fu">all_predictors</span><span class="op">(</span><span class="op">)</span><span class="op">)</span> <span class="co"># Remove near-zero variance predictors</span></span>
|
||
<span></span>
|
||
<span><span class="va">resistance_recipe_time</span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> <span style="color: #00BBBB;">──</span> <span style="font-weight: bold;">Recipe</span> <span style="color: #00BBBB;">──────────────────────────────────────────────────────────────────────</span></span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> ── Inputs</span></span>
|
||
<span><span class="co">#> Number of variables by role</span></span>
|
||
<span><span class="co">#> outcome: 1</span></span>
|
||
<span><span class="co">#> predictor: 2</span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> ── Operations</span></span>
|
||
<span><span class="co">#> <span style="color: #00BBBB;">•</span> Dummy variables from: <span style="color: #0000BB;">gramstain</span></span></span>
|
||
<span><span class="co">#> <span style="color: #00BBBB;">•</span> Centering and scaling for: <span style="color: #0000BB;">year</span></span></span>
|
||
<span><span class="co">#> <span style="color: #00BBBB;">•</span> Sparse, unbalanced variable filter on: <span style="color: #0000BB;">all_predictors()</span></span></span></code></pre></div>
|
||
<p><strong>Explanation:</strong></p>
|
||
<ul>
|
||
<li>
|
||
<code>step_dummy()</code>: Encodes categorical variables
|
||
(<code>ward</code>, <code>species</code>) as numerical indicators.</li>
|
||
<li>
|
||
<code>step_normalize()</code>: Normalises the <code>year</code>
|
||
variable.</li>
|
||
<li>
|
||
<code>step_nzv()</code>: Removes near-zero variance predictors.</li>
|
||
</ul>
|
||
</div>
|
||
<div class="section level4">
|
||
<h4 id="specifying-the-model-1">2. Specifying the Model<a class="anchor" aria-label="anchor" href="#specifying-the-model-1"></a>
|
||
</h4>
|
||
<p>We use a linear regression model to predict resistance trends.</p>
|
||
<div class="sourceCode" id="cb12"><pre class="downlit sourceCode r">
|
||
<code class="sourceCode R"><span><span class="co"># Define the linear regression model</span></span>
|
||
<span><span class="va">lm_model</span> <span class="op"><-</span> <span class="fu">linear_reg</span><span class="op">(</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu">set_engine</span><span class="op">(</span><span class="st">"lm"</span><span class="op">)</span> <span class="co"># Use linear regression</span></span>
|
||
<span></span>
|
||
<span><span class="va">lm_model</span></span>
|
||
<span><span class="co">#> Linear Regression Model Specification (regression)</span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> Computational engine: lm</span></span></code></pre></div>
|
||
<p><strong>Explanation:</strong></p>
|
||
<ul>
|
||
<li>
|
||
<code>linear_reg()</code>: Defines a linear regression model.</li>
|
||
<li>
|
||
<code>set_engine("lm")</code>: Uses R’s built-in linear regression
|
||
engine.</li>
|
||
</ul>
|
||
</div>
|
||
<div class="section level4">
|
||
<h4 id="building-the-workflow-1">3. Building the Workflow<a class="anchor" aria-label="anchor" href="#building-the-workflow-1"></a>
|
||
</h4>
|
||
<p>We combine the preprocessing recipe and model into a workflow.</p>
|
||
<div class="sourceCode" id="cb13"><pre class="downlit sourceCode r">
|
||
<code class="sourceCode R"><span><span class="co"># Create workflow</span></span>
|
||
<span><span class="va">resistance_workflow_time</span> <span class="op"><-</span> <span class="fu">workflow</span><span class="op">(</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu">add_recipe</span><span class="op">(</span><span class="va">resistance_recipe_time</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu">add_model</span><span class="op">(</span><span class="va">lm_model</span><span class="op">)</span></span>
|
||
<span></span>
|
||
<span><span class="va">resistance_workflow_time</span></span>
|
||
<span><span class="co">#> ══ Workflow ════════════════════════════════════════════════════════════════════</span></span>
|
||
<span><span class="co">#> <span style="font-style: italic;">Preprocessor:</span> Recipe</span></span>
|
||
<span><span class="co">#> <span style="font-style: italic;">Model:</span> linear_reg()</span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> ── Preprocessor ────────────────────────────────────────────────────────────────</span></span>
|
||
<span><span class="co">#> 3 Recipe Steps</span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> • step_dummy()</span></span>
|
||
<span><span class="co">#> • step_normalize()</span></span>
|
||
<span><span class="co">#> • step_nzv()</span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> ── Model ───────────────────────────────────────────────────────────────────────</span></span>
|
||
<span><span class="co">#> Linear Regression Model Specification (regression)</span></span>
|
||
<span><span class="co">#> </span></span>
|
||
<span><span class="co">#> Computational engine: lm</span></span></code></pre></div>
|
||
</div>
|
||
</div>
|
||
<div class="section level3">
|
||
<h3 id="training-and-evaluating-the-model-1">
|
||
<strong>Training and Evaluating the Model</strong><a class="anchor" aria-label="anchor" href="#training-and-evaluating-the-model-1"></a>
|
||
</h3>
|
||
<p>We split the data into training and testing sets, fit the model, and
|
||
evaluate performance.</p>
|
||
<div class="sourceCode" id="cb14"><pre class="downlit sourceCode r">
|
||
<code class="sourceCode R"><span><span class="co"># Split the data</span></span>
|
||
<span><span class="fu"><a href="https://rdrr.io/r/base/Random.html" class="external-link">set.seed</a></span><span class="op">(</span><span class="fl">123</span><span class="op">)</span></span>
|
||
<span><span class="va">data_split_time</span> <span class="op"><-</span> <span class="fu">initial_split</span><span class="op">(</span><span class="va">data_time</span>, prop <span class="op">=</span> <span class="fl">0.8</span><span class="op">)</span></span>
|
||
<span><span class="va">train_time</span> <span class="op"><-</span> <span class="fu">training</span><span class="op">(</span><span class="va">data_split_time</span><span class="op">)</span></span>
|
||
<span><span class="va">test_time</span> <span class="op"><-</span> <span class="fu">testing</span><span class="op">(</span><span class="va">data_split_time</span><span class="op">)</span></span>
|
||
<span></span>
|
||
<span><span class="co"># Train the model</span></span>
|
||
<span><span class="va">fitted_workflow_time</span> <span class="op"><-</span> <span class="va">resistance_workflow_time</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu">fit</span><span class="op">(</span><span class="va">train_time</span><span class="op">)</span></span>
|
||
<span></span>
|
||
<span><span class="co"># Make predictions</span></span>
|
||
<span><span class="va">predictions_time</span> <span class="op"><-</span> <span class="va">fitted_workflow_time</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu"><a href="https://rdrr.io/r/stats/predict.html" class="external-link">predict</a></span><span class="op">(</span><span class="va">test_time</span><span class="op">)</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu"><a href="https://dplyr.tidyverse.org/reference/bind_cols.html" class="external-link">bind_cols</a></span><span class="op">(</span><span class="va">test_time</span><span class="op">)</span> </span>
|
||
<span></span>
|
||
<span><span class="co"># Evaluate model</span></span>
|
||
<span><span class="va">metrics_time</span> <span class="op"><-</span> <span class="va">predictions_time</span> <span class="op"><a href="https://magrittr.tidyverse.org/reference/pipe.html" class="external-link">%>%</a></span></span>
|
||
<span> <span class="fu">metrics</span><span class="op">(</span>truth <span class="op">=</span> <span class="va">res_AMX</span>, estimate <span class="op">=</span> <span class="va">.pred</span><span class="op">)</span></span>
|
||
<span></span>
|
||
<span><span class="va">metrics_time</span></span>
|
||
<span><span class="co">#> <span style="color: #949494;"># A tibble: 3 × 3</span></span></span>
|
||
<span><span class="co">#> .metric .estimator .estimate</span></span>
|
||
<span><span class="co">#> <span style="color: #949494; font-style: italic;"><chr></span> <span style="color: #949494; font-style: italic;"><chr></span> <span style="color: #949494; font-style: italic;"><dbl></span></span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;">1</span> rmse standard 0.077<span style="text-decoration: underline;">4</span></span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;">2</span> rsq standard 0.711 </span></span>
|
||
<span><span class="co">#> <span style="color: #BCBCBC;">3</span> mae standard 0.070<span style="text-decoration: underline;">4</span></span></span></code></pre></div>
|
||
<p><strong>Explanation:</strong></p>
|
||
<ul>
|
||
<li>
|
||
<code>initial_split()</code>: Splits data into training and testing
|
||
sets.</li>
|
||
<li>
|
||
<code>fit()</code>: Trains the workflow.</li>
|
||
<li>
|
||
<code><a href="https://rdrr.io/r/stats/predict.html" class="external-link">predict()</a></code>: Generates resistance predictions.</li>
|
||
<li>
|
||
<code>metrics()</code>: Evaluates model performance.</li>
|
||
</ul>
|
||
</div>
|
||
<div class="section level3">
|
||
<h3 id="visualising-predictions">
|
||
<strong>Visualising Predictions</strong><a class="anchor" aria-label="anchor" href="#visualising-predictions"></a>
|
||
</h3>
|
||
<p>We plot resistance trends over time for amoxicillin.</p>
|
||
<div class="sourceCode" id="cb15"><pre class="downlit sourceCode r">
|
||
<code class="sourceCode R"><span><span class="kw"><a href="https://rdrr.io/r/base/library.html" class="external-link">library</a></span><span class="op">(</span><span class="va"><a href="https://ggplot2.tidyverse.org" class="external-link">ggplot2</a></span><span class="op">)</span></span>
|
||
<span></span>
|
||
<span><span class="co"># Plot actual vs predicted resistance over time</span></span>
|
||
<span><span class="fu"><a href="https://ggplot2.tidyverse.org/reference/ggplot.html" class="external-link">ggplot</a></span><span class="op">(</span><span class="va">predictions_time</span>, <span class="fu"><a href="https://ggplot2.tidyverse.org/reference/aes.html" class="external-link">aes</a></span><span class="op">(</span>x <span class="op">=</span> <span class="va">year</span><span class="op">)</span><span class="op">)</span> <span class="op">+</span></span>
|
||
<span> <span class="fu"><a href="https://ggplot2.tidyverse.org/reference/geom_point.html" class="external-link">geom_point</a></span><span class="op">(</span><span class="fu"><a href="https://ggplot2.tidyverse.org/reference/aes.html" class="external-link">aes</a></span><span class="op">(</span>y <span class="op">=</span> <span class="va">res_AMX</span>, color <span class="op">=</span> <span class="st">"Actual"</span><span class="op">)</span><span class="op">)</span> <span class="op">+</span></span>
|
||
<span> <span class="fu"><a href="https://ggplot2.tidyverse.org/reference/geom_path.html" class="external-link">geom_line</a></span><span class="op">(</span><span class="fu"><a href="https://ggplot2.tidyverse.org/reference/aes.html" class="external-link">aes</a></span><span class="op">(</span>y <span class="op">=</span> <span class="va">.pred</span>, color <span class="op">=</span> <span class="st">"Predicted"</span><span class="op">)</span><span class="op">)</span> <span class="op">+</span></span>
|
||
<span> <span class="fu"><a href="https://ggplot2.tidyverse.org/reference/labs.html" class="external-link">labs</a></span><span class="op">(</span>title <span class="op">=</span> <span class="st">"Predicted vs Actual AMX Resistance Over Time"</span>,</span>
|
||
<span> x <span class="op">=</span> <span class="st">"Year"</span>,</span>
|
||
<span> y <span class="op">=</span> <span class="st">"Resistance Proportion"</span><span class="op">)</span> <span class="op">+</span></span>
|
||
<span> <span class="fu"><a href="https://ggplot2.tidyverse.org/reference/ggtheme.html" class="external-link">theme_minimal</a></span><span class="op">(</span><span class="op">)</span></span></code></pre></div>
|
||
<p><img src="AMR_with_tidymodels_files/figure-html/unnamed-chunk-14-1.png" width="720"></p>
|
||
<p>Additionally, we can visualise resistance trends in
|
||
<code>ggplot2</code> and directly add linear models there:</p>
|
||
<div class="sourceCode" id="cb16"><pre class="downlit sourceCode r">
|
||
<code class="sourceCode R"><span><span class="fu"><a href="https://ggplot2.tidyverse.org/reference/ggplot.html" class="external-link">ggplot</a></span><span class="op">(</span><span class="va">data_time</span>, <span class="fu"><a href="https://ggplot2.tidyverse.org/reference/aes.html" class="external-link">aes</a></span><span class="op">(</span>x <span class="op">=</span> <span class="va">year</span>, y <span class="op">=</span> <span class="va">res_AMX</span>, color <span class="op">=</span> <span class="va">gramstain</span><span class="op">)</span><span class="op">)</span> <span class="op">+</span></span>
|
||
<span> <span class="fu"><a href="https://ggplot2.tidyverse.org/reference/geom_path.html" class="external-link">geom_line</a></span><span class="op">(</span><span class="op">)</span> <span class="op">+</span></span>
|
||
<span> <span class="fu"><a href="https://ggplot2.tidyverse.org/reference/labs.html" class="external-link">labs</a></span><span class="op">(</span>title <span class="op">=</span> <span class="st">"AMX Resistance Trends"</span>,</span>
|
||
<span> x <span class="op">=</span> <span class="st">"Year"</span>,</span>
|
||
<span> y <span class="op">=</span> <span class="st">"Resistance Proportion"</span><span class="op">)</span> <span class="op">+</span></span>
|
||
<span> <span class="co"># add a linear model directly in ggplot2:</span></span>
|
||
<span> <span class="fu"><a href="https://ggplot2.tidyverse.org/reference/geom_smooth.html" class="external-link">geom_smooth</a></span><span class="op">(</span>method <span class="op">=</span> <span class="st">"lm"</span>,</span>
|
||
<span> formula <span class="op">=</span> <span class="va">y</span> <span class="op">~</span> <span class="va">x</span>,</span>
|
||
<span> alpha <span class="op">=</span> <span class="fl">0.25</span><span class="op">)</span> <span class="op">+</span></span>
|
||
<span> <span class="fu"><a href="https://ggplot2.tidyverse.org/reference/ggtheme.html" class="external-link">theme_minimal</a></span><span class="op">(</span><span class="op">)</span></span></code></pre></div>
|
||
<p><img src="AMR_with_tidymodels_files/figure-html/unnamed-chunk-15-1.png" width="720"></p>
|
||
</div>
|
||
<div class="section level3">
|
||
<h3 id="conclusion-1">
|
||
<strong>Conclusion</strong><a class="anchor" aria-label="anchor" href="#conclusion-1"></a>
|
||
</h3>
|
||
<p>In this example, we demonstrated how to analyze AMR trends over time
|
||
using <code>tidymodels</code>. By aggregating resistance rates by year
|
||
and hospital ward, we built a predictive model to track changes in
|
||
resistance to amoxicillin (<code>AMX</code>), amoxicillin-clavulanic
|
||
acid (<code>AMC</code>), and ciprofloxacin (<code>CIP</code>).</p>
|
||
<p>This method can be extended to other antibiotics and resistance
|
||
patterns, providing valuable insights into AMR dynamics in healthcare
|
||
settings.</p>
|
||
</div>
|
||
</div>
|
||
</main><aside class="col-md-3"><nav id="toc" aria-label="Table of contents"><h2>On this page</h2>
|
||
</nav></aside>
|
||
</div>
|
||
|
||
|
||
|
||
<footer><div class="pkgdown-footer-left">
|
||
<p><code>AMR</code> (for R). Free and open-source, licenced under the <a target="_blank" href="https://github.com/msberends/AMR/blob/main/LICENSE" class="external-link">GNU General Public License version 2.0 (GPL-2)</a>.<br>Developed at the <a target="_blank" href="https://www.rug.nl" class="external-link">University of Groningen</a> and <a target="_blank" href="https://www.umcg.nl" class="external-link">University Medical Center Groningen</a> in The Netherlands.</p>
|
||
</div>
|
||
|
||
<div class="pkgdown-footer-right">
|
||
<p><a target="_blank" href="https://www.rug.nl" class="external-link"><img src="https://github.com/msberends/AMR/raw/main/pkgdown/assets/logo_rug.svg" style="max-width: 150px;"></a><a target="_blank" href="https://www.umcg.nl" class="external-link"><img src="https://github.com/msberends/AMR/raw/main/pkgdown/assets/logo_umcg.svg" style="max-width: 150px;"></a></p>
|
||
</div>
|
||
|
||
</footer>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
</body>
|
||
</html>
|