12 Assumptions in Regression Models - Additivity and Linearity

GUSTO-I interaction analysis

Examine interactions

Code
# Import gusto, gustoB, and sample4 data sets
gusto <- read.csv("data/gusto1.csv") # GUSTO sample with 40830 patients
gustoB <- read.csv("data/gustoB.csv") # GUSTO part B sample with 20318 patients
gustos <- read.csv("data/sample4.csv") # GUSTO sample4 with 785 patients

source("R/auc.nonpara.mw.R")
source("R/ci.auc.R")
source("R/val.prob.ci.2.R")

# levels(gustos$HRT) <- c("No tachycardia", "Tachycardia")
dd <- datadist(gustos)
## Warning in datadist(gustos): ESAMP is constant
## Warning in datadist(gustos): GRPL is constant
## Warning in datadist(gustos): REGL is constant
Code
options(datadist = "dd")

Evaluate interactions with age in a full model, which includes 8 predictors in total. The data set is small (sample4, n=785, 52 events)

Code
### Full model and age interactions
full <- lrm(DAY30 ~ AGE + KILLIP + HIG + DIA + HYP + HRT + TTR + SEX, data = gustos, x = T, y = T, linear.predictors = F)
fullint <- lrm(DAY30 ~ AGE * (KILLIP + HIG + DIA + HYP + HRT + TTR + SEX), data = gustos, x = T, y = T, linear.predictors = F)
anova(fullint)
## <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  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'>29.93</td>
## <td style='padding-left:3ex; text-align: right;'> 8</td>
## <td style='padding-left:3ex; text-align: right;'>0.0002</td>
## </tr>
## <tr>
## <td style='text-align: left;'> <i>All Interactions</i></td>
## <td style='padding-left:3ex; text-align: right;'>11.01</td>
## <td style='padding-left:3ex; text-align: right;'> 7</td>
## <td style='padding-left:3ex; text-align: right;'>0.1380</td>
## </tr>
## <tr>
## <td style='text-align: left;'>KILLIP  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'> 4.96</td>
## <td style='padding-left:3ex; text-align: right;'> 2</td>
## <td style='padding-left:3ex; text-align: right;'>0.0839</td>
## </tr>
## <tr>
## <td style='text-align: left;'> <i>All Interactions</i></td>
## <td style='padding-left:3ex; text-align: right;'> 1.01</td>
## <td style='padding-left:3ex; text-align: right;'> 1</td>
## <td style='padding-left:3ex; text-align: right;'>0.3160</td>
## </tr>
## <tr>
## <td style='text-align: left;'>HIG  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'> 6.32</td>
## <td style='padding-left:3ex; text-align: right;'> 2</td>
## <td style='padding-left:3ex; text-align: right;'>0.0424</td>
## </tr>
## <tr>
## <td style='text-align: left;'> <i>All Interactions</i></td>
## <td style='padding-left:3ex; text-align: right;'> 2.20</td>
## <td style='padding-left:3ex; text-align: right;'> 1</td>
## <td style='padding-left:3ex; text-align: right;'>0.1380</td>
## </tr>
## <tr>
## <td style='text-align: left;'>DIA  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'> 3.70</td>
## <td style='padding-left:3ex; text-align: right;'> 2</td>
## <td style='padding-left:3ex; text-align: right;'>0.1571</td>
## </tr>
## <tr>
## <td style='text-align: left;'> <i>All Interactions</i></td>
## <td style='padding-left:3ex; text-align: right;'> 0.64</td>
## <td style='padding-left:3ex; text-align: right;'> 1</td>
## <td style='padding-left:3ex; text-align: right;'>0.4220</td>
## </tr>
## <tr>
## <td style='text-align: left;'>HYP  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'> 5.62</td>
## <td style='padding-left:3ex; text-align: right;'> 2</td>
## <td style='padding-left:3ex; text-align: right;'>0.0603</td>
## </tr>
## <tr>
## <td style='text-align: left;'> <i>All Interactions</i></td>
## <td style='padding-left:3ex; text-align: right;'> 1.46</td>
## <td style='padding-left:3ex; text-align: right;'> 1</td>
## <td style='padding-left:3ex; text-align: right;'>0.2267</td>
## </tr>
## <tr>
## <td style='text-align: left;'>HRT  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'>13.50</td>
## <td style='padding-left:3ex; text-align: right;'> 2</td>
## <td style='padding-left:3ex; text-align: right;'>0.0012</td>
## </tr>
## <tr>
## <td style='text-align: left;'> <i>All Interactions</i></td>
## <td style='padding-left:3ex; text-align: right;'> 4.49</td>
## <td style='padding-left:3ex; text-align: right;'> 1</td>
## <td style='padding-left:3ex; text-align: right;'>0.0341</td>
## </tr>
## <tr>
## <td style='text-align: left;'>TTR  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'> 8.31</td>
## <td style='padding-left:3ex; text-align: right;'> 2</td>
## <td style='padding-left:3ex; text-align: right;'>0.0157</td>
## </tr>
## <tr>
## <td style='text-align: left;'> <i>All Interactions</i></td>
## <td style='padding-left:3ex; text-align: right;'> 2.80</td>
## <td style='padding-left:3ex; text-align: right;'> 1</td>
## <td style='padding-left:3ex; text-align: right;'>0.0942</td>
## </tr>
## <tr>
## <td style='text-align: left;'>SEX  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'> 0.79</td>
## <td style='padding-left:3ex; text-align: right;'> 2</td>
## <td style='padding-left:3ex; text-align: right;'>0.6736</td>
## </tr>
## <tr>
## <td style='text-align: left;'> <i>All Interactions</i></td>
## <td style='padding-left:3ex; text-align: right;'> 0.42</td>
## <td style='padding-left:3ex; text-align: right;'> 1</td>
## <td style='padding-left:3ex; text-align: right;'>0.5151</td>
## </tr>
## <tr>
## <td style='text-align: left;'>AGE × KILLIP  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'> 1.01</td>
## <td style='padding-left:3ex; text-align: right;'> 1</td>
## <td style='padding-left:3ex; text-align: right;'>0.3160</td>
## </tr>
## <tr>
## <td style='text-align: left;'>AGE × HIG  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'> 2.20</td>
## <td style='padding-left:3ex; text-align: right;'> 1</td>
## <td style='padding-left:3ex; text-align: right;'>0.1380</td>
## </tr>
## <tr>
## <td style='text-align: left;'>AGE × DIA  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'> 0.64</td>
## <td style='padding-left:3ex; text-align: right;'> 1</td>
## <td style='padding-left:3ex; text-align: right;'>0.4220</td>
## </tr>
## <tr>
## <td style='text-align: left;'>AGE × HYP  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'> 1.46</td>
## <td style='padding-left:3ex; text-align: right;'> 1</td>
## <td style='padding-left:3ex; text-align: right;'>0.2267</td>
## </tr>
## <tr>
## <td style='text-align: left;'>AGE × HRT  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'> 4.49</td>
## <td style='padding-left:3ex; text-align: right;'> 1</td>
## <td style='padding-left:3ex; text-align: right;'>0.0341</td>
## </tr>
## <tr>
## <td style='text-align: left;'>AGE × TTR  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'> 2.80</td>
## <td style='padding-left:3ex; text-align: right;'> 1</td>
## <td style='padding-left:3ex; text-align: right;'>0.0942</td>
## </tr>
## <tr>
## <td style='text-align: left;'>AGE × SEX  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'> 0.42</td>
## <td style='padding-left:3ex; text-align: right;'> 1</td>
## <td style='padding-left:3ex; text-align: right;'>0.5151</td>
## </tr>
## <tr>
## <td style='text-align: left;'>TOTAL INTERACTION</td>
## <td style='padding-left:3ex; text-align: right;'>11.01</td>
## <td style='padding-left:3ex; text-align: right;'> 7</td>
## <td style='padding-left:3ex; text-align: right;'>0.1380</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;'>64.59</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
### Select only interaction AGE * HRT
fullints <- lrm(DAY30 ~ AGE + KILLIP + HIG + DIA + HYP + HRT + TTR + SEX + AGE * HRT, data = gustos, x = T, y = T, linear.predictors = T)
anova(fullints)
## <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  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'>26.67</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>All Interactions</i></td>
## <td style='padding-left:3ex; text-align: right;'> 2.70</td>
## <td style='padding-left:3ex; text-align: right;'>1</td>
## <td style='padding-left:3ex; text-align: right;'>0.1004</td>
## </tr>
## <tr>
## <td style='text-align: left;'>KILLIP</td>
## <td style='padding-left:3ex; text-align: right;'> 3.52</td>
## <td style='padding-left:3ex; text-align: right;'>1</td>
## <td style='padding-left:3ex; text-align: right;'>0.0605</td>
## </tr>
## <tr>
## <td style='text-align: left;'>HIG</td>
## <td style='padding-left:3ex; text-align: right;'> 5.38</td>
## <td style='padding-left:3ex; text-align: right;'>1</td>
## <td style='padding-left:3ex; text-align: right;'>0.0204</td>
## </tr>
## <tr>
## <td style='text-align: left;'>DIA</td>
## <td style='padding-left:3ex; text-align: right;'> 3.14</td>
## <td style='padding-left:3ex; text-align: right;'>1</td>
## <td style='padding-left:3ex; text-align: right;'>0.0763</td>
## </tr>
## <tr>
## <td style='text-align: left;'>HYP</td>
## <td style='padding-left:3ex; text-align: right;'> 3.49</td>
## <td style='padding-left:3ex; text-align: right;'>1</td>
## <td style='padding-left:3ex; text-align: right;'>0.0618</td>
## </tr>
## <tr>
## <td style='text-align: left;'>HRT  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'>11.67</td>
## <td style='padding-left:3ex; text-align: right;'>2</td>
## <td style='padding-left:3ex; text-align: right;'>0.0029</td>
## </tr>
## <tr>
## <td style='text-align: left;'> <i>All Interactions</i></td>
## <td style='padding-left:3ex; text-align: right;'> 2.70</td>
## <td style='padding-left:3ex; text-align: right;'>1</td>
## <td style='padding-left:3ex; text-align: right;'>0.1004</td>
## </tr>
## <tr>
## <td style='text-align: left;'>TTR</td>
## <td style='padding-left:3ex; text-align: right;'> 5.66</td>
## <td style='padding-left:3ex; text-align: right;'>1</td>
## <td style='padding-left:3ex; text-align: right;'>0.0174</td>
## </tr>
## <tr>
## <td style='text-align: left;'>SEX</td>
## <td style='padding-left:3ex; text-align: right;'> 0.19</td>
## <td style='padding-left:3ex; text-align: right;'>1</td>
## <td style='padding-left:3ex; text-align: right;'>0.6602</td>
## </tr>
## <tr>
## <td style='text-align: left;'>AGE × HRT  (Factor+Higher Order Factors)</td>
## <td style='padding-left:3ex; text-align: right;'> 2.70</td>
## <td style='padding-left:3ex; text-align: right;'>1</td>
## <td style='padding-left:3ex; text-align: right;'>0.1004</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;'>65.30</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'>9</td>
## <td style='padding-left:3ex; border-bottom: 2px solid grey; text-align: right;'><0.0001</td>
## </tr>
## </tbody>
## </table>

Fig 12.1

Make 2 plots with linear interaction, in the small n=785 sample, and in the full n=40830 sample

Fig 12.2

Make 4 plots with main effects, linear interaction, and 2 variants of interaction only above age 55. The variable is (Age-55)[+].

In the last graph, the green dotted line follows the angle from below age 55 years (only 1 Age effect is estimated for the HRT==0 and HRT==1 and age<55 patients). In the pre-final graph, there are 2 separate angles from age 55 for HRT==0 and HRT==1 (barely noticable for the green dotted line).

Smart coding illustration

Smart coding of age effect: separate for no HRT (HRT==0) and for HRT (HRT==1)

Code
# Smart coding of age effect: separate for no HRT (HRT==0) and for HRT (HRT==1)
gustos$AGE0 <- gustos$AGE * (1 - gustos$HRT)
gustos$AGE1 <- gustos$AGE * gustos$HRT
# Standard
lrm(DAY30 ~ AGE + KILLIP + HIG + DIA + HYP + HRT + TTR + SEX + AGE * HRT, data = gustos, x = T, y = T, linear.predictors = F)
## 
##  <strong>Logistic Regression Model</strong>
##  
##  <pre>
##  lrm(formula = DAY30 ~ AGE + KILLIP + HIG + DIA + HYP + HRT + 
##      TTR + SEX + AGE * HRT, data = gustos, x = T, y = T, linear.predictors = F)
##  </pre>
##  
##  <table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;' >
## <thead>
## <tr>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; border-left: 1px solid black; border-right: 1px solid black; text-align: center;'></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; border-right: 1px solid black; text-align: center;'>Model Likelihood<br>Ratio Test</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; border-right: 1px solid black; text-align: center;'>Discrimination<br>Indexes</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; border-right: 1px solid black; text-align: center;'>Rank Discrim.<br>Indexes</th>
## </tr>
## </thead>
## <tbody>
## <tr>
## <td style='min-width: 9em; border-left: 1px solid black; border-right: 1px solid black; text-align: center;'>Obs 785</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'>LR χ<sup>2</sup> 86.28</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'><i>R</i><sup>2</sup> 0.270</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'><i>C</i> 0.831</td>
## </tr>
## <tr>
## <td style='min-width: 9em; border-left: 1px solid black; border-right: 1px solid black; text-align: center;'> 0 733</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'>d.f. 9</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'><i>R</i><sup><span style='font-size: 70%;'>2</span></sup><sub style='position: relative; left: -.47em; bottom: -.4em;'><span style='font-size: 70%;'>9,785</span></sub> 0.094</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'><i>D</i><sub>xy</sub> 0.662</td>
## </tr>
## <tr>
## <td style='min-width: 9em; border-left: 1px solid black; border-right: 1px solid black; text-align: center;'> 1 52</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'>Pr(>χ<sup>2</sup>) <0.0001</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'><i>R</i><sup><span style='font-size: 70%;'>2</span></sup><sub style='position: relative; left: -.47em; bottom: -.4em;'><span style='font-size: 70%;'>9,145.7</span></sub> 0.412</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'>γ 0.662</td>
## </tr>
## <tr>
## <td style='min-width: 9em; border-bottom: 2px solid grey; border-left: 1px solid black; border-right: 1px solid black; text-align: center;'>max |∂log <i>L</i>/∂β| 1×10<sup>-9</sup></td>
## <td style='min-width: 9em; border-bottom: 2px solid grey; border-right: 1px solid black; text-align: center;'></td>
## <td style='min-width: 9em; border-bottom: 2px solid grey; border-right: 1px solid black; text-align: center;'>Brier 0.051</td>
## <td style='min-width: 9em; border-bottom: 2px solid grey; border-right: 1px solid black; text-align: center;'>τ<sub>a</sub> 0.082</td>
## </tr>
## </tbody>
## </table>
## 
##  
##  <table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;' >
## <thead>
## <tr><th style='border-bottom: 1px solid grey; font-weight: 900; border-top: 2px solid grey; min-width: 7em; text-align: center;'></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>β</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>S.E.</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>Wald <i>Z</i></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>Pr(>|<i>Z</i>|)</th>
## </tr>
## </thead>
## <tbody>
## <tr>
## <td style='min-width: 7em; text-align: left;'>Intercept</td>
## <td style='min-width: 7em; text-align: right;'> -9.7431</td>
## <td style='min-width: 7em; text-align: right;'> 1.6574</td>
## <td style='min-width: 7em; text-align: right;'>-5.88</td>
## <td style='min-width: 7em; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>AGE</td>
## <td style='min-width: 7em; text-align: right;'>  0.0759</td>
## <td style='min-width: 7em; text-align: right;'> 0.0240</td>
## <td style='min-width: 7em; text-align: right;'> 3.16</td>
## <td style='min-width: 7em; text-align: right;'>0.0016</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>KILLIP</td>
## <td style='min-width: 7em; text-align: right;'>  0.4595</td>
## <td style='min-width: 7em; text-align: right;'> 0.2448</td>
## <td style='min-width: 7em; text-align: right;'> 1.88</td>
## <td style='min-width: 7em; text-align: right;'>0.0605</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>HIG</td>
## <td style='min-width: 7em; text-align: right;'>  0.7900</td>
## <td style='min-width: 7em; text-align: right;'> 0.3407</td>
## <td style='min-width: 7em; text-align: right;'> 2.32</td>
## <td style='min-width: 7em; text-align: right;'>0.0204</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>DIA</td>
## <td style='min-width: 7em; text-align: right;'>  0.7804</td>
## <td style='min-width: 7em; text-align: right;'> 0.4403</td>
## <td style='min-width: 7em; text-align: right;'> 1.77</td>
## <td style='min-width: 7em; text-align: right;'>0.0763</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>HYP</td>
## <td style='min-width: 7em; text-align: right;'>  1.0403</td>
## <td style='min-width: 7em; text-align: right;'> 0.5570</td>
## <td style='min-width: 7em; text-align: right;'> 1.87</td>
## <td style='min-width: 7em; text-align: right;'>0.0618</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>HRT</td>
## <td style='min-width: 7em; text-align: right;'> -3.6376</td>
## <td style='min-width: 7em; text-align: right;'> 2.8352</td>
## <td style='min-width: 7em; text-align: right;'>-1.28</td>
## <td style='min-width: 7em; text-align: right;'>0.1995</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>TTR</td>
## <td style='min-width: 7em; text-align: right;'>  0.8201</td>
## <td style='min-width: 7em; text-align: right;'> 0.3447</td>
## <td style='min-width: 7em; text-align: right;'> 2.38</td>
## <td style='min-width: 7em; text-align: right;'>0.0174</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>SEX</td>
## <td style='min-width: 7em; text-align: right;'> -0.1534</td>
## <td style='min-width: 7em; text-align: right;'> 0.3490</td>
## <td style='min-width: 7em; text-align: right;'>-0.44</td>
## <td style='min-width: 7em; text-align: right;'>0.6602</td>
## </tr>
## <tr>
## <td style='min-width: 7em; border-bottom: 2px solid grey; text-align: left;'>AGE × HRT</td>
## <td style='min-width: 7em; border-bottom: 2px solid grey; text-align: right;'>  0.0655</td>
## <td style='min-width: 7em; border-bottom: 2px solid grey; text-align: right;'> 0.0399</td>
## <td style='min-width: 7em; border-bottom: 2px solid grey; text-align: right;'> 1.64</td>
## <td style='min-width: 7em; border-bottom: 2px solid grey; text-align: right;'>0.1004</td>
## </tr>
## </tbody>
## </table>
Code
# Smart coding
lrm(DAY30 ~ AGE0 + AGE1 + HRT + KILLIP + HIG + DIA + HYP + TTR + SEX, data = gustos, x = T, y = T, linear.predictors = F)
## 
##  <strong>Logistic Regression Model</strong>
##  
##  <pre>
##  lrm(formula = DAY30 ~ AGE0 + AGE1 + HRT + KILLIP + HIG + DIA + 
##      HYP + TTR + SEX, data = gustos, x = T, y = T, linear.predictors = F)
##  </pre>
##  
##  <table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;' >
## <thead>
## <tr>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; border-left: 1px solid black; border-right: 1px solid black; text-align: center;'></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; border-right: 1px solid black; text-align: center;'>Model Likelihood<br>Ratio Test</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; border-right: 1px solid black; text-align: center;'>Discrimination<br>Indexes</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; border-right: 1px solid black; text-align: center;'>Rank Discrim.<br>Indexes</th>
## </tr>
## </thead>
## <tbody>
## <tr>
## <td style='min-width: 9em; border-left: 1px solid black; border-right: 1px solid black; text-align: center;'>Obs 785</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'>LR χ<sup>2</sup> 86.28</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'><i>R</i><sup>2</sup> 0.270</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'><i>C</i> 0.831</td>
## </tr>
## <tr>
## <td style='min-width: 9em; border-left: 1px solid black; border-right: 1px solid black; text-align: center;'> 0 733</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'>d.f. 9</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'><i>R</i><sup><span style='font-size: 70%;'>2</span></sup><sub style='position: relative; left: -.47em; bottom: -.4em;'><span style='font-size: 70%;'>9,785</span></sub> 0.094</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'><i>D</i><sub>xy</sub> 0.662</td>
## </tr>
## <tr>
## <td style='min-width: 9em; border-left: 1px solid black; border-right: 1px solid black; text-align: center;'> 1 52</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'>Pr(>χ<sup>2</sup>) <0.0001</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'><i>R</i><sup><span style='font-size: 70%;'>2</span></sup><sub style='position: relative; left: -.47em; bottom: -.4em;'><span style='font-size: 70%;'>9,145.7</span></sub> 0.412</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'>γ 0.662</td>
## </tr>
## <tr>
## <td style='min-width: 9em; border-bottom: 2px solid grey; border-left: 1px solid black; border-right: 1px solid black; text-align: center;'>max |∂log <i>L</i>/∂β| 1×10<sup>-9</sup></td>
## <td style='min-width: 9em; border-bottom: 2px solid grey; border-right: 1px solid black; text-align: center;'></td>
## <td style='min-width: 9em; border-bottom: 2px solid grey; border-right: 1px solid black; text-align: center;'>Brier 0.051</td>
## <td style='min-width: 9em; border-bottom: 2px solid grey; border-right: 1px solid black; text-align: center;'>τ<sub>a</sub> 0.082</td>
## </tr>
## </tbody>
## </table>
## 
##  
##  <table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;' >
## <thead>
## <tr><th style='border-bottom: 1px solid grey; font-weight: 900; border-top: 2px solid grey; min-width: 7em; text-align: center;'></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>β</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>S.E.</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>Wald <i>Z</i></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>Pr(>|<i>Z</i>|)</th>
## </tr>
## </thead>
## <tbody>
## <tr>
## <td style='min-width: 7em; text-align: left;'>Intercept</td>
## <td style='min-width: 7em; text-align: right;'> -9.7431</td>
## <td style='min-width: 7em; text-align: right;'> 1.6574</td>
## <td style='min-width: 7em; text-align: right;'>-5.88</td>
## <td style='min-width: 7em; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>AGE0</td>
## <td style='min-width: 7em; text-align: right;'>  0.0759</td>
## <td style='min-width: 7em; text-align: right;'> 0.0240</td>
## <td style='min-width: 7em; text-align: right;'> 3.16</td>
## <td style='min-width: 7em; text-align: right;'>0.0016</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>AGE1</td>
## <td style='min-width: 7em; text-align: right;'>  0.1414</td>
## <td style='min-width: 7em; text-align: right;'> 0.0332</td>
## <td style='min-width: 7em; text-align: right;'> 4.26</td>
## <td style='min-width: 7em; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>HRT</td>
## <td style='min-width: 7em; text-align: right;'> -3.6376</td>
## <td style='min-width: 7em; text-align: right;'> 2.8352</td>
## <td style='min-width: 7em; text-align: right;'>-1.28</td>
## <td style='min-width: 7em; text-align: right;'>0.1995</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>KILLIP</td>
## <td style='min-width: 7em; text-align: right;'>  0.4595</td>
## <td style='min-width: 7em; text-align: right;'> 0.2448</td>
## <td style='min-width: 7em; text-align: right;'> 1.88</td>
## <td style='min-width: 7em; text-align: right;'>0.0605</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>HIG</td>
## <td style='min-width: 7em; text-align: right;'>  0.7900</td>
## <td style='min-width: 7em; text-align: right;'> 0.3407</td>
## <td style='min-width: 7em; text-align: right;'> 2.32</td>
## <td style='min-width: 7em; text-align: right;'>0.0204</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>DIA</td>
## <td style='min-width: 7em; text-align: right;'>  0.7804</td>
## <td style='min-width: 7em; text-align: right;'> 0.4403</td>
## <td style='min-width: 7em; text-align: right;'> 1.77</td>
## <td style='min-width: 7em; text-align: right;'>0.0763</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>HYP</td>
## <td style='min-width: 7em; text-align: right;'>  1.0403</td>
## <td style='min-width: 7em; text-align: right;'> 0.5570</td>
## <td style='min-width: 7em; text-align: right;'> 1.87</td>
## <td style='min-width: 7em; text-align: right;'>0.0618</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>TTR</td>
## <td style='min-width: 7em; text-align: right;'>  0.8201</td>
## <td style='min-width: 7em; text-align: right;'> 0.3447</td>
## <td style='min-width: 7em; text-align: right;'> 2.38</td>
## <td style='min-width: 7em; text-align: right;'>0.0174</td>
## </tr>
## <tr>
## <td style='min-width: 7em; border-bottom: 2px solid grey; text-align: left;'>SEX</td>
## <td style='min-width: 7em; border-bottom: 2px solid grey; text-align: right;'> -0.1534</td>
## <td style='min-width: 7em; border-bottom: 2px solid grey; text-align: right;'> 0.3490</td>
## <td style='min-width: 7em; border-bottom: 2px solid grey; text-align: right;'>-0.44</td>
## <td style='min-width: 7em; border-bottom: 2px solid grey; text-align: right;'>0.6602</td>
## </tr>
## </tbody>
## </table>
Code
# Identical fit, easier interpretation

# Age 55 as reference for HRT effect
gustos$AGE0 <- (gustos$AGE - 55) * (1 - gustos$HRT)
gustos$AGE1 <- (gustos$AGE - 55) * gustos$HRT
lrm(DAY30 ~ AGE0 + AGE1 + HRT + KILLIP + HIG + DIA + HYP + TTR + SEX, data = gustos, x = T, y = T, linear.predictors = F)
## 
##  <strong>Logistic Regression Model</strong>
##  
##  <pre>
##  lrm(formula = DAY30 ~ AGE0 + AGE1 + HRT + KILLIP + HIG + DIA + 
##      HYP + TTR + SEX, data = gustos, x = T, y = T, linear.predictors = F)
##  </pre>
##  
##  <table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;' >
## <thead>
## <tr>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; border-left: 1px solid black; border-right: 1px solid black; text-align: center;'></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; border-right: 1px solid black; text-align: center;'>Model Likelihood<br>Ratio Test</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; border-right: 1px solid black; text-align: center;'>Discrimination<br>Indexes</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; border-right: 1px solid black; text-align: center;'>Rank Discrim.<br>Indexes</th>
## </tr>
## </thead>
## <tbody>
## <tr>
## <td style='min-width: 9em; border-left: 1px solid black; border-right: 1px solid black; text-align: center;'>Obs 785</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'>LR χ<sup>2</sup> 86.28</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'><i>R</i><sup>2</sup> 0.270</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'><i>C</i> 0.831</td>
## </tr>
## <tr>
## <td style='min-width: 9em; border-left: 1px solid black; border-right: 1px solid black; text-align: center;'> 0 733</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'>d.f. 9</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'><i>R</i><sup><span style='font-size: 70%;'>2</span></sup><sub style='position: relative; left: -.47em; bottom: -.4em;'><span style='font-size: 70%;'>9,785</span></sub> 0.094</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'><i>D</i><sub>xy</sub> 0.662</td>
## </tr>
## <tr>
## <td style='min-width: 9em; border-left: 1px solid black; border-right: 1px solid black; text-align: center;'> 1 52</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'>Pr(>χ<sup>2</sup>) <0.0001</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'><i>R</i><sup><span style='font-size: 70%;'>2</span></sup><sub style='position: relative; left: -.47em; bottom: -.4em;'><span style='font-size: 70%;'>9,145.7</span></sub> 0.412</td>
## <td style='min-width: 9em; border-right: 1px solid black; text-align: center;'>γ 0.662</td>
## </tr>
## <tr>
## <td style='min-width: 9em; border-bottom: 2px solid grey; border-left: 1px solid black; border-right: 1px solid black; text-align: center;'>max |∂log <i>L</i>/∂β| 4×10<sup>-11</sup></td>
## <td style='min-width: 9em; border-bottom: 2px solid grey; border-right: 1px solid black; text-align: center;'></td>
## <td style='min-width: 9em; border-bottom: 2px solid grey; border-right: 1px solid black; text-align: center;'>Brier 0.051</td>
## <td style='min-width: 9em; border-bottom: 2px solid grey; border-right: 1px solid black; text-align: center;'>τ<sub>a</sub> 0.082</td>
## </tr>
## </tbody>
## </table>
## 
##  
##  <table class='gmisc_table' style='border-collapse: collapse; margin-top: 1em; margin-bottom: 1em;' >
## <thead>
## <tr><th style='border-bottom: 1px solid grey; font-weight: 900; border-top: 2px solid grey; min-width: 7em; text-align: center;'></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>β</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>S.E.</th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>Wald <i>Z</i></th>
## <th style='font-weight: 900; border-bottom: 1px solid grey; border-top: 2px solid grey; text-align: right;'>Pr(>|<i>Z</i>|)</th>
## </tr>
## </thead>
## <tbody>
## <tr>
## <td style='min-width: 7em; text-align: left;'>Intercept</td>
## <td style='min-width: 7em; text-align: right;'> -5.5703</td>
## <td style='min-width: 7em; text-align: right;'> 0.5746</td>
## <td style='min-width: 7em; text-align: right;'>-9.69</td>
## <td style='min-width: 7em; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>AGE0</td>
## <td style='min-width: 7em; text-align: right;'>  0.0759</td>
## <td style='min-width: 7em; text-align: right;'> 0.0240</td>
## <td style='min-width: 7em; text-align: right;'> 3.16</td>
## <td style='min-width: 7em; text-align: right;'>0.0016</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>AGE1</td>
## <td style='min-width: 7em; text-align: right;'>  0.1414</td>
## <td style='min-width: 7em; text-align: right;'> 0.0332</td>
## <td style='min-width: 7em; text-align: right;'> 4.26</td>
## <td style='min-width: 7em; text-align: right;'><0.0001</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>HRT</td>
## <td style='min-width: 7em; text-align: right;'> -0.0333</td>
## <td style='min-width: 7em; text-align: right;'> 0.7043</td>
## <td style='min-width: 7em; text-align: right;'>-0.05</td>
## <td style='min-width: 7em; text-align: right;'>0.9623</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>KILLIP</td>
## <td style='min-width: 7em; text-align: right;'>  0.4595</td>
## <td style='min-width: 7em; text-align: right;'> 0.2448</td>
## <td style='min-width: 7em; text-align: right;'> 1.88</td>
## <td style='min-width: 7em; text-align: right;'>0.0605</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>HIG</td>
## <td style='min-width: 7em; text-align: right;'>  0.7900</td>
## <td style='min-width: 7em; text-align: right;'> 0.3407</td>
## <td style='min-width: 7em; text-align: right;'> 2.32</td>
## <td style='min-width: 7em; text-align: right;'>0.0204</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>DIA</td>
## <td style='min-width: 7em; text-align: right;'>  0.7804</td>
## <td style='min-width: 7em; text-align: right;'> 0.4403</td>
## <td style='min-width: 7em; text-align: right;'> 1.77</td>
## <td style='min-width: 7em; text-align: right;'>0.0763</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>HYP</td>
## <td style='min-width: 7em; text-align: right;'>  1.0403</td>
## <td style='min-width: 7em; text-align: right;'> 0.5570</td>
## <td style='min-width: 7em; text-align: right;'> 1.87</td>
## <td style='min-width: 7em; text-align: right;'>0.0618</td>
## </tr>
## <tr>
## <td style='min-width: 7em; text-align: left;'>TTR</td>
## <td style='min-width: 7em; text-align: right;'>  0.8201</td>
## <td style='min-width: 7em; text-align: right;'> 0.3447</td>
## <td style='min-width: 7em; text-align: right;'> 2.38</td>
## <td style='min-width: 7em; text-align: right;'>0.0174</td>
## </tr>
## <tr>
## <td style='min-width: 7em; border-bottom: 2px solid grey; text-align: left;'>SEX</td>
## <td style='min-width: 7em; border-bottom: 2px solid grey; text-align: right;'> -0.1534</td>
## <td style='min-width: 7em; border-bottom: 2px solid grey; text-align: right;'> 0.3490</td>
## <td style='min-width: 7em; border-bottom: 2px solid grey; text-align: right;'>-0.44</td>
## <td style='min-width: 7em; border-bottom: 2px solid grey; text-align: right;'>0.6602</td>
## </tr>
## </tbody>
## </table>
Code
# Even nicer interpretation, HRT effect for age=55

The fit of each of the models is identical (always LR chi2=86.28); each model allows for linear interaction between AGE and HRT. The interpretation of the model is easier if the age effects are estimated for HRT==1 and for HRT==0. Scaling is easier by subtracting 55 from AGE (AGE-55); this implies the HRT effect relates to age 55.

Table 12.2 Better predictions?

Assess the performance if the models created in n=785 in an independent validation part, GustoB, n=20318.
Plots created with a modification of Frank Harrell’s val.prob() function:

Code
# Validate in independent part, named gustoB
# main effects
lrm.val.full <- predict(full, newdata = gustoB, type = "lp")
# simple interaction
lrm.val.int1 <- predict(fullints, newdata = gustoB, type = "lp")

# Plot
val.prob.ci.2(
  y = gustoB[, "DAY30"], logit = lrm.val.full, riskdist = "predicted", logistic.cal = F,
  smooth = "rcs", nr.knots = 3, g = 8, xlim = c(0, .5), ylim = c(0, .5),
  legendloc = c(0.18, 0.15), statloc = c(0, .4), roundstats = 3,
  xlab = "Predicted probability from n=785", ylab = "Observed proportion in n=20318"
)

Conclusions Discrimination: worse with interactions than without. Calibration: We note some overfitting, as expected by a fit in a small sample.

MFP and other non-linear analyses in n544 data

Upcoming.