Data

A GAM of Furrycat’s data shows a strong relationship between health and both hardiness and dexterity.

model <- gam(
  formula = health ~
    s(hardiness) +
    s(fortitude) + 
    s(dexterity) + 
    s(endurance) +
    s(intellect) + 
    s(cleverness) + 
    s(courage) + 
    s(dependability) +
    s(power) +
    s(fierceness) +
    armor,
  family = gaussian(),
  data = normalized_df
)
## 
## Family: gaussian 
## Link function: identity 
## 
## Formula:
## health ~ s(hardiness) + s(fortitude) + s(dexterity) + s(endurance) + 
##     s(intellect) + s(cleverness) + s(courage) + s(dependability) + 
##     s(power) + s(fierceness) + armor
## 
## Parametric coefficients:
##              Estimate Std. Error   t value Pr(>|t|)    
## (Intercept) 7220.4688     0.3164 22824.003   <2e-16 ***
## armor         -0.7493     0.9554    -0.784    0.433    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Approximate significance of smooth terms:
##                    edf Ref.df         F p-value    
## s(hardiness)     1.088  1.169 1.182e+07  <2e-16 ***
## s(fortitude)     1.000  1.000 5.140e-01  0.4737    
## s(dexterity)     1.000  1.000 3.983e+05  <2e-16 ***
## s(endurance)     1.000  1.000 1.330e+00  0.2496    
## s(intellect)     3.672  4.550 1.329e+00  0.2825    
## s(cleverness)    1.000  1.000 6.630e-01  0.4159    
## s(courage)       4.285  5.314 1.018e+00  0.4536    
## s(dependability) 3.564  4.459 2.317e+00  0.0500 .  
## s(power)         1.000  1.000 6.151e+00  0.0135 *  
## s(fierceness)    1.000  1.000 3.228e+00  0.0731 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## R-sq.(adj) =      1   Deviance explained =  100%
## GCV = 28.576  Scale est. = 27.14     n = 410

And GAM shows a linear relationships.

plot(model, select = 1)

plot(model, select = 3)

The linear model shows high correlation and low residuals.

model <- lm(health ~ hardiness + dexterity, data = normalized_df)
summary(model)
## 
## Call:
## lm(formula = health ~ hardiness + dexterity, data = normalized_df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -8.4247 -4.7295  0.7966  4.3744  7.8303 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 42.118743   0.602538    69.9   <2e-16 ***
## hardiness   14.958346   0.002312  6469.0   <2e-16 ***
## dexterity    2.992504   0.002671  1120.5   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.309 on 407 degrees of freedom
## Multiple R-squared:      1,  Adjusted R-squared:      1 
## F-statistic: 8.835e+07 on 2 and 407 DF,  p-value: < 2.2e-16

And looks like this.

The residuals suggest that some of the error may be due to rounding.

Conclusion

Health is roughly captured by the following formula, \(health \approx 42 + 15 * hardiness + 3 * dexterity\). The final health is rounded.