2955 lines
94 KiB
HTML
2955 lines
94 KiB
HTML
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
|
||
|
||
<meta charset="utf-8">
|
||
<meta name="generator" content="quarto-1.9.37">
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||
|
||
|
||
<title>Target Trial Basics: Early Vasopressors in Septic Shock</title>
|
||
<style>
|
||
/* Default styles provided by pandoc.
|
||
** See https://pandoc.org/MANUAL.html#variables-for-html for config info.
|
||
*/
|
||
code{white-space: pre-wrap;}
|
||
span.smallcaps{font-variant: small-caps;}
|
||
div.columns{display: flex; gap: min(4vw, 1.5em);}
|
||
div.column{flex: auto; overflow-x: auto;}
|
||
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
||
ul.task-list{list-style: none;}
|
||
ul.task-list li input[type="checkbox"] {
|
||
width: 0.8em;
|
||
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
|
||
vertical-align: middle;
|
||
}
|
||
/* CSS for syntax highlighting */
|
||
html { -webkit-text-size-adjust: 100%; }
|
||
pre > code.sourceCode { white-space: pre; position: relative; }
|
||
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
|
||
pre > code.sourceCode > span:empty { height: 1.2em; }
|
||
.sourceCode { overflow: visible; }
|
||
code.sourceCode > span { color: inherit; text-decoration: inherit; }
|
||
div.sourceCode { margin: 1em 0; }
|
||
pre.sourceCode { margin: 0; }
|
||
@media screen {
|
||
div.sourceCode { overflow: auto; }
|
||
}
|
||
@media print {
|
||
pre > code.sourceCode { white-space: pre-wrap; }
|
||
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
|
||
}
|
||
pre.numberSource code
|
||
{ counter-reset: source-line 0; }
|
||
pre.numberSource code > span
|
||
{ position: relative; left: -4em; counter-increment: source-line; }
|
||
pre.numberSource code > span > a:first-child::before
|
||
{ content: counter(source-line);
|
||
position: relative; left: -1em; text-align: right; vertical-align: baseline;
|
||
border: none; display: inline-block;
|
||
-webkit-touch-callout: none; -webkit-user-select: none;
|
||
-khtml-user-select: none; -moz-user-select: none;
|
||
-ms-user-select: none; user-select: none;
|
||
padding: 0 4px; width: 4em;
|
||
}
|
||
pre.numberSource { margin-left: 3em; padding-left: 4px; }
|
||
div.sourceCode
|
||
{ }
|
||
@media screen {
|
||
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
|
||
}
|
||
</style>
|
||
|
||
|
||
<script src="01_target_trial_basics_files/libs/clipboard/clipboard.min.js"></script>
|
||
<script src="01_target_trial_basics_files/libs/quarto-html/quarto.js" type="module"></script>
|
||
<script src="01_target_trial_basics_files/libs/quarto-html/tabsets/tabsets.js" type="module"></script>
|
||
<script src="01_target_trial_basics_files/libs/quarto-html/popper.min.js"></script>
|
||
<script src="01_target_trial_basics_files/libs/quarto-html/tippy.umd.min.js"></script>
|
||
<script src="01_target_trial_basics_files/libs/quarto-html/anchor.min.js"></script>
|
||
<link href="01_target_trial_basics_files/libs/quarto-html/tippy.css" rel="stylesheet">
|
||
<link href="01_target_trial_basics_files/libs/quarto-html/quarto-syntax-highlighting-7f8f88aac4f3542376d5c11b86a4c14d.css" rel="stylesheet" id="quarto-text-highlighting-styles">
|
||
<script src="01_target_trial_basics_files/libs/bootstrap/bootstrap.min.js"></script>
|
||
<link href="01_target_trial_basics_files/libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
|
||
<link href="01_target_trial_basics_files/libs/bootstrap/bootstrap-138a6193a3bd40baf1e627da441a4734.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
|
||
|
||
|
||
</head>
|
||
|
||
<body class="fullcontent quarto-light">
|
||
|
||
<div id="quarto-content" class="page-columns page-rows-contents page-layout-article">
|
||
|
||
<main class="content" id="quarto-document-content">
|
||
|
||
<header id="title-block-header" class="quarto-title-block default">
|
||
<div class="quarto-title">
|
||
<h1 class="title">Target Trial Basics: Early Vasopressors in Septic Shock</h1>
|
||
</div>
|
||
|
||
|
||
|
||
<div class="quarto-title-meta">
|
||
|
||
|
||
|
||
|
||
</div>
|
||
|
||
|
||
|
||
</header>
|
||
|
||
|
||
<section id="goal" class="level2">
|
||
<h2 class="anchored" data-anchor-id="goal">Goal</h2>
|
||
<p>This notebook introduces the target trial we want to emulate.</p>
|
||
<p>The clinical question is:</p>
|
||
<blockquote class="blockquote">
|
||
<p>Among ICU patients with suspected septic shock at ICU admission, what is the effect of starting vasopressors within 2 hours compared with not starting vasopressors within 2 hours on 28-day mortality?</p>
|
||
</blockquote>
|
||
</section>
|
||
<section id="setup" class="level2">
|
||
<h2 class="anchored" data-anchor-id="setup">Setup</h2>
|
||
<div class="cell">
|
||
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(dplyr)</span>
|
||
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(gt)</span>
|
||
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(gtsummary)</span>
|
||
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(readr)</span>
|
||
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(skimr)</span>
|
||
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(tibble)</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div>
|
||
</div>
|
||
<p>These packages make the routine analysis code easier to read.</p>
|
||
<p><code>dplyr</code> handles data manipulation, <code>readr</code> reads rectangular files, <code>skimr</code> gives quick data summaries, <code>gt</code> builds display tables, and <code>gtsummary</code> builds analytic summary tables.</p>
|
||
</section>
|
||
<section id="why-a-target-trial" class="level2">
|
||
<h2 class="anchored" data-anchor-id="why-a-target-trial">Why A Target Trial?</h2>
|
||
<p>Observational ICU data are not randomized.</p>
|
||
<p>Sicker patients are often treated earlier, so a simple comparison between patients who received early vasopressors and patients who did not can be biased.</p>
|
||
<p>The target trial framework asks us to describe the randomized trial we wish we had run, then emulate it as closely as possible using observational data.</p>
|
||
</section>
|
||
<section id="target-trial-protocol" class="level2">
|
||
<h2 class="anchored" data-anchor-id="target-trial-protocol">Target Trial Protocol</h2>
|
||
<div class="cell">
|
||
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a>target_trial_protocol <span class="ot"><-</span> <span class="fu">tribble</span>(</span>
|
||
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a> <span class="sc">~</span>component, <span class="sc">~</span>definition,</span>
|
||
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a> <span class="st">"Eligibility criteria"</span>, <span class="st">"ICU admission, suspected sepsis, hypotension, elevated lactate"</span>,</span>
|
||
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a> <span class="st">"Time zero"</span>, <span class="st">"ICU admission"</span>,</span>
|
||
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a> <span class="st">"Treatment strategy 1"</span>, <span class="st">"Start vasopressors within 2 hours"</span>,</span>
|
||
<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a> <span class="st">"Treatment strategy 2"</span>, <span class="st">"Do not start vasopressors within 2 hours"</span>,</span>
|
||
<span id="cb2-7"><a href="#cb2-7" aria-hidden="true" tabindex="-1"></a> <span class="st">"Outcome"</span>, <span class="st">"Death within 28 days"</span>,</span>
|
||
<span id="cb2-8"><a href="#cb2-8" aria-hidden="true" tabindex="-1"></a> <span class="st">"Causal contrast"</span>, <span class="st">"Risk difference and risk ratio"</span></span>
|
||
<span id="cb2-9"><a href="#cb2-9" aria-hidden="true" tabindex="-1"></a>)</span>
|
||
<span id="cb2-10"><a href="#cb2-10" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb2-11"><a href="#cb2-11" aria-hidden="true" tabindex="-1"></a>target_trial_protocol <span class="sc">|></span></span>
|
||
<span id="cb2-12"><a href="#cb2-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">gt</span>() <span class="sc">|></span></span>
|
||
<span id="cb2-13"><a href="#cb2-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">tab_header</span>(<span class="at">title =</span> <span class="st">"Target Trial Protocol"</span>) <span class="sc">|></span></span>
|
||
<span id="cb2-14"><a href="#cb2-14" aria-hidden="true" tabindex="-1"></a> <span class="fu">cols_label</span>(</span>
|
||
<span id="cb2-15"><a href="#cb2-15" aria-hidden="true" tabindex="-1"></a> <span class="at">component =</span> <span class="st">"Component"</span>,</span>
|
||
<span id="cb2-16"><a href="#cb2-16" aria-hidden="true" tabindex="-1"></a> <span class="at">definition =</span> <span class="st">"Definition"</span></span>
|
||
<span id="cb2-17"><a href="#cb2-17" aria-hidden="true" tabindex="-1"></a> )</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div>
|
||
<div class="cell-output-display">
|
||
<div id="pybvwpwfyt" style="padding-left:0px;padding-right:0px;padding-top:10px;padding-bottom:10px;overflow-x:auto;overflow-y:auto;width:auto;height:auto;">
|
||
<style>#pybvwpwfyt table {
|
||
font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||
-webkit-font-smoothing: antialiased;
|
||
-moz-osx-font-smoothing: grayscale;
|
||
}
|
||
|
||
#pybvwpwfyt thead, #pybvwpwfyt tbody, #pybvwpwfyt tfoot, #pybvwpwfyt tr, #pybvwpwfyt td, #pybvwpwfyt th {
|
||
border-style: none;
|
||
}
|
||
|
||
#pybvwpwfyt p {
|
||
margin: 0;
|
||
padding: 0;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_table {
|
||
display: table;
|
||
border-collapse: collapse;
|
||
line-height: normal;
|
||
margin-left: auto;
|
||
margin-right: auto;
|
||
color: #333333;
|
||
font-size: 16px;
|
||
font-weight: normal;
|
||
font-style: normal;
|
||
background-color: #FFFFFF;
|
||
width: auto;
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #A8A8A8;
|
||
border-right-style: none;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #A8A8A8;
|
||
border-left-style: none;
|
||
border-left-width: 2px;
|
||
border-left-color: #D3D3D3;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_caption {
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_title {
|
||
color: #333333;
|
||
font-size: 125%;
|
||
font-weight: initial;
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-bottom-color: #FFFFFF;
|
||
border-bottom-width: 0;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_subtitle {
|
||
color: #333333;
|
||
font-size: 85%;
|
||
font-weight: initial;
|
||
padding-top: 3px;
|
||
padding-bottom: 5px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-top-color: #FFFFFF;
|
||
border-top-width: 0;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_heading {
|
||
background-color: #FFFFFF;
|
||
text-align: center;
|
||
border-bottom-color: #FFFFFF;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_bottom_border {
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_col_headings {
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_col_heading {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: normal;
|
||
text-transform: inherit;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
vertical-align: bottom;
|
||
padding-top: 5px;
|
||
padding-bottom: 6px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_column_spanner_outer {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: normal;
|
||
text-transform: inherit;
|
||
padding-top: 0;
|
||
padding-bottom: 0;
|
||
padding-left: 4px;
|
||
padding-right: 4px;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_column_spanner_outer:first-child {
|
||
padding-left: 0;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_column_spanner_outer:last-child {
|
||
padding-right: 0;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_column_spanner {
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
vertical-align: bottom;
|
||
padding-top: 5px;
|
||
padding-bottom: 5px;
|
||
overflow-x: hidden;
|
||
display: inline-block;
|
||
width: 100%;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_spanner_row {
|
||
border-bottom-style: hidden;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_group_heading {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: initial;
|
||
text-transform: inherit;
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
vertical-align: middle;
|
||
text-align: left;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_empty_group_heading {
|
||
padding: 0.5px;
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: initial;
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
vertical-align: middle;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_from_md > :first-child {
|
||
margin-top: 0;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_from_md > :last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_row {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
margin: 10px;
|
||
border-top-style: solid;
|
||
border-top-width: 1px;
|
||
border-top-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
vertical-align: middle;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_stub {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: initial;
|
||
text-transform: inherit;
|
||
border-right-style: solid;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_stub_row_group {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: initial;
|
||
text-transform: inherit;
|
||
border-right-style: solid;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
vertical-align: top;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_row_group_first td {
|
||
border-top-width: 2px;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_row_group_first th {
|
||
border-top-width: 2px;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_summary_row {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
text-transform: inherit;
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_first_summary_row {
|
||
border-top-style: solid;
|
||
border-top-color: #D3D3D3;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_first_summary_row.thick {
|
||
border-top-width: 2px;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_last_summary_row {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_grand_summary_row {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
text-transform: inherit;
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_first_grand_summary_row {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-top-style: double;
|
||
border-top-width: 6px;
|
||
border-top-color: #D3D3D3;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_last_grand_summary_row_top {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-bottom-style: double;
|
||
border-bottom-width: 6px;
|
||
border-bottom-color: #D3D3D3;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_striped {
|
||
background-color: rgba(128, 128, 128, 0.05);
|
||
}
|
||
|
||
#pybvwpwfyt .gt_table_body {
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_footnotes {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
border-bottom-style: none;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 2px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_footnote {
|
||
margin: 0px;
|
||
font-size: 90%;
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_sourcenotes {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
border-bottom-style: none;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 2px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_sourcenote {
|
||
font-size: 90%;
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_left {
|
||
text-align: left;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_center {
|
||
text-align: center;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_right {
|
||
text-align: right;
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_font_normal {
|
||
font-weight: normal;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_font_bold {
|
||
font-weight: bold;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_font_italic {
|
||
font-style: italic;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_super {
|
||
font-size: 65%;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_footnote_marks {
|
||
font-size: 75%;
|
||
vertical-align: 0.4em;
|
||
position: initial;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_asterisk {
|
||
font-size: 100%;
|
||
vertical-align: 0;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_indent_1 {
|
||
text-indent: 5px;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_indent_2 {
|
||
text-indent: 10px;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_indent_3 {
|
||
text-indent: 15px;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_indent_4 {
|
||
text-indent: 20px;
|
||
}
|
||
|
||
#pybvwpwfyt .gt_indent_5 {
|
||
text-indent: 25px;
|
||
}
|
||
|
||
#pybvwpwfyt .katex-display {
|
||
display: inline-flex !important;
|
||
margin-bottom: 0.75em !important;
|
||
}
|
||
|
||
#pybvwpwfyt div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after {
|
||
height: 0px !important;
|
||
}
|
||
</style>
|
||
|
||
<table class="gt_table caption-top table table-sm table-striped small" data-quarto-bootstrap="false">
|
||
<thead>
|
||
<tr class="gt_heading header">
|
||
<td colspan="2" class="gt_heading gt_title gt_font_normal gt_bottom_border">Target Trial Protocol</td>
|
||
</tr>
|
||
<tr class="gt_col_headings even">
|
||
<th id="component" class="gt_col_heading gt_columns_bottom_border gt_left" data-quarto-table-cell-role="th" scope="col">Component</th>
|
||
<th id="definition" class="gt_col_heading gt_columns_bottom_border gt_left" data-quarto-table-cell-role="th" scope="col">Definition</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody class="gt_table_body">
|
||
<tr class="odd">
|
||
<td class="gt_row gt_left" headers="component">Eligibility criteria</td>
|
||
<td class="gt_row gt_left" headers="definition">ICU admission, suspected sepsis, hypotension, elevated lactate</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td class="gt_row gt_left" headers="component">Time zero</td>
|
||
<td class="gt_row gt_left" headers="definition">ICU admission</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td class="gt_row gt_left" headers="component">Treatment strategy 1</td>
|
||
<td class="gt_row gt_left" headers="definition">Start vasopressors within 2 hours</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td class="gt_row gt_left" headers="component">Treatment strategy 2</td>
|
||
<td class="gt_row gt_left" headers="definition">Do not start vasopressors within 2 hours</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td class="gt_row gt_left" headers="component">Outcome</td>
|
||
<td class="gt_row gt_left" headers="definition">Death within 28 days</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td class="gt_row gt_left" headers="component">Causal contrast</td>
|
||
<td class="gt_row gt_left" headers="definition">Risk difference and risk ratio</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<p><code>tribble()</code> creates a small tibble by typing the rows directly.</p>
|
||
<p><code>gt()</code> turns that tibble into a clearer presentation table.</p>
|
||
</section>
|
||
<section id="load-the-simulated-cohort" class="level2">
|
||
<h2 class="anchored" data-anchor-id="load-the-simulated-cohort">Load The Simulated Cohort</h2>
|
||
<p>This first version uses a CSV generated by <code>scripts/01_simulate_icu_data_base_r.R</code>.</p>
|
||
<div class="cell">
|
||
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a>icu_data <span class="ot"><-</span> <span class="fu">read_csv</span>(<span class="st">"../data/icu_septic_shock_base_r.csv"</span>, <span class="at">show_col_types =</span> <span class="cn">FALSE</span>)</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div>
|
||
</div>
|
||
<p><code>read_csv()</code> reads a rectangular CSV file into R.</p>
|
||
<p>The object <code>icu_data</code> is a tibble, where each row is one ICU patient.</p>
|
||
</section>
|
||
<section id="inspect-the-data" class="level2">
|
||
<h2 class="anchored" data-anchor-id="inspect-the-data">Inspect The Data</h2>
|
||
<div class="cell">
|
||
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a>icu_data <span class="sc">|></span></span>
|
||
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">slice_head</span>(<span class="at">n =</span> <span class="dv">6</span>)</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div>
|
||
<div class="cell-output cell-output-stdout">
|
||
<pre><code># A tibble: 6 × 13
|
||
patient_id age sex sofa_score lactate map suspected_sepsis hypotension_at_baseline elevated_lactate_at_baseline
|
||
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
|
||
1 1 58 female 4 1.9 65 1 0 0
|
||
2 2 69 female 7 1.3 59 1 1 0
|
||
3 3 70 male 7 6.4 61 1 1 1
|
||
4 4 50 female 10 3.7 55 1 1 1
|
||
5 5 41 female 6 3.1 45 1 1 1
|
||
6 6 58 male 3 2.3 49 1 1 1
|
||
# ℹ 4 more variables: eligible <dbl>, early_vasopressor <dbl>, time_to_vasopressor_hours <dbl>, death_28d <dbl></code></pre>
|
||
</div>
|
||
</div>
|
||
<p><code>slice_head()</code> prints the first few rows so we can inspect the structure before analyzing anything.</p>
|
||
<div class="cell">
|
||
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="fu">skim</span>(icu_data)</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div>
|
||
<div class="cell-output-display">
|
||
<table class="caption-top table table-sm table-striped small">
|
||
<caption>Data summary</caption>
|
||
<tbody>
|
||
<tr class="odd">
|
||
<td style="text-align: left;">Name</td>
|
||
<td style="text-align: left;">icu_data</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td style="text-align: left;">Number of rows</td>
|
||
<td style="text-align: left;">1000</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td style="text-align: left;">Number of columns</td>
|
||
<td style="text-align: left;">13</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td style="text-align: left;">_______________________</td>
|
||
<td style="text-align: left;"></td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td style="text-align: left;">Column type frequency:</td>
|
||
<td style="text-align: left;"></td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td style="text-align: left;">character</td>
|
||
<td style="text-align: left;">1</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td style="text-align: left;">numeric</td>
|
||
<td style="text-align: left;">12</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td style="text-align: left;">________________________</td>
|
||
<td style="text-align: left;"></td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td style="text-align: left;">Group variables</td>
|
||
<td style="text-align: left;">None</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p><strong>Variable type: character</strong></p>
|
||
<table class="caption-top table table-sm table-striped small">
|
||
<colgroup>
|
||
<col style="width: 19%">
|
||
<col style="width: 13%">
|
||
<col style="width: 19%">
|
||
<col style="width: 5%">
|
||
<col style="width: 5%">
|
||
<col style="width: 8%">
|
||
<col style="width: 12%">
|
||
<col style="width: 15%">
|
||
</colgroup>
|
||
<thead>
|
||
<tr class="header">
|
||
<th style="text-align: left;">skim_variable</th>
|
||
<th style="text-align: right;">n_missing</th>
|
||
<th style="text-align: right;">complete_rate</th>
|
||
<th style="text-align: right;">min</th>
|
||
<th style="text-align: right;">max</th>
|
||
<th style="text-align: right;">empty</th>
|
||
<th style="text-align: right;">n_unique</th>
|
||
<th style="text-align: right;">whitespace</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="odd">
|
||
<td style="text-align: left;">sex</td>
|
||
<td style="text-align: right;">0</td>
|
||
<td style="text-align: right;">1</td>
|
||
<td style="text-align: right;">4</td>
|
||
<td style="text-align: right;">6</td>
|
||
<td style="text-align: right;">0</td>
|
||
<td style="text-align: right;">2</td>
|
||
<td style="text-align: right;">0</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p><strong>Variable type: numeric</strong></p>
|
||
<table class="caption-top table table-sm table-striped small">
|
||
<colgroup>
|
||
<col style="width: 27%">
|
||
<col style="width: 9%">
|
||
<col style="width: 13%">
|
||
<col style="width: 6%">
|
||
<col style="width: 6%">
|
||
<col style="width: 4%">
|
||
<col style="width: 6%">
|
||
<col style="width: 6%">
|
||
<col style="width: 6%">
|
||
<col style="width: 7%">
|
||
<col style="width: 5%">
|
||
</colgroup>
|
||
<thead>
|
||
<tr class="header">
|
||
<th style="text-align: left;">skim_variable</th>
|
||
<th style="text-align: right;">n_missing</th>
|
||
<th style="text-align: right;">complete_rate</th>
|
||
<th style="text-align: right;">mean</th>
|
||
<th style="text-align: right;">sd</th>
|
||
<th style="text-align: right;">p0</th>
|
||
<th style="text-align: right;">p25</th>
|
||
<th style="text-align: right;">p50</th>
|
||
<th style="text-align: right;">p75</th>
|
||
<th style="text-align: right;">p100</th>
|
||
<th style="text-align: left;">hist</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr class="odd">
|
||
<td style="text-align: left;">patient_id</td>
|
||
<td style="text-align: right;">0</td>
|
||
<td style="text-align: right;">1</td>
|
||
<td style="text-align: right;">500.50</td>
|
||
<td style="text-align: right;">288.82</td>
|
||
<td style="text-align: right;">1.0</td>
|
||
<td style="text-align: right;">250.75</td>
|
||
<td style="text-align: right;">500.50</td>
|
||
<td style="text-align: right;">750.25</td>
|
||
<td style="text-align: right;">1000.00</td>
|
||
<td style="text-align: left;">▇▇▇▇▇</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td style="text-align: left;">age</td>
|
||
<td style="text-align: right;">0</td>
|
||
<td style="text-align: right;">1</td>
|
||
<td style="text-align: right;">64.98</td>
|
||
<td style="text-align: right;">13.92</td>
|
||
<td style="text-align: right;">18.0</td>
|
||
<td style="text-align: right;">56.00</td>
|
||
<td style="text-align: right;">65.00</td>
|
||
<td style="text-align: right;">75.00</td>
|
||
<td style="text-align: right;">95.00</td>
|
||
<td style="text-align: left;">▁▂▇▇▃</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td style="text-align: left;">sofa_score</td>
|
||
<td style="text-align: right;">0</td>
|
||
<td style="text-align: right;">1</td>
|
||
<td style="text-align: right;">7.01</td>
|
||
<td style="text-align: right;">2.57</td>
|
||
<td style="text-align: right;">1.0</td>
|
||
<td style="text-align: right;">5.00</td>
|
||
<td style="text-align: right;">7.00</td>
|
||
<td style="text-align: right;">9.00</td>
|
||
<td style="text-align: right;">17.00</td>
|
||
<td style="text-align: left;">▃▇▆▂▁</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td style="text-align: left;">lactate</td>
|
||
<td style="text-align: right;">0</td>
|
||
<td style="text-align: right;">1</td>
|
||
<td style="text-align: right;">3.50</td>
|
||
<td style="text-align: right;">1.92</td>
|
||
<td style="text-align: right;">0.5</td>
|
||
<td style="text-align: right;">2.10</td>
|
||
<td style="text-align: right;">3.05</td>
|
||
<td style="text-align: right;">4.30</td>
|
||
<td style="text-align: right;">13.10</td>
|
||
<td style="text-align: left;">▇▆▂▁▁</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td style="text-align: left;">map</td>
|
||
<td style="text-align: right;">0</td>
|
||
<td style="text-align: right;">1</td>
|
||
<td style="text-align: right;">62.16</td>
|
||
<td style="text-align: right;">10.18</td>
|
||
<td style="text-align: right;">35.0</td>
|
||
<td style="text-align: right;">55.00</td>
|
||
<td style="text-align: right;">62.00</td>
|
||
<td style="text-align: right;">70.00</td>
|
||
<td style="text-align: right;">95.00</td>
|
||
<td style="text-align: left;">▂▆▇▃▁</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td style="text-align: left;">suspected_sepsis</td>
|
||
<td style="text-align: right;">0</td>
|
||
<td style="text-align: right;">1</td>
|
||
<td style="text-align: right;">0.88</td>
|
||
<td style="text-align: right;">0.33</td>
|
||
<td style="text-align: right;">0.0</td>
|
||
<td style="text-align: right;">1.00</td>
|
||
<td style="text-align: right;">1.00</td>
|
||
<td style="text-align: right;">1.00</td>
|
||
<td style="text-align: right;">1.00</td>
|
||
<td style="text-align: left;">▁▁▁▁▇</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td style="text-align: left;">hypotension_at_baseline</td>
|
||
<td style="text-align: right;">0</td>
|
||
<td style="text-align: right;">1</td>
|
||
<td style="text-align: right;">0.59</td>
|
||
<td style="text-align: right;">0.49</td>
|
||
<td style="text-align: right;">0.0</td>
|
||
<td style="text-align: right;">0.00</td>
|
||
<td style="text-align: right;">1.00</td>
|
||
<td style="text-align: right;">1.00</td>
|
||
<td style="text-align: right;">1.00</td>
|
||
<td style="text-align: left;">▆▁▁▁▇</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td style="text-align: left;">elevated_lactate_at_baseline</td>
|
||
<td style="text-align: right;">0</td>
|
||
<td style="text-align: right;">1</td>
|
||
<td style="text-align: right;">0.81</td>
|
||
<td style="text-align: right;">0.40</td>
|
||
<td style="text-align: right;">0.0</td>
|
||
<td style="text-align: right;">1.00</td>
|
||
<td style="text-align: right;">1.00</td>
|
||
<td style="text-align: right;">1.00</td>
|
||
<td style="text-align: right;">1.00</td>
|
||
<td style="text-align: left;">▂▁▁▁▇</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td style="text-align: left;">eligible</td>
|
||
<td style="text-align: right;">0</td>
|
||
<td style="text-align: right;">1</td>
|
||
<td style="text-align: right;">0.42</td>
|
||
<td style="text-align: right;">0.49</td>
|
||
<td style="text-align: right;">0.0</td>
|
||
<td style="text-align: right;">0.00</td>
|
||
<td style="text-align: right;">0.00</td>
|
||
<td style="text-align: right;">1.00</td>
|
||
<td style="text-align: right;">1.00</td>
|
||
<td style="text-align: left;">▇▁▁▁▆</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td style="text-align: left;">early_vasopressor</td>
|
||
<td style="text-align: right;">0</td>
|
||
<td style="text-align: right;">1</td>
|
||
<td style="text-align: right;">0.46</td>
|
||
<td style="text-align: right;">0.50</td>
|
||
<td style="text-align: right;">0.0</td>
|
||
<td style="text-align: right;">0.00</td>
|
||
<td style="text-align: right;">0.00</td>
|
||
<td style="text-align: right;">1.00</td>
|
||
<td style="text-align: right;">1.00</td>
|
||
<td style="text-align: left;">▇▁▁▁▇</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td style="text-align: left;">time_to_vasopressor_hours</td>
|
||
<td style="text-align: right;">0</td>
|
||
<td style="text-align: right;">1</td>
|
||
<td style="text-align: right;">7.48</td>
|
||
<td style="text-align: right;">7.48</td>
|
||
<td style="text-align: right;">0.0</td>
|
||
<td style="text-align: right;">1.17</td>
|
||
<td style="text-align: right;">3.83</td>
|
||
<td style="text-align: right;">13.77</td>
|
||
<td style="text-align: right;">23.99</td>
|
||
<td style="text-align: left;">▇▂▂▂▂</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td style="text-align: left;">death_28d</td>
|
||
<td style="text-align: right;">0</td>
|
||
<td style="text-align: right;">1</td>
|
||
<td style="text-align: right;">0.24</td>
|
||
<td style="text-align: right;">0.43</td>
|
||
<td style="text-align: right;">0.0</td>
|
||
<td style="text-align: right;">0.00</td>
|
||
<td style="text-align: right;">0.00</td>
|
||
<td style="text-align: right;">0.00</td>
|
||
<td style="text-align: right;">1.00</td>
|
||
<td style="text-align: left;">▇▁▁▁▂</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
<p><code>skim()</code> gives a quick summary of variable types, missingness, and distributions.</p>
|
||
</section>
|
||
<section id="apply-eligibility-criteria" class="level2">
|
||
<h2 class="anchored" data-anchor-id="apply-eligibility-criteria">Apply Eligibility Criteria</h2>
|
||
<div class="cell">
|
||
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a>eligible_data <span class="ot"><-</span> icu_data <span class="sc">|></span></span>
|
||
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">filter</span>(eligible <span class="sc">==</span> <span class="dv">1</span>)</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div>
|
||
</div>
|
||
<p><code>filter()</code> keeps rows that satisfy a condition.</p>
|
||
<p>Here, we keep only patients who satisfy the simulated eligibility criteria.</p>
|
||
</section>
|
||
<section id="count-treatment-groups" class="level2">
|
||
<h2 class="anchored" data-anchor-id="count-treatment-groups">Count Treatment Groups</h2>
|
||
<div class="cell">
|
||
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a>eligible_data <span class="sc">|></span></span>
|
||
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">count</span>(early_vasopressor)</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div>
|
||
<div class="cell-output cell-output-stdout">
|
||
<pre><code># A tibble: 2 × 2
|
||
early_vasopressor n
|
||
<dbl> <int>
|
||
1 0 181
|
||
2 1 235</code></pre>
|
||
</div>
|
||
</div>
|
||
<p><code>count()</code> counts how many eligible patients were observed under each treatment group.</p>
|
||
<p>In this first simplified dataset:</p>
|
||
<ul>
|
||
<li><code>1</code> means vasopressors started within 2 hours.</li>
|
||
<li><code>0</code> means vasopressors were not started within 2 hours.</li>
|
||
</ul>
|
||
</section>
|
||
<section id="estimate-naive-mortality-risks" class="level2">
|
||
<h2 class="anchored" data-anchor-id="estimate-naive-mortality-risks">Estimate Naive Mortality Risks</h2>
|
||
<div class="cell">
|
||
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb10"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a>naive_risks <span class="ot"><-</span> eligible_data <span class="sc">|></span></span>
|
||
<span id="cb10-2"><a href="#cb10-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">group_by</span>(early_vasopressor) <span class="sc">|></span></span>
|
||
<span id="cb10-3"><a href="#cb10-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">summarize</span>(</span>
|
||
<span id="cb10-4"><a href="#cb10-4" aria-hidden="true" tabindex="-1"></a> <span class="at">n_patients =</span> <span class="fu">n</span>(),</span>
|
||
<span id="cb10-5"><a href="#cb10-5" aria-hidden="true" tabindex="-1"></a> <span class="at">risk_death_28d =</span> <span class="fu">mean</span>(death_28d),</span>
|
||
<span id="cb10-6"><a href="#cb10-6" aria-hidden="true" tabindex="-1"></a> <span class="at">.groups =</span> <span class="st">"drop"</span></span>
|
||
<span id="cb10-7"><a href="#cb10-7" aria-hidden="true" tabindex="-1"></a> )</span>
|
||
<span id="cb10-8"><a href="#cb10-8" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb10-9"><a href="#cb10-9" aria-hidden="true" tabindex="-1"></a>naive_risks <span class="sc">|></span></span>
|
||
<span id="cb10-10"><a href="#cb10-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">gt</span>() <span class="sc">|></span></span>
|
||
<span id="cb10-11"><a href="#cb10-11" aria-hidden="true" tabindex="-1"></a> <span class="fu">tab_header</span>(<span class="at">title =</span> <span class="st">"Naive 28-Day Mortality Risk"</span>) <span class="sc">|></span></span>
|
||
<span id="cb10-12"><a href="#cb10-12" aria-hidden="true" tabindex="-1"></a> <span class="fu">cols_label</span>(</span>
|
||
<span id="cb10-13"><a href="#cb10-13" aria-hidden="true" tabindex="-1"></a> <span class="at">early_vasopressor =</span> <span class="st">"Early vasopressor"</span>,</span>
|
||
<span id="cb10-14"><a href="#cb10-14" aria-hidden="true" tabindex="-1"></a> <span class="at">n_patients =</span> <span class="st">"Patients"</span>,</span>
|
||
<span id="cb10-15"><a href="#cb10-15" aria-hidden="true" tabindex="-1"></a> <span class="at">risk_death_28d =</span> <span class="st">"28-day mortality risk"</span></span>
|
||
<span id="cb10-16"><a href="#cb10-16" aria-hidden="true" tabindex="-1"></a> ) <span class="sc">|></span></span>
|
||
<span id="cb10-17"><a href="#cb10-17" aria-hidden="true" tabindex="-1"></a> <span class="fu">fmt_number</span>(<span class="at">columns =</span> risk_death_28d, <span class="at">decimals =</span> <span class="dv">3</span>)</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div>
|
||
<div class="cell-output-display">
|
||
<div id="whnzcuidrs" style="padding-left:0px;padding-right:0px;padding-top:10px;padding-bottom:10px;overflow-x:auto;overflow-y:auto;width:auto;height:auto;">
|
||
<style>#whnzcuidrs table {
|
||
font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||
-webkit-font-smoothing: antialiased;
|
||
-moz-osx-font-smoothing: grayscale;
|
||
}
|
||
|
||
#whnzcuidrs thead, #whnzcuidrs tbody, #whnzcuidrs tfoot, #whnzcuidrs tr, #whnzcuidrs td, #whnzcuidrs th {
|
||
border-style: none;
|
||
}
|
||
|
||
#whnzcuidrs p {
|
||
margin: 0;
|
||
padding: 0;
|
||
}
|
||
|
||
#whnzcuidrs .gt_table {
|
||
display: table;
|
||
border-collapse: collapse;
|
||
line-height: normal;
|
||
margin-left: auto;
|
||
margin-right: auto;
|
||
color: #333333;
|
||
font-size: 16px;
|
||
font-weight: normal;
|
||
font-style: normal;
|
||
background-color: #FFFFFF;
|
||
width: auto;
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #A8A8A8;
|
||
border-right-style: none;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #A8A8A8;
|
||
border-left-style: none;
|
||
border-left-width: 2px;
|
||
border-left-color: #D3D3D3;
|
||
}
|
||
|
||
#whnzcuidrs .gt_caption {
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
}
|
||
|
||
#whnzcuidrs .gt_title {
|
||
color: #333333;
|
||
font-size: 125%;
|
||
font-weight: initial;
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-bottom-color: #FFFFFF;
|
||
border-bottom-width: 0;
|
||
}
|
||
|
||
#whnzcuidrs .gt_subtitle {
|
||
color: #333333;
|
||
font-size: 85%;
|
||
font-weight: initial;
|
||
padding-top: 3px;
|
||
padding-bottom: 5px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-top-color: #FFFFFF;
|
||
border-top-width: 0;
|
||
}
|
||
|
||
#whnzcuidrs .gt_heading {
|
||
background-color: #FFFFFF;
|
||
text-align: center;
|
||
border-bottom-color: #FFFFFF;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
}
|
||
|
||
#whnzcuidrs .gt_bottom_border {
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
}
|
||
|
||
#whnzcuidrs .gt_col_headings {
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
}
|
||
|
||
#whnzcuidrs .gt_col_heading {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: normal;
|
||
text-transform: inherit;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
vertical-align: bottom;
|
||
padding-top: 5px;
|
||
padding-bottom: 6px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
#whnzcuidrs .gt_column_spanner_outer {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: normal;
|
||
text-transform: inherit;
|
||
padding-top: 0;
|
||
padding-bottom: 0;
|
||
padding-left: 4px;
|
||
padding-right: 4px;
|
||
}
|
||
|
||
#whnzcuidrs .gt_column_spanner_outer:first-child {
|
||
padding-left: 0;
|
||
}
|
||
|
||
#whnzcuidrs .gt_column_spanner_outer:last-child {
|
||
padding-right: 0;
|
||
}
|
||
|
||
#whnzcuidrs .gt_column_spanner {
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
vertical-align: bottom;
|
||
padding-top: 5px;
|
||
padding-bottom: 5px;
|
||
overflow-x: hidden;
|
||
display: inline-block;
|
||
width: 100%;
|
||
}
|
||
|
||
#whnzcuidrs .gt_spanner_row {
|
||
border-bottom-style: hidden;
|
||
}
|
||
|
||
#whnzcuidrs .gt_group_heading {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: initial;
|
||
text-transform: inherit;
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
vertical-align: middle;
|
||
text-align: left;
|
||
}
|
||
|
||
#whnzcuidrs .gt_empty_group_heading {
|
||
padding: 0.5px;
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: initial;
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
vertical-align: middle;
|
||
}
|
||
|
||
#whnzcuidrs .gt_from_md > :first-child {
|
||
margin-top: 0;
|
||
}
|
||
|
||
#whnzcuidrs .gt_from_md > :last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
#whnzcuidrs .gt_row {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
margin: 10px;
|
||
border-top-style: solid;
|
||
border-top-width: 1px;
|
||
border-top-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
vertical-align: middle;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
#whnzcuidrs .gt_stub {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: initial;
|
||
text-transform: inherit;
|
||
border-right-style: solid;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#whnzcuidrs .gt_stub_row_group {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: initial;
|
||
text-transform: inherit;
|
||
border-right-style: solid;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
vertical-align: top;
|
||
}
|
||
|
||
#whnzcuidrs .gt_row_group_first td {
|
||
border-top-width: 2px;
|
||
}
|
||
|
||
#whnzcuidrs .gt_row_group_first th {
|
||
border-top-width: 2px;
|
||
}
|
||
|
||
#whnzcuidrs .gt_summary_row {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
text-transform: inherit;
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#whnzcuidrs .gt_first_summary_row {
|
||
border-top-style: solid;
|
||
border-top-color: #D3D3D3;
|
||
}
|
||
|
||
#whnzcuidrs .gt_first_summary_row.thick {
|
||
border-top-width: 2px;
|
||
}
|
||
|
||
#whnzcuidrs .gt_last_summary_row {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
}
|
||
|
||
#whnzcuidrs .gt_grand_summary_row {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
text-transform: inherit;
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#whnzcuidrs .gt_first_grand_summary_row {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-top-style: double;
|
||
border-top-width: 6px;
|
||
border-top-color: #D3D3D3;
|
||
}
|
||
|
||
#whnzcuidrs .gt_last_grand_summary_row_top {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-bottom-style: double;
|
||
border-bottom-width: 6px;
|
||
border-bottom-color: #D3D3D3;
|
||
}
|
||
|
||
#whnzcuidrs .gt_striped {
|
||
background-color: rgba(128, 128, 128, 0.05);
|
||
}
|
||
|
||
#whnzcuidrs .gt_table_body {
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
}
|
||
|
||
#whnzcuidrs .gt_footnotes {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
border-bottom-style: none;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 2px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
}
|
||
|
||
#whnzcuidrs .gt_footnote {
|
||
margin: 0px;
|
||
font-size: 90%;
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#whnzcuidrs .gt_sourcenotes {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
border-bottom-style: none;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 2px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
}
|
||
|
||
#whnzcuidrs .gt_sourcenote {
|
||
font-size: 90%;
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#whnzcuidrs .gt_left {
|
||
text-align: left;
|
||
}
|
||
|
||
#whnzcuidrs .gt_center {
|
||
text-align: center;
|
||
}
|
||
|
||
#whnzcuidrs .gt_right {
|
||
text-align: right;
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
|
||
#whnzcuidrs .gt_font_normal {
|
||
font-weight: normal;
|
||
}
|
||
|
||
#whnzcuidrs .gt_font_bold {
|
||
font-weight: bold;
|
||
}
|
||
|
||
#whnzcuidrs .gt_font_italic {
|
||
font-style: italic;
|
||
}
|
||
|
||
#whnzcuidrs .gt_super {
|
||
font-size: 65%;
|
||
}
|
||
|
||
#whnzcuidrs .gt_footnote_marks {
|
||
font-size: 75%;
|
||
vertical-align: 0.4em;
|
||
position: initial;
|
||
}
|
||
|
||
#whnzcuidrs .gt_asterisk {
|
||
font-size: 100%;
|
||
vertical-align: 0;
|
||
}
|
||
|
||
#whnzcuidrs .gt_indent_1 {
|
||
text-indent: 5px;
|
||
}
|
||
|
||
#whnzcuidrs .gt_indent_2 {
|
||
text-indent: 10px;
|
||
}
|
||
|
||
#whnzcuidrs .gt_indent_3 {
|
||
text-indent: 15px;
|
||
}
|
||
|
||
#whnzcuidrs .gt_indent_4 {
|
||
text-indent: 20px;
|
||
}
|
||
|
||
#whnzcuidrs .gt_indent_5 {
|
||
text-indent: 25px;
|
||
}
|
||
|
||
#whnzcuidrs .katex-display {
|
||
display: inline-flex !important;
|
||
margin-bottom: 0.75em !important;
|
||
}
|
||
|
||
#whnzcuidrs div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after {
|
||
height: 0px !important;
|
||
}
|
||
</style>
|
||
|
||
<table class="gt_table caption-top table table-sm table-striped small" data-quarto-bootstrap="false">
|
||
<thead>
|
||
<tr class="gt_heading header">
|
||
<td colspan="3" class="gt_heading gt_title gt_font_normal gt_bottom_border">Naive 28-Day Mortality Risk</td>
|
||
</tr>
|
||
<tr class="gt_col_headings even">
|
||
<th id="early_vasopressor" class="gt_col_heading gt_columns_bottom_border gt_right" data-quarto-table-cell-role="th" scope="col">Early vasopressor</th>
|
||
<th id="n_patients" class="gt_col_heading gt_columns_bottom_border gt_right" data-quarto-table-cell-role="th" scope="col">Patients</th>
|
||
<th id="risk_death_28d" class="gt_col_heading gt_columns_bottom_border gt_right" data-quarto-table-cell-role="th" scope="col">28-day mortality risk</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody class="gt_table_body">
|
||
<tr class="odd">
|
||
<td class="gt_row gt_right" headers="early_vasopressor">0</td>
|
||
<td class="gt_row gt_right" headers="n_patients">181</td>
|
||
<td class="gt_row gt_right" headers="risk_death_28d">0.260</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td class="gt_row gt_right" headers="early_vasopressor">1</td>
|
||
<td class="gt_row gt_right" headers="n_patients">235</td>
|
||
<td class="gt_row gt_right" headers="risk_death_28d">0.357</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<p>Because <code>death_28d</code> is coded as 0 or 1, its mean is the proportion who died.</p>
|
||
<p>This is a naive comparison because it does not yet adjust for the fact that treatment decisions depend on patient severity.</p>
|
||
</section>
|
||
<section id="estimate-naive-contrasts" class="level2">
|
||
<h2 class="anchored" data-anchor-id="estimate-naive-contrasts">Estimate Naive Contrasts</h2>
|
||
<div class="cell">
|
||
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a>risk_early <span class="ot"><-</span> naive_risks <span class="sc">|></span></span>
|
||
<span id="cb11-2"><a href="#cb11-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">filter</span>(early_vasopressor <span class="sc">==</span> <span class="dv">1</span>) <span class="sc">|></span></span>
|
||
<span id="cb11-3"><a href="#cb11-3" aria-hidden="true" tabindex="-1"></a> <span class="fu">pull</span>(risk_death_28d)</span>
|
||
<span id="cb11-4"><a href="#cb11-4" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb11-5"><a href="#cb11-5" aria-hidden="true" tabindex="-1"></a>risk_not_early <span class="ot"><-</span> naive_risks <span class="sc">|></span></span>
|
||
<span id="cb11-6"><a href="#cb11-6" aria-hidden="true" tabindex="-1"></a> <span class="fu">filter</span>(early_vasopressor <span class="sc">==</span> <span class="dv">0</span>) <span class="sc">|></span></span>
|
||
<span id="cb11-7"><a href="#cb11-7" aria-hidden="true" tabindex="-1"></a> <span class="fu">pull</span>(risk_death_28d)</span>
|
||
<span id="cb11-8"><a href="#cb11-8" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb11-9"><a href="#cb11-9" aria-hidden="true" tabindex="-1"></a>naive_contrasts <span class="ot"><-</span> <span class="fu">tibble</span>(</span>
|
||
<span id="cb11-10"><a href="#cb11-10" aria-hidden="true" tabindex="-1"></a> <span class="at">measure =</span> <span class="fu">c</span>(<span class="st">"Risk difference"</span>, <span class="st">"Risk ratio"</span>),</span>
|
||
<span id="cb11-11"><a href="#cb11-11" aria-hidden="true" tabindex="-1"></a> <span class="at">value =</span> <span class="fu">c</span>(</span>
|
||
<span id="cb11-12"><a href="#cb11-12" aria-hidden="true" tabindex="-1"></a> risk_early <span class="sc">-</span> risk_not_early,</span>
|
||
<span id="cb11-13"><a href="#cb11-13" aria-hidden="true" tabindex="-1"></a> risk_early <span class="sc">/</span> risk_not_early</span>
|
||
<span id="cb11-14"><a href="#cb11-14" aria-hidden="true" tabindex="-1"></a> )</span>
|
||
<span id="cb11-15"><a href="#cb11-15" aria-hidden="true" tabindex="-1"></a>)</span>
|
||
<span id="cb11-16"><a href="#cb11-16" aria-hidden="true" tabindex="-1"></a></span>
|
||
<span id="cb11-17"><a href="#cb11-17" aria-hidden="true" tabindex="-1"></a>naive_contrasts <span class="sc">|></span></span>
|
||
<span id="cb11-18"><a href="#cb11-18" aria-hidden="true" tabindex="-1"></a> <span class="fu">gt</span>() <span class="sc">|></span></span>
|
||
<span id="cb11-19"><a href="#cb11-19" aria-hidden="true" tabindex="-1"></a> <span class="fu">tab_header</span>(<span class="at">title =</span> <span class="st">"Naive Treatment Contrast"</span>) <span class="sc">|></span></span>
|
||
<span id="cb11-20"><a href="#cb11-20" aria-hidden="true" tabindex="-1"></a> <span class="fu">cols_label</span>(</span>
|
||
<span id="cb11-21"><a href="#cb11-21" aria-hidden="true" tabindex="-1"></a> <span class="at">measure =</span> <span class="st">"Measure"</span>,</span>
|
||
<span id="cb11-22"><a href="#cb11-22" aria-hidden="true" tabindex="-1"></a> <span class="at">value =</span> <span class="st">"Value"</span></span>
|
||
<span id="cb11-23"><a href="#cb11-23" aria-hidden="true" tabindex="-1"></a> ) <span class="sc">|></span></span>
|
||
<span id="cb11-24"><a href="#cb11-24" aria-hidden="true" tabindex="-1"></a> <span class="fu">fmt_number</span>(<span class="at">columns =</span> value, <span class="at">decimals =</span> <span class="dv">3</span>)</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div>
|
||
<div class="cell-output-display">
|
||
<div id="hqmgmhdtvi" style="padding-left:0px;padding-right:0px;padding-top:10px;padding-bottom:10px;overflow-x:auto;overflow-y:auto;width:auto;height:auto;">
|
||
<style>#hqmgmhdtvi table {
|
||
font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||
-webkit-font-smoothing: antialiased;
|
||
-moz-osx-font-smoothing: grayscale;
|
||
}
|
||
|
||
#hqmgmhdtvi thead, #hqmgmhdtvi tbody, #hqmgmhdtvi tfoot, #hqmgmhdtvi tr, #hqmgmhdtvi td, #hqmgmhdtvi th {
|
||
border-style: none;
|
||
}
|
||
|
||
#hqmgmhdtvi p {
|
||
margin: 0;
|
||
padding: 0;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_table {
|
||
display: table;
|
||
border-collapse: collapse;
|
||
line-height: normal;
|
||
margin-left: auto;
|
||
margin-right: auto;
|
||
color: #333333;
|
||
font-size: 16px;
|
||
font-weight: normal;
|
||
font-style: normal;
|
||
background-color: #FFFFFF;
|
||
width: auto;
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #A8A8A8;
|
||
border-right-style: none;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #A8A8A8;
|
||
border-left-style: none;
|
||
border-left-width: 2px;
|
||
border-left-color: #D3D3D3;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_caption {
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_title {
|
||
color: #333333;
|
||
font-size: 125%;
|
||
font-weight: initial;
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-bottom-color: #FFFFFF;
|
||
border-bottom-width: 0;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_subtitle {
|
||
color: #333333;
|
||
font-size: 85%;
|
||
font-weight: initial;
|
||
padding-top: 3px;
|
||
padding-bottom: 5px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-top-color: #FFFFFF;
|
||
border-top-width: 0;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_heading {
|
||
background-color: #FFFFFF;
|
||
text-align: center;
|
||
border-bottom-color: #FFFFFF;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_bottom_border {
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_col_headings {
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_col_heading {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: normal;
|
||
text-transform: inherit;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
vertical-align: bottom;
|
||
padding-top: 5px;
|
||
padding-bottom: 6px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_column_spanner_outer {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: normal;
|
||
text-transform: inherit;
|
||
padding-top: 0;
|
||
padding-bottom: 0;
|
||
padding-left: 4px;
|
||
padding-right: 4px;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_column_spanner_outer:first-child {
|
||
padding-left: 0;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_column_spanner_outer:last-child {
|
||
padding-right: 0;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_column_spanner {
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
vertical-align: bottom;
|
||
padding-top: 5px;
|
||
padding-bottom: 5px;
|
||
overflow-x: hidden;
|
||
display: inline-block;
|
||
width: 100%;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_spanner_row {
|
||
border-bottom-style: hidden;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_group_heading {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: initial;
|
||
text-transform: inherit;
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
vertical-align: middle;
|
||
text-align: left;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_empty_group_heading {
|
||
padding: 0.5px;
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: initial;
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
vertical-align: middle;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_from_md > :first-child {
|
||
margin-top: 0;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_from_md > :last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_row {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
margin: 10px;
|
||
border-top-style: solid;
|
||
border-top-width: 1px;
|
||
border-top-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
vertical-align: middle;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_stub {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: initial;
|
||
text-transform: inherit;
|
||
border-right-style: solid;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_stub_row_group {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: initial;
|
||
text-transform: inherit;
|
||
border-right-style: solid;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
vertical-align: top;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_row_group_first td {
|
||
border-top-width: 2px;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_row_group_first th {
|
||
border-top-width: 2px;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_summary_row {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
text-transform: inherit;
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_first_summary_row {
|
||
border-top-style: solid;
|
||
border-top-color: #D3D3D3;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_first_summary_row.thick {
|
||
border-top-width: 2px;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_last_summary_row {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_grand_summary_row {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
text-transform: inherit;
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_first_grand_summary_row {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-top-style: double;
|
||
border-top-width: 6px;
|
||
border-top-color: #D3D3D3;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_last_grand_summary_row_top {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-bottom-style: double;
|
||
border-bottom-width: 6px;
|
||
border-bottom-color: #D3D3D3;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_striped {
|
||
background-color: rgba(128, 128, 128, 0.05);
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_table_body {
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_footnotes {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
border-bottom-style: none;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 2px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_footnote {
|
||
margin: 0px;
|
||
font-size: 90%;
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_sourcenotes {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
border-bottom-style: none;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 2px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_sourcenote {
|
||
font-size: 90%;
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_left {
|
||
text-align: left;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_center {
|
||
text-align: center;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_right {
|
||
text-align: right;
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_font_normal {
|
||
font-weight: normal;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_font_bold {
|
||
font-weight: bold;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_font_italic {
|
||
font-style: italic;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_super {
|
||
font-size: 65%;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_footnote_marks {
|
||
font-size: 75%;
|
||
vertical-align: 0.4em;
|
||
position: initial;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_asterisk {
|
||
font-size: 100%;
|
||
vertical-align: 0;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_indent_1 {
|
||
text-indent: 5px;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_indent_2 {
|
||
text-indent: 10px;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_indent_3 {
|
||
text-indent: 15px;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_indent_4 {
|
||
text-indent: 20px;
|
||
}
|
||
|
||
#hqmgmhdtvi .gt_indent_5 {
|
||
text-indent: 25px;
|
||
}
|
||
|
||
#hqmgmhdtvi .katex-display {
|
||
display: inline-flex !important;
|
||
margin-bottom: 0.75em !important;
|
||
}
|
||
|
||
#hqmgmhdtvi div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after {
|
||
height: 0px !important;
|
||
}
|
||
</style>
|
||
|
||
<table class="gt_table caption-top table table-sm table-striped small" data-quarto-bootstrap="false">
|
||
<thead>
|
||
<tr class="gt_heading header">
|
||
<td colspan="2" class="gt_heading gt_title gt_font_normal gt_bottom_border">Naive Treatment Contrast</td>
|
||
</tr>
|
||
<tr class="gt_col_headings even">
|
||
<th id="measure" class="gt_col_heading gt_columns_bottom_border gt_left" data-quarto-table-cell-role="th" scope="col">Measure</th>
|
||
<th id="value" class="gt_col_heading gt_columns_bottom_border gt_right" data-quarto-table-cell-role="th" scope="col">Value</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody class="gt_table_body">
|
||
<tr class="odd">
|
||
<td class="gt_row gt_left" headers="measure">Risk difference</td>
|
||
<td class="gt_row gt_right" headers="value">0.098</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td class="gt_row gt_left" headers="measure">Risk ratio</td>
|
||
<td class="gt_row gt_right" headers="value">1.377</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<p>The risk difference is an absolute difference in 28-day mortality risk.</p>
|
||
<p>The risk ratio is a relative comparison of 28-day mortality risk.</p>
|
||
</section>
|
||
<section id="check-confounding-by-severity" class="level2">
|
||
<h2 class="anchored" data-anchor-id="check-confounding-by-severity">Check Confounding By Severity</h2>
|
||
<div class="cell">
|
||
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb12"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a>eligible_data <span class="sc">|></span></span>
|
||
<span id="cb12-2"><a href="#cb12-2" aria-hidden="true" tabindex="-1"></a> <span class="fu">mutate</span>(</span>
|
||
<span id="cb12-3"><a href="#cb12-3" aria-hidden="true" tabindex="-1"></a> <span class="at">early_vasopressor =</span> <span class="fu">factor</span>(</span>
|
||
<span id="cb12-4"><a href="#cb12-4" aria-hidden="true" tabindex="-1"></a> early_vasopressor,</span>
|
||
<span id="cb12-5"><a href="#cb12-5" aria-hidden="true" tabindex="-1"></a> <span class="at">levels =</span> <span class="fu">c</span>(<span class="dv">0</span>, <span class="dv">1</span>),</span>
|
||
<span id="cb12-6"><a href="#cb12-6" aria-hidden="true" tabindex="-1"></a> <span class="at">labels =</span> <span class="fu">c</span>(<span class="st">"No early vasopressor"</span>, <span class="st">"Early vasopressor"</span>)</span>
|
||
<span id="cb12-7"><a href="#cb12-7" aria-hidden="true" tabindex="-1"></a> )</span>
|
||
<span id="cb12-8"><a href="#cb12-8" aria-hidden="true" tabindex="-1"></a> ) <span class="sc">|></span></span>
|
||
<span id="cb12-9"><a href="#cb12-9" aria-hidden="true" tabindex="-1"></a> <span class="fu">select</span>(early_vasopressor, age, sex, sofa_score, lactate, map, death_28d) <span class="sc">|></span></span>
|
||
<span id="cb12-10"><a href="#cb12-10" aria-hidden="true" tabindex="-1"></a> <span class="fu">tbl_summary</span>(</span>
|
||
<span id="cb12-11"><a href="#cb12-11" aria-hidden="true" tabindex="-1"></a> <span class="at">by =</span> early_vasopressor,</span>
|
||
<span id="cb12-12"><a href="#cb12-12" aria-hidden="true" tabindex="-1"></a> <span class="at">statistic =</span> <span class="fu">list</span>(</span>
|
||
<span id="cb12-13"><a href="#cb12-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">all_continuous</span>() <span class="sc">~</span> <span class="st">"{mean} ({sd})"</span>,</span>
|
||
<span id="cb12-14"><a href="#cb12-14" aria-hidden="true" tabindex="-1"></a> <span class="fu">all_categorical</span>() <span class="sc">~</span> <span class="st">"{n} ({p}%)"</span></span>
|
||
<span id="cb12-15"><a href="#cb12-15" aria-hidden="true" tabindex="-1"></a> ),</span>
|
||
<span id="cb12-16"><a href="#cb12-16" aria-hidden="true" tabindex="-1"></a> <span class="at">missing =</span> <span class="st">"no"</span></span>
|
||
<span id="cb12-17"><a href="#cb12-17" aria-hidden="true" tabindex="-1"></a> ) <span class="sc">|></span></span>
|
||
<span id="cb12-18"><a href="#cb12-18" aria-hidden="true" tabindex="-1"></a> <span class="fu">add_overall</span>()</span></code></pre></div><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></div>
|
||
<div class="cell-output-display">
|
||
<div id="grcgexolrk" style="padding-left:0px;padding-right:0px;padding-top:10px;padding-bottom:10px;overflow-x:auto;overflow-y:auto;width:auto;height:auto;">
|
||
<style>#grcgexolrk table {
|
||
font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
|
||
-webkit-font-smoothing: antialiased;
|
||
-moz-osx-font-smoothing: grayscale;
|
||
}
|
||
|
||
#grcgexolrk thead, #grcgexolrk tbody, #grcgexolrk tfoot, #grcgexolrk tr, #grcgexolrk td, #grcgexolrk th {
|
||
border-style: none;
|
||
}
|
||
|
||
#grcgexolrk p {
|
||
margin: 0;
|
||
padding: 0;
|
||
}
|
||
|
||
#grcgexolrk .gt_table {
|
||
display: table;
|
||
border-collapse: collapse;
|
||
line-height: normal;
|
||
margin-left: auto;
|
||
margin-right: auto;
|
||
color: #333333;
|
||
font-size: 16px;
|
||
font-weight: normal;
|
||
font-style: normal;
|
||
background-color: #FFFFFF;
|
||
width: auto;
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #A8A8A8;
|
||
border-right-style: none;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #A8A8A8;
|
||
border-left-style: none;
|
||
border-left-width: 2px;
|
||
border-left-color: #D3D3D3;
|
||
}
|
||
|
||
#grcgexolrk .gt_caption {
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
}
|
||
|
||
#grcgexolrk .gt_title {
|
||
color: #333333;
|
||
font-size: 125%;
|
||
font-weight: initial;
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-bottom-color: #FFFFFF;
|
||
border-bottom-width: 0;
|
||
}
|
||
|
||
#grcgexolrk .gt_subtitle {
|
||
color: #333333;
|
||
font-size: 85%;
|
||
font-weight: initial;
|
||
padding-top: 3px;
|
||
padding-bottom: 5px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-top-color: #FFFFFF;
|
||
border-top-width: 0;
|
||
}
|
||
|
||
#grcgexolrk .gt_heading {
|
||
background-color: #FFFFFF;
|
||
text-align: center;
|
||
border-bottom-color: #FFFFFF;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
}
|
||
|
||
#grcgexolrk .gt_bottom_border {
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
}
|
||
|
||
#grcgexolrk .gt_col_headings {
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
}
|
||
|
||
#grcgexolrk .gt_col_heading {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: normal;
|
||
text-transform: inherit;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
vertical-align: bottom;
|
||
padding-top: 5px;
|
||
padding-bottom: 6px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
#grcgexolrk .gt_column_spanner_outer {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: normal;
|
||
text-transform: inherit;
|
||
padding-top: 0;
|
||
padding-bottom: 0;
|
||
padding-left: 4px;
|
||
padding-right: 4px;
|
||
}
|
||
|
||
#grcgexolrk .gt_column_spanner_outer:first-child {
|
||
padding-left: 0;
|
||
}
|
||
|
||
#grcgexolrk .gt_column_spanner_outer:last-child {
|
||
padding-right: 0;
|
||
}
|
||
|
||
#grcgexolrk .gt_column_spanner {
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
vertical-align: bottom;
|
||
padding-top: 5px;
|
||
padding-bottom: 5px;
|
||
overflow-x: hidden;
|
||
display: inline-block;
|
||
width: 100%;
|
||
}
|
||
|
||
#grcgexolrk .gt_spanner_row {
|
||
border-bottom-style: hidden;
|
||
}
|
||
|
||
#grcgexolrk .gt_group_heading {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: initial;
|
||
text-transform: inherit;
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
vertical-align: middle;
|
||
text-align: left;
|
||
}
|
||
|
||
#grcgexolrk .gt_empty_group_heading {
|
||
padding: 0.5px;
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: initial;
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
vertical-align: middle;
|
||
}
|
||
|
||
#grcgexolrk .gt_from_md > :first-child {
|
||
margin-top: 0;
|
||
}
|
||
|
||
#grcgexolrk .gt_from_md > :last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
#grcgexolrk .gt_row {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
margin: 10px;
|
||
border-top-style: solid;
|
||
border-top-width: 1px;
|
||
border-top-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 1px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 1px;
|
||
border-right-color: #D3D3D3;
|
||
vertical-align: middle;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
#grcgexolrk .gt_stub {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: initial;
|
||
text-transform: inherit;
|
||
border-right-style: solid;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#grcgexolrk .gt_stub_row_group {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
font-size: 100%;
|
||
font-weight: initial;
|
||
text-transform: inherit;
|
||
border-right-style: solid;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
vertical-align: top;
|
||
}
|
||
|
||
#grcgexolrk .gt_row_group_first td {
|
||
border-top-width: 2px;
|
||
}
|
||
|
||
#grcgexolrk .gt_row_group_first th {
|
||
border-top-width: 2px;
|
||
}
|
||
|
||
#grcgexolrk .gt_summary_row {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
text-transform: inherit;
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#grcgexolrk .gt_first_summary_row {
|
||
border-top-style: solid;
|
||
border-top-color: #D3D3D3;
|
||
}
|
||
|
||
#grcgexolrk .gt_first_summary_row.thick {
|
||
border-top-width: 2px;
|
||
}
|
||
|
||
#grcgexolrk .gt_last_summary_row {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
}
|
||
|
||
#grcgexolrk .gt_grand_summary_row {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
text-transform: inherit;
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#grcgexolrk .gt_first_grand_summary_row {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-top-style: double;
|
||
border-top-width: 6px;
|
||
border-top-color: #D3D3D3;
|
||
}
|
||
|
||
#grcgexolrk .gt_last_grand_summary_row_top {
|
||
padding-top: 8px;
|
||
padding-bottom: 8px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
border-bottom-style: double;
|
||
border-bottom-width: 6px;
|
||
border-bottom-color: #D3D3D3;
|
||
}
|
||
|
||
#grcgexolrk .gt_striped {
|
||
background-color: rgba(128, 128, 128, 0.05);
|
||
}
|
||
|
||
#grcgexolrk .gt_table_body {
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
border-top-color: #D3D3D3;
|
||
border-bottom-style: solid;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
}
|
||
|
||
#grcgexolrk .gt_footnotes {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
border-bottom-style: none;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 2px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
}
|
||
|
||
#grcgexolrk .gt_footnote {
|
||
margin: 0px;
|
||
font-size: 90%;
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#grcgexolrk .gt_sourcenotes {
|
||
color: #333333;
|
||
background-color: #FFFFFF;
|
||
border-bottom-style: none;
|
||
border-bottom-width: 2px;
|
||
border-bottom-color: #D3D3D3;
|
||
border-left-style: none;
|
||
border-left-width: 2px;
|
||
border-left-color: #D3D3D3;
|
||
border-right-style: none;
|
||
border-right-width: 2px;
|
||
border-right-color: #D3D3D3;
|
||
}
|
||
|
||
#grcgexolrk .gt_sourcenote {
|
||
font-size: 90%;
|
||
padding-top: 4px;
|
||
padding-bottom: 4px;
|
||
padding-left: 5px;
|
||
padding-right: 5px;
|
||
}
|
||
|
||
#grcgexolrk .gt_left {
|
||
text-align: left;
|
||
}
|
||
|
||
#grcgexolrk .gt_center {
|
||
text-align: center;
|
||
}
|
||
|
||
#grcgexolrk .gt_right {
|
||
text-align: right;
|
||
font-variant-numeric: tabular-nums;
|
||
}
|
||
|
||
#grcgexolrk .gt_font_normal {
|
||
font-weight: normal;
|
||
}
|
||
|
||
#grcgexolrk .gt_font_bold {
|
||
font-weight: bold;
|
||
}
|
||
|
||
#grcgexolrk .gt_font_italic {
|
||
font-style: italic;
|
||
}
|
||
|
||
#grcgexolrk .gt_super {
|
||
font-size: 65%;
|
||
}
|
||
|
||
#grcgexolrk .gt_footnote_marks {
|
||
font-size: 75%;
|
||
vertical-align: 0.4em;
|
||
position: initial;
|
||
}
|
||
|
||
#grcgexolrk .gt_asterisk {
|
||
font-size: 100%;
|
||
vertical-align: 0;
|
||
}
|
||
|
||
#grcgexolrk .gt_indent_1 {
|
||
text-indent: 5px;
|
||
}
|
||
|
||
#grcgexolrk .gt_indent_2 {
|
||
text-indent: 10px;
|
||
}
|
||
|
||
#grcgexolrk .gt_indent_3 {
|
||
text-indent: 15px;
|
||
}
|
||
|
||
#grcgexolrk .gt_indent_4 {
|
||
text-indent: 20px;
|
||
}
|
||
|
||
#grcgexolrk .gt_indent_5 {
|
||
text-indent: 25px;
|
||
}
|
||
|
||
#grcgexolrk .katex-display {
|
||
display: inline-flex !important;
|
||
margin-bottom: 0.75em !important;
|
||
}
|
||
|
||
#grcgexolrk div.Reactable > div.rt-table > div.rt-thead > div.rt-tr.rt-tr-group-header > div.rt-th-group:after {
|
||
height: 0px !important;
|
||
}
|
||
</style>
|
||
|
||
<table class="gt_table caption-top table table-sm table-striped small" data-quarto-bootstrap="false">
|
||
<colgroup>
|
||
<col style="width: 25%">
|
||
<col style="width: 25%">
|
||
<col style="width: 25%">
|
||
<col style="width: 25%">
|
||
</colgroup>
|
||
<thead>
|
||
<tr class="gt_col_headings header">
|
||
<th id="label" class="gt_col_heading gt_columns_bottom_border gt_left" data-quarto-table-cell-role="th" scope="col"><strong>Characteristic</strong></th>
|
||
<th id="stat_0" class="gt_col_heading gt_columns_bottom_border gt_center" data-quarto-table-cell-role="th" scope="col"><strong>Overall</strong><br>
|
||
N = 416<span class="gt_footnote_marks" style="white-space:nowrap;font-style:italic;font-weight:normal;line-height:0;"><sup>1</sup></span></th>
|
||
<th id="stat_1" class="gt_col_heading gt_columns_bottom_border gt_center" data-quarto-table-cell-role="th" scope="col"><strong>No early vasopressor</strong><br>
|
||
N = 181<span class="gt_footnote_marks" style="white-space:nowrap;font-style:italic;font-weight:normal;line-height:0;"><sup>1</sup></span></th>
|
||
<th id="stat_2" class="gt_col_heading gt_columns_bottom_border gt_center" data-quarto-table-cell-role="th" scope="col"><strong>Early vasopressor</strong><br>
|
||
N = 235<span class="gt_footnote_marks" style="white-space:nowrap;font-style:italic;font-weight:normal;line-height:0;"><sup>1</sup></span></th>
|
||
</tr>
|
||
</thead>
|
||
<tbody class="gt_table_body">
|
||
<tr class="odd">
|
||
<td class="gt_row gt_left" headers="label">age</td>
|
||
<td class="gt_row gt_center" headers="stat_0">66 (14)</td>
|
||
<td class="gt_row gt_center" headers="stat_1">63 (14)</td>
|
||
<td class="gt_row gt_center" headers="stat_2">67 (14)</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td class="gt_row gt_left" headers="label">sex</td>
|
||
<td class="gt_row gt_center" headers="stat_0"><br>
|
||
</td>
|
||
<td class="gt_row gt_center" headers="stat_1"><br>
|
||
</td>
|
||
<td class="gt_row gt_center" headers="stat_2"><br>
|
||
</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td class="gt_row gt_left" headers="label"> female</td>
|
||
<td class="gt_row gt_center" headers="stat_0">201 (48%)</td>
|
||
<td class="gt_row gt_center" headers="stat_1">91 (50%)</td>
|
||
<td class="gt_row gt_center" headers="stat_2">110 (47%)</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td class="gt_row gt_left" headers="label"> male</td>
|
||
<td class="gt_row gt_center" headers="stat_0">215 (52%)</td>
|
||
<td class="gt_row gt_center" headers="stat_1">90 (50%)</td>
|
||
<td class="gt_row gt_center" headers="stat_2">125 (53%)</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td class="gt_row gt_left" headers="label">sofa_score</td>
|
||
<td class="gt_row gt_center" headers="stat_0">7.00 (2.60)</td>
|
||
<td class="gt_row gt_center" headers="stat_1">6.29 (2.50)</td>
|
||
<td class="gt_row gt_center" headers="stat_2">7.55 (2.55)</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td class="gt_row gt_left" headers="label">lactate</td>
|
||
<td class="gt_row gt_center" headers="stat_0">3.98 (1.86)</td>
|
||
<td class="gt_row gt_center" headers="stat_1">3.68 (1.60)</td>
|
||
<td class="gt_row gt_center" headers="stat_2">4.22 (2.01)</td>
|
||
</tr>
|
||
<tr class="odd">
|
||
<td class="gt_row gt_left" headers="label">map</td>
|
||
<td class="gt_row gt_center" headers="stat_0">55.4 (6.3)</td>
|
||
<td class="gt_row gt_center" headers="stat_1">56.4 (6.0)</td>
|
||
<td class="gt_row gt_center" headers="stat_2">54.6 (6.4)</td>
|
||
</tr>
|
||
<tr class="even">
|
||
<td class="gt_row gt_left" headers="label">death_28d</td>
|
||
<td class="gt_row gt_center" headers="stat_0">131 (31%)</td>
|
||
<td class="gt_row gt_center" headers="stat_1">47 (26%)</td>
|
||
<td class="gt_row gt_center" headers="stat_2">84 (36%)</td>
|
||
</tr>
|
||
</tbody><tfoot>
|
||
<tr class="gt_footnotes odd">
|
||
<td colspan="4" class="gt_footnote"><span class="gt_footnote_marks" style="white-space:nowrap;font-style:italic;font-weight:normal;line-height:0;"><sup>1</sup></span> Mean (SD); n (%)</td>
|
||
</tr>
|
||
</tfoot>
|
||
|
||
</table>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<p>This compares baseline severity between the two treatment groups.</p>
|
||
<p>If early vasopressor patients have higher SOFA scores, higher lactate, or lower MAP, then the naive comparison mixes the treatment effect with baseline severity differences.</p>
|
||
<p>That problem is one reason we need target trial emulation methods rather than a simple treated-versus-untreated comparison.</p>
|
||
</section>
|
||
<section id="next-step" class="level2">
|
||
<h2 class="anchored" data-anchor-id="next-step">Next Step</h2>
|
||
<p>The next lesson should walk through <code>R/simulate_icu_cohort.R</code> line by line.</p>
|
||
<p>After that, we can use <code>scripts/02_naive_analysis_base_r.R</code> to compute the first naive association and then discuss why it is not yet a causal estimate.</p>
|
||
</section>
|
||
|
||
</main>
|
||
<!-- /main column -->
|
||
<script id="quarto-html-after-body" type="application/javascript">
|
||
window.document.addEventListener("DOMContentLoaded", function (event) {
|
||
const icon = "";
|
||
const anchorJS = new window.AnchorJS();
|
||
anchorJS.options = {
|
||
placement: 'right',
|
||
icon: icon
|
||
};
|
||
anchorJS.add('.anchored');
|
||
const isCodeAnnotation = (el) => {
|
||
for (const clz of el.classList) {
|
||
if (clz.startsWith('code-annotation-')) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
const onCopySuccess = function(e) {
|
||
// button target
|
||
const button = e.trigger;
|
||
// don't keep focus
|
||
button.blur();
|
||
// flash "checked"
|
||
button.classList.add('code-copy-button-checked');
|
||
var currentTitle = button.getAttribute("title");
|
||
button.setAttribute("title", "Copied!");
|
||
let tooltip;
|
||
if (window.bootstrap) {
|
||
button.setAttribute("data-bs-toggle", "tooltip");
|
||
button.setAttribute("data-bs-placement", "left");
|
||
button.setAttribute("data-bs-title", "Copied!");
|
||
tooltip = new bootstrap.Tooltip(button,
|
||
{ trigger: "manual",
|
||
customClass: "code-copy-button-tooltip",
|
||
offset: [0, -8]});
|
||
tooltip.show();
|
||
}
|
||
setTimeout(function() {
|
||
if (tooltip) {
|
||
tooltip.hide();
|
||
button.removeAttribute("data-bs-title");
|
||
button.removeAttribute("data-bs-toggle");
|
||
button.removeAttribute("data-bs-placement");
|
||
}
|
||
button.setAttribute("title", currentTitle);
|
||
button.classList.remove('code-copy-button-checked');
|
||
}, 1000);
|
||
// clear code selection
|
||
e.clearSelection();
|
||
}
|
||
const getTextToCopy = function(trigger) {
|
||
const outerScaffold = trigger.parentElement.cloneNode(true);
|
||
const codeEl = outerScaffold.querySelector('code');
|
||
for (const childEl of codeEl.children) {
|
||
if (isCodeAnnotation(childEl)) {
|
||
childEl.remove();
|
||
}
|
||
}
|
||
return codeEl.innerText;
|
||
}
|
||
const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
|
||
text: getTextToCopy
|
||
});
|
||
clipboard.on('success', onCopySuccess);
|
||
if (window.document.getElementById('quarto-embedded-source-code-modal')) {
|
||
const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
|
||
text: getTextToCopy,
|
||
container: window.document.getElementById('quarto-embedded-source-code-modal')
|
||
});
|
||
clipboardModal.on('success', onCopySuccess);
|
||
}
|
||
var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
|
||
var mailtoRegex = new RegExp(/^mailto:/);
|
||
var filterRegex = new RegExp('/' + window.location.host + '/');
|
||
var isInternal = (href) => {
|
||
return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
|
||
}
|
||
// Inspect non-navigation links and adorn them if external
|
||
var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
|
||
for (var i=0; i<links.length; i++) {
|
||
const link = links[i];
|
||
if (!isInternal(link.href)) {
|
||
// undo the damage that might have been done by quarto-nav.js in the case of
|
||
// links that we want to consider external
|
||
if (link.dataset.originalHref !== undefined) {
|
||
link.href = link.dataset.originalHref;
|
||
}
|
||
}
|
||
}
|
||
function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
|
||
const config = {
|
||
allowHTML: true,
|
||
maxWidth: 500,
|
||
delay: 100,
|
||
arrow: false,
|
||
appendTo: function(el) {
|
||
return el.parentElement;
|
||
},
|
||
interactive: true,
|
||
interactiveBorder: 10,
|
||
theme: 'quarto',
|
||
placement: 'bottom-start',
|
||
};
|
||
if (contentFn) {
|
||
config.content = contentFn;
|
||
}
|
||
if (onTriggerFn) {
|
||
config.onTrigger = onTriggerFn;
|
||
}
|
||
if (onUntriggerFn) {
|
||
config.onUntrigger = onUntriggerFn;
|
||
}
|
||
window.tippy(el, config);
|
||
}
|
||
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
|
||
for (var i=0; i<noterefs.length; i++) {
|
||
const ref = noterefs[i];
|
||
tippyHover(ref, function() {
|
||
// use id or data attribute instead here
|
||
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
|
||
try { href = new URL(href).hash; } catch {}
|
||
const id = href.replace(/^#\/?/, "");
|
||
const note = window.document.getElementById(id);
|
||
if (note) {
|
||
return note.innerHTML;
|
||
} else {
|
||
return "";
|
||
}
|
||
});
|
||
}
|
||
const xrefs = window.document.querySelectorAll('a.quarto-xref');
|
||
const processXRef = (id, note) => {
|
||
// Strip column container classes
|
||
const stripColumnClz = (el) => {
|
||
el.classList.remove("page-full", "page-columns");
|
||
if (el.children) {
|
||
for (const child of el.children) {
|
||
stripColumnClz(child);
|
||
}
|
||
}
|
||
}
|
||
stripColumnClz(note)
|
||
if (id === null || id.startsWith('sec-')) {
|
||
// Special case sections, only their first couple elements
|
||
const container = document.createElement("div");
|
||
if (note.children && note.children.length > 2) {
|
||
container.appendChild(note.children[0].cloneNode(true));
|
||
for (let i = 1; i < note.children.length; i++) {
|
||
const child = note.children[i];
|
||
if (child.tagName === "P" && child.innerText === "") {
|
||
continue;
|
||
} else {
|
||
container.appendChild(child.cloneNode(true));
|
||
break;
|
||
}
|
||
}
|
||
if (window.Quarto?.typesetMath) {
|
||
window.Quarto.typesetMath(container);
|
||
}
|
||
return container.innerHTML
|
||
} else {
|
||
if (window.Quarto?.typesetMath) {
|
||
window.Quarto.typesetMath(note);
|
||
}
|
||
return note.innerHTML;
|
||
}
|
||
} else {
|
||
// Remove any anchor links if they are present
|
||
const anchorLink = note.querySelector('a.anchorjs-link');
|
||
if (anchorLink) {
|
||
anchorLink.remove();
|
||
}
|
||
if (window.Quarto?.typesetMath) {
|
||
window.Quarto.typesetMath(note);
|
||
}
|
||
if (note.classList.contains("callout")) {
|
||
return note.outerHTML;
|
||
} else {
|
||
return note.innerHTML;
|
||
}
|
||
}
|
||
}
|
||
for (var i=0; i<xrefs.length; i++) {
|
||
const xref = xrefs[i];
|
||
tippyHover(xref, undefined, function(instance) {
|
||
instance.disable();
|
||
let url = xref.getAttribute('href');
|
||
let hash = undefined;
|
||
if (url.startsWith('#')) {
|
||
hash = url;
|
||
} else {
|
||
try { hash = new URL(url).hash; } catch {}
|
||
}
|
||
if (hash) {
|
||
const id = hash.replace(/^#\/?/, "");
|
||
const note = window.document.getElementById(id);
|
||
if (note !== null) {
|
||
try {
|
||
const html = processXRef(id, note.cloneNode(true));
|
||
instance.setContent(html);
|
||
} finally {
|
||
instance.enable();
|
||
instance.show();
|
||
}
|
||
} else {
|
||
// See if we can fetch this
|
||
fetch(url.split('#')[0])
|
||
.then(res => res.text())
|
||
.then(html => {
|
||
const parser = new DOMParser();
|
||
const htmlDoc = parser.parseFromString(html, "text/html");
|
||
const note = htmlDoc.getElementById(id);
|
||
if (note !== null) {
|
||
const html = processXRef(id, note);
|
||
instance.setContent(html);
|
||
}
|
||
}).finally(() => {
|
||
instance.enable();
|
||
instance.show();
|
||
});
|
||
}
|
||
} else {
|
||
// See if we can fetch a full url (with no hash to target)
|
||
// This is a special case and we should probably do some content thinning / targeting
|
||
fetch(url)
|
||
.then(res => res.text())
|
||
.then(html => {
|
||
const parser = new DOMParser();
|
||
const htmlDoc = parser.parseFromString(html, "text/html");
|
||
const note = htmlDoc.querySelector('main.content');
|
||
if (note !== null) {
|
||
// This should only happen for chapter cross references
|
||
// (since there is no id in the URL)
|
||
// remove the first header
|
||
if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
|
||
note.children[0].remove();
|
||
}
|
||
const html = processXRef(null, note);
|
||
instance.setContent(html);
|
||
}
|
||
}).finally(() => {
|
||
instance.enable();
|
||
instance.show();
|
||
});
|
||
}
|
||
}, function(instance) {
|
||
});
|
||
}
|
||
let selectedAnnoteEl;
|
||
const selectorForAnnotation = ( cell, annotation) => {
|
||
let cellAttr = 'data-code-cell="' + cell + '"';
|
||
let lineAttr = 'data-code-annotation="' + annotation + '"';
|
||
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
|
||
return selector;
|
||
}
|
||
const selectCodeLines = (annoteEl) => {
|
||
const doc = window.document;
|
||
const targetCell = annoteEl.getAttribute("data-target-cell");
|
||
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
|
||
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
|
||
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
|
||
const lineIds = lines.map((line) => {
|
||
return targetCell + "-" + line;
|
||
})
|
||
let top = null;
|
||
let height = null;
|
||
let parent = null;
|
||
if (lineIds.length > 0) {
|
||
//compute the position of the single el (top and bottom and make a div)
|
||
const el = window.document.getElementById(lineIds[0]);
|
||
top = el.offsetTop;
|
||
height = el.offsetHeight;
|
||
parent = el.parentElement.parentElement;
|
||
if (lineIds.length > 1) {
|
||
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
|
||
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
|
||
height = bottom - top;
|
||
}
|
||
if (top !== null && height !== null && parent !== null) {
|
||
// cook up a div (if necessary) and position it
|
||
let div = window.document.getElementById("code-annotation-line-highlight");
|
||
if (div === null) {
|
||
div = window.document.createElement("div");
|
||
div.setAttribute("id", "code-annotation-line-highlight");
|
||
div.style.position = 'absolute';
|
||
parent.appendChild(div);
|
||
}
|
||
div.style.top = top - 2 + "px";
|
||
div.style.height = height + 4 + "px";
|
||
div.style.left = 0;
|
||
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
|
||
if (gutterDiv === null) {
|
||
gutterDiv = window.document.createElement("div");
|
||
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
|
||
gutterDiv.style.position = 'absolute';
|
||
const codeCell = window.document.getElementById(targetCell);
|
||
const gutter = codeCell.querySelector('.code-annotation-gutter');
|
||
gutter.appendChild(gutterDiv);
|
||
}
|
||
gutterDiv.style.top = top - 2 + "px";
|
||
gutterDiv.style.height = height + 4 + "px";
|
||
}
|
||
selectedAnnoteEl = annoteEl;
|
||
}
|
||
};
|
||
const unselectCodeLines = () => {
|
||
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
|
||
elementsIds.forEach((elId) => {
|
||
const div = window.document.getElementById(elId);
|
||
if (div) {
|
||
div.remove();
|
||
}
|
||
});
|
||
selectedAnnoteEl = undefined;
|
||
};
|
||
// Handle positioning of the toggle
|
||
window.addEventListener(
|
||
"resize",
|
||
throttle(() => {
|
||
elRect = undefined;
|
||
if (selectedAnnoteEl) {
|
||
selectCodeLines(selectedAnnoteEl);
|
||
}
|
||
}, 10)
|
||
);
|
||
function throttle(fn, ms) {
|
||
let throttle = false;
|
||
let timer;
|
||
return (...args) => {
|
||
if(!throttle) { // first call gets through
|
||
fn.apply(this, args);
|
||
throttle = true;
|
||
} else { // all the others get throttled
|
||
if(timer) clearTimeout(timer); // cancel #2
|
||
timer = setTimeout(() => {
|
||
fn.apply(this, args);
|
||
timer = throttle = false;
|
||
}, ms);
|
||
}
|
||
};
|
||
}
|
||
// Attach click handler to the DT
|
||
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
|
||
for (const annoteDlNode of annoteDls) {
|
||
annoteDlNode.addEventListener('click', (event) => {
|
||
const clickedEl = event.target;
|
||
if (clickedEl !== selectedAnnoteEl) {
|
||
unselectCodeLines();
|
||
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
|
||
if (activeEl) {
|
||
activeEl.classList.remove('code-annotation-active');
|
||
}
|
||
selectCodeLines(clickedEl);
|
||
clickedEl.classList.add('code-annotation-active');
|
||
} else {
|
||
// Unselect the line
|
||
unselectCodeLines();
|
||
clickedEl.classList.remove('code-annotation-active');
|
||
}
|
||
});
|
||
}
|
||
const findCites = (el) => {
|
||
const parentEl = el.parentElement;
|
||
if (parentEl) {
|
||
const cites = parentEl.dataset.cites;
|
||
if (cites) {
|
||
return {
|
||
el,
|
||
cites: cites.split(' ')
|
||
};
|
||
} else {
|
||
return findCites(el.parentElement)
|
||
}
|
||
} else {
|
||
return undefined;
|
||
}
|
||
};
|
||
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
|
||
for (var i=0; i<bibliorefs.length; i++) {
|
||
const ref = bibliorefs[i];
|
||
const citeInfo = findCites(ref);
|
||
if (citeInfo) {
|
||
tippyHover(citeInfo.el, function() {
|
||
var popup = window.document.createElement('div');
|
||
citeInfo.cites.forEach(function(cite) {
|
||
var citeDiv = window.document.createElement('div');
|
||
citeDiv.classList.add('hanging-indent');
|
||
citeDiv.classList.add('csl-entry');
|
||
var biblioDiv = window.document.getElementById('ref-' + cite);
|
||
if (biblioDiv) {
|
||
citeDiv.innerHTML = biblioDiv.innerHTML;
|
||
}
|
||
popup.appendChild(citeDiv);
|
||
});
|
||
return popup.innerHTML;
|
||
});
|
||
}
|
||
}
|
||
});
|
||
</script>
|
||
</div> <!-- /content -->
|
||
|
||
|
||
|
||
|
||
</body></html> |