6 Choosing Between Alternative Models

Non-linearity illustrations

Prepare GUSTO data

Some logistic regression fits with linear, square, rcs, linear spline terms

Code
# Import gusto; publicly available
gusto <- read.csv("data/gusto_age.csv")[-1]
Fmort <- as.data.frame(read.csv("data/Fmort.csv"))[-1]
Fmort$age10 <- Fmort$age / 10
Fmort$age102 <- Fmort$age10^2

Anova results for the different fits

We note minor differences between the continuous fits, and a clear loss of information for the dichtomization at age 65 years

Code
anova(agegusto.linear)
## <table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;' >
## <thead>
## <tr><td colspan='4' style='text-align: left;'>
## Wald Statistics for <code style="font-size:0.8em">DAY30</code></td></tr>
## <tr><th style='border-bottom: 1px solid grey; font-weight: 900; border-top: 2px solid grey; text-align: center;'></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'><i>χ<sup>2</sup></i></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>d.f.</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'><i>P</i></th>
## </tr>
## </thead>
## <tbody>
## <tr>
## <td style='text-align: left;'>AGE</td>
## <td style='padding-left:3ex; text-align: right;'>1728.89</td>
## <td style='padding-left:3ex; text-align: right;'>1</td>
## <td style='padding-left:3ex; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='border-bottom: 2px solid grey; text-align: left;'>TOTAL</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'>1728.89</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'>1</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'><0.0001</td>
## </tr>
## </tbody>
## </table>
Code
anova(agegusto.square)
## <table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;' >
## <thead>
## <tr><td colspan='4' style='text-align: left;'>
## Wald Statistics for <code style="font-size:0.8em">DAY30</code></td></tr>
## <tr><th style='border-bottom: 1px solid grey; font-weight: 900; border-top: 2px solid grey; text-align: center;'></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'><i>χ<sup>2</sup></i></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>d.f.</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'><i>P</i></th>
## </tr>
## </thead>
## <tbody>
## <tr>
## <td style='text-align: left;'>AGE</td>
## <td style='padding-left:3ex; text-align: right;'>1858.27</td>
## <td style='padding-left:3ex; text-align: right;'>2</td>
## <td style='padding-left:3ex; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='text-align: left;'> <i>Nonlinear</i></td>
## <td style='padding-left:3ex; text-align: right;'>  13.21</td>
## <td style='padding-left:3ex; text-align: right;'>1</td>
## <td style='padding-left:3ex; text-align: right;'>0.0003</td>
## </tr>
## <tr>
## <td style='border-bottom: 2px solid grey; text-align: left;'>TOTAL</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'>1858.27</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'>2</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'><0.0001</td>
## </tr>
## </tbody>
## </table>
Code
anova(agegusto.rcs)
## <table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;' >
## <thead>
## <tr><td colspan='4' style='text-align: left;'>
## Wald Statistics for <code style="font-size:0.8em">DAY30</code></td></tr>
## <tr><th style='border-bottom: 1px solid grey; font-weight: 900; border-top: 2px solid grey; text-align: center;'></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'><i>χ<sup>2</sup></i></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>d.f.</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'><i>P</i></th>
## </tr>
## </thead>
## <tbody>
## <tr>
## <td style='text-align: left;'>AGE</td>
## <td style='padding-left:3ex; text-align: right;'>1878.45</td>
## <td style='padding-left:3ex; text-align: right;'>4</td>
## <td style='padding-left:3ex; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='text-align: left;'> <i>Nonlinear</i></td>
## <td style='padding-left:3ex; text-align: right;'>  24.71</td>
## <td style='padding-left:3ex; text-align: right;'>3</td>
## <td style='padding-left:3ex; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='border-bottom: 2px solid grey; text-align: left;'>TOTAL</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'>1878.45</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'>4</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'><0.0001</td>
## </tr>
## </tbody>
## </table>
Code
anova(agegusto.linearspline)
## <table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;' >
## <thead>
## <tr><td colspan='4' style='text-align: left;'>
## Wald Statistics for <code style="font-size:0.8em">DAY30</code></td></tr>
## <tr><th style='border-bottom: 1px solid grey; font-weight: 900; border-top: 2px solid grey; text-align: center;'></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'><i>χ<sup>2</sup></i></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>d.f.</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'><i>P</i></th>
## </tr>
## </thead>
## <tbody>
## <tr>
## <td style='text-align: left;'>AGE</td>
## <td style='padding-left:3ex; text-align: right;'>1846.73</td>
## <td style='padding-left:3ex; text-align: right;'>2</td>
## <td style='padding-left:3ex; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='border-bottom: 2px solid grey; text-align: left;'>TOTAL</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'>1846.73</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'>2</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'><0.0001</td>
## </tr>
## </tbody>
## </table>
Code
anova(agegusto.cat65)
## <table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;' >
## <thead>
## <tr><td colspan='4' style='text-align: left;'>
## Wald Statistics for <code style="font-size:0.8em">DAY30</code></td></tr>
## <tr><th style='border-bottom: 1px solid grey; font-weight: 900; border-top: 2px solid grey; text-align: center;'></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'><i>χ<sup>2</sup></i></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>d.f.</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'><i>P</i></th>
## </tr>
## </thead>
## <tbody>
## <tr>
## <td style='text-align: left;'>AGE</td>
## <td style='padding-left:3ex; text-align: right;'>1262.57</td>
## <td style='padding-left:3ex; text-align: right;'>1</td>
## <td style='padding-left:3ex; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='border-bottom: 2px solid grey; text-align: left;'>TOTAL</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'>1262.57</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'>1</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'><0.0001</td>
## </tr>
## </tbody>
## </table>

Plotting of age effects

Plot age effect first at lp scale (logodds), then at probability scale

Age effect at logodds scale; Age effect at probability scale

Fig 6.1

Start surgical mortality by age in Medicare

Age effect at logodds scale

Anova results for the fit of age, with interaction by type of surgery

Type of surgery is clearly most relevant (chi2 >13500) in all fits. Age is als relevant (chi2>3000), and a square term is not needed (chi2 = 2); the interaction adds a little bit (chi2 95). With these large numbers (1.1M patients), most effects have p<.0001.

We will evaluate the differences between fits with or without interaction term graphically further down

Code
# Look for model improvements
anova(fitplot2) # linear age effect, no interaction with surgery
## <table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;' >
## <thead>
## <tr><td colspan='4' style='text-align: left;'>
## Wald Statistics for <code style="font-size:0.8em">mort</code></td></tr>
## <tr><th style='border-bottom: 1px solid grey; font-weight: 900; border-top: 2px solid grey; text-align: center;'></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'><i>χ<sup>2</sup></i></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>d.f.</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'><i>P</i></th>
## </tr>
## </thead>
## <tbody>
## <tr>
## <td style='text-align: left;'>surgery</td>
## <td style='padding-left:3ex; text-align: right;'>13500.19</td>
## <td style='padding-left:3ex; text-align: right;'>13</td>
## <td style='padding-left:3ex; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='text-align: left;'>age</td>
## <td style='padding-left:3ex; text-align: right;'> 3167.14</td>
## <td style='padding-left:3ex; text-align: right;'> 1</td>
## <td style='padding-left:3ex; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='border-bottom: 2px solid grey; text-align: left;'>TOTAL</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'>16445.99</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'>14</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'><0.0001</td>
## </tr>
## </tbody>
## </table>
Code
anova(fitage2) # age square added
## <table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;' >
## <thead>
## <tr><td colspan='4' style='text-align: left;'>
## Wald Statistics for <code style="font-size:0.8em">mort</code></td></tr>
## <tr><th style='border-bottom: 1px solid grey; font-weight: 900; border-top: 2px solid grey; text-align: center;'></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'><i>χ<sup>2</sup></i></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>d.f.</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'><i>P</i></th>
## </tr>
## </thead>
## <tbody>
## <tr>
## <td style='text-align: left;'>surgery</td>
## <td style='padding-left:3ex; text-align: right;'>13499.66</td>
## <td style='padding-left:3ex; text-align: right;'>13</td>
## <td style='padding-left:3ex; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='text-align: left;'>age10</td>
## <td style='padding-left:3ex; text-align: right;'>   18.13</td>
## <td style='padding-left:3ex; text-align: right;'> 1</td>
## <td style='padding-left:3ex; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='text-align: left;'>age102</td>
## <td style='padding-left:3ex; text-align: right;'>    2.33</td>
## <td style='padding-left:3ex; text-align: right;'> 1</td>
## <td style='padding-left:3ex; text-align: right;'>0.1270</td>
## </tr>
## <tr>
## <td style='border-bottom: 2px solid grey; text-align: left;'>TOTAL</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'>16424.97</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'>15</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'><0.0001</td>
## </tr>
## </tbody>
## </table>
Code
anova(fitplot) # interaction added to linear age effect
## <table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;' >
## <thead>
## <tr><td colspan='4' style='text-align: left;'>
## Wald Statistics for <code style="font-size:0.8em">mort</code></td></tr>
## <tr><th style='border-bottom: 1px solid grey; font-weight: 900; border-top: 2px solid grey; text-align: center;'></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'><i>χ<sup>2</sup></i></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>d.f.</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'><i>P</i></th>
## </tr>
## </thead>
## <tbody>
## <tr>
## <td style='text-align: left;'>surgery  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'>13566.02</td>
## <td style='padding-left:3ex; text-align: right;'>26</td>
## <td style='padding-left:3ex; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='text-align: left;'> <i>All Interactions</i></td>
## <td style='padding-left:3ex; text-align: right;'>   94.55</td>
## <td style='padding-left:3ex; text-align: right;'>13</td>
## <td style='padding-left:3ex; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='text-align: left;'>age  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'> 3280.66</td>
## <td style='padding-left:3ex; text-align: right;'>14</td>
## <td style='padding-left:3ex; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='text-align: left;'> <i>All Interactions</i></td>
## <td style='padding-left:3ex; text-align: right;'>   94.55</td>
## <td style='padding-left:3ex; text-align: right;'>13</td>
## <td style='padding-left:3ex; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='text-align: left;'>surgery × age  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'>   94.55</td>
## <td style='padding-left:3ex; text-align: right;'>13</td>
## <td style='padding-left:3ex; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='border-bottom: 2px solid grey; text-align: left;'>TOTAL</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'>16620.27</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'>27</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'><0.0001</td>
## </tr>
## </tbody>
## </table>

Plotting of predicted age effects, with interaction by type of surgery; add 95% CI

Plot age effects at logodds scale with 95% CI

Plotting of age effects with original data points

Fit with interaction (solid lines) and no interaction (dashed lines)