Skip to contents

Fits multivariable regression models for binary, count, or continuous outcomes and returns a publication-ready summary table using `gtsummary`. Depending on the specified `approach`, the function estimates adjusted Odds Ratios (OR), Risk Ratios (RR), Incidence Rate Ratios (IRR), or Beta coefficients.

Usage

multi_reg(data, outcome, exposures, approach = "logit")

Arguments

data

A data frame containing the analysis variables.

outcome

The name of the outcome variable. Must be a character string.

exposures

A character vector of predictor variables to include.

approach

Modeling approach to use. One of: - `"logit"` for logistic regression (OR), - `"log-binomial"` for log-binomial regression (RR), - `"poisson"` for Poisson regression (IRR), - `"robpoisson"` for robust Poisson regression (RR), - `"linear"` for linear regression (Beta coefficients), - `"negbin"` for negative binomial regression (IRR).

Value

An object of class `multi_reg`, extending `gtsummary::tbl_regression`. Additional components can be accessed using:

  • x$models: List of fitted model objects.

  • x$model_summaries: List of summary outputs.

  • x$reg_check: Regression diagnostics (only for linear models).

  • x$table: Returns the main regression table.

Accessors

$models

List of fitted model objects.

$model_summaries

A tibble of tidy regression summaries for each model.

See also

[uni_reg()], [plot_reg()], [plot_reg_combine()]

Examples

if (requireNamespace("mlbench", quietly = TRUE)) {
  data(PimaIndiansDiabetes2, package = "mlbench")
  pima <- dplyr::mutate(PimaIndiansDiabetes2,
  diabetes = ifelse(diabetes == "pos", 1, 0))
  model <- multi_reg(
    data = pima,
    outcome = "diabetes",
    exposures = c("age", "mass"),
    approach = "logit"
  )
 print(model)
}
#> <div id="aiqzbmhjzp" style="padding-left:0px;padding-right:0px;padding-top:10px;padding-bottom:10px;overflow-x:auto;overflow-y:auto;width:auto;height:auto;">
#>   <style>#aiqzbmhjzp 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;
#> }
#> 
#> #aiqzbmhjzp thead, #aiqzbmhjzp tbody, #aiqzbmhjzp tfoot, #aiqzbmhjzp tr, #aiqzbmhjzp td, #aiqzbmhjzp th {
#>   border-style: none;
#> }
#> 
#> #aiqzbmhjzp p {
#>   margin: 0;
#>   padding: 0;
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .gt_caption {
#>   padding-top: 4px;
#>   padding-bottom: 4px;
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .gt_bottom_border {
#>   border-bottom-style: solid;
#>   border-bottom-width: 2px;
#>   border-bottom-color: #D3D3D3;
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .gt_column_spanner_outer:first-child {
#>   padding-left: 0;
#> }
#> 
#> #aiqzbmhjzp .gt_column_spanner_outer:last-child {
#>   padding-right: 0;
#> }
#> 
#> #aiqzbmhjzp .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%;
#> }
#> 
#> #aiqzbmhjzp .gt_spanner_row {
#>   border-bottom-style: hidden;
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .gt_from_md > :first-child {
#>   margin-top: 0;
#> }
#> 
#> #aiqzbmhjzp .gt_from_md > :last-child {
#>   margin-bottom: 0;
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .gt_row_group_first td {
#>   border-top-width: 2px;
#> }
#> 
#> #aiqzbmhjzp .gt_row_group_first th {
#>   border-top-width: 2px;
#> }
#> 
#> #aiqzbmhjzp .gt_summary_row {
#>   color: #333333;
#>   background-color: #FFFFFF;
#>   text-transform: inherit;
#>   padding-top: 8px;
#>   padding-bottom: 8px;
#>   padding-left: 5px;
#>   padding-right: 5px;
#> }
#> 
#> #aiqzbmhjzp .gt_first_summary_row {
#>   border-top-style: solid;
#>   border-top-color: #D3D3D3;
#> }
#> 
#> #aiqzbmhjzp .gt_first_summary_row.thick {
#>   border-top-width: 2px;
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .gt_grand_summary_row {
#>   color: #333333;
#>   background-color: #FFFFFF;
#>   text-transform: inherit;
#>   padding-top: 8px;
#>   padding-bottom: 8px;
#>   padding-left: 5px;
#>   padding-right: 5px;
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .gt_striped {
#>   background-color: rgba(128, 128, 128, 0.05);
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .gt_footnote {
#>   margin: 0px;
#>   font-size: 90%;
#>   padding-top: 4px;
#>   padding-bottom: 4px;
#>   padding-left: 5px;
#>   padding-right: 5px;
#> }
#> 
#> #aiqzbmhjzp .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;
#> }
#> 
#> #aiqzbmhjzp .gt_sourcenote {
#>   font-size: 90%;
#>   padding-top: 4px;
#>   padding-bottom: 4px;
#>   padding-left: 5px;
#>   padding-right: 5px;
#> }
#> 
#> #aiqzbmhjzp .gt_left {
#>   text-align: left;
#> }
#> 
#> #aiqzbmhjzp .gt_center {
#>   text-align: center;
#> }
#> 
#> #aiqzbmhjzp .gt_right {
#>   text-align: right;
#>   font-variant-numeric: tabular-nums;
#> }
#> 
#> #aiqzbmhjzp .gt_font_normal {
#>   font-weight: normal;
#> }
#> 
#> #aiqzbmhjzp .gt_font_bold {
#>   font-weight: bold;
#> }
#> 
#> #aiqzbmhjzp .gt_font_italic {
#>   font-style: italic;
#> }
#> 
#> #aiqzbmhjzp .gt_super {
#>   font-size: 65%;
#> }
#> 
#> #aiqzbmhjzp .gt_footnote_marks {
#>   font-size: 75%;
#>   vertical-align: 0.4em;
#>   position: initial;
#> }
#> 
#> #aiqzbmhjzp .gt_asterisk {
#>   font-size: 100%;
#>   vertical-align: 0;
#> }
#> 
#> #aiqzbmhjzp .gt_indent_1 {
#>   text-indent: 5px;
#> }
#> 
#> #aiqzbmhjzp .gt_indent_2 {
#>   text-indent: 10px;
#> }
#> 
#> #aiqzbmhjzp .gt_indent_3 {
#>   text-indent: 15px;
#> }
#> 
#> #aiqzbmhjzp .gt_indent_4 {
#>   text-indent: 20px;
#> }
#> 
#> #aiqzbmhjzp .gt_indent_5 {
#>   text-indent: 25px;
#> }
#> 
#> #aiqzbmhjzp .katex-display {
#>   display: inline-flex !important;
#>   margin-bottom: 0.75em !important;
#> }
#> 
#> #aiqzbmhjzp 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" data-quarto-disable-processing="false" data-quarto-bootstrap="false">
#>   <thead>
#>     <tr class="gt_col_headings">
#>       <th class="gt_col_heading gt_columns_bottom_border gt_left" rowspan="1" colspan="1" scope="col" id="label"><span class='gt_from_md'><strong>Characteristic</strong></span></th>
#>       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="estimate"><span class='gt_from_md'><strong>Adjusted OR</strong></span></th>
#>       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="conf.low"><span class='gt_from_md'><strong>95% CI</strong></span></th>
#>       <th class="gt_col_heading gt_columns_bottom_border gt_center" rowspan="1" colspan="1" scope="col" id="p.value"><span class='gt_from_md'><strong>p-value</strong></span></th>
#>     </tr>
#>   </thead>
#>   <tbody class="gt_table_body">
#>     <tr><td headers="label" class="gt_row gt_left">age</td>
#> <td headers="estimate" class="gt_row gt_center">1.05</td>
#> <td headers="conf.low" class="gt_row gt_center">1.03, 1.06</td>
#> <td headers="p.value" class="gt_row gt_center"><0.001</td></tr>
#>     <tr><td headers="label" class="gt_row gt_left">mass</td>
#> <td headers="estimate" class="gt_row gt_center">1.11</td>
#> <td headers="conf.low" class="gt_row gt_center">1.09, 1.14</td>
#> <td headers="p.value" class="gt_row gt_center"><0.001</td></tr>
#>   </tbody>
#>   <tfoot class="gt_sourcenotes">
#>     <tr>
#>       <td class="gt_sourcenote" colspan="4"><span class='gt_from_md'>Abbreviations: CI = Confidence Interval, OR = Odds Ratio</span></td>
#>     </tr>
#>     <tr>
#>       <td class="gt_sourcenote" colspan="4"><span class='gt_from_md'>N = 757 complete observations included in the multivariate model</span></td>
#>     </tr>
#>   </tfoot>
#>   
#> </table>
#> </div>