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
<- read.csv("data/gusto_age.csv")[-1]
gusto <- as.data.frame(read.csv("data/Fmort.csv"))[-1]
Fmort $age10 <- Fmort$age / 10
Fmort$age102 <- Fmort$age10^2 Fmort
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
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>