I'm attempting to evaluate the goodness of fit of a logistic regression model I have constructed. Initially, it was recommended that I use the Hosmer-Lemeshow test, but upon further research, I learned that it is not as reliable as the omnibus goodness of fit test as indicated by Hosmer et al. It is my understanding that residual.lrm
in the R rms
package is the method to run the le Cessie - van Houwelingen - Copas - Hosmer unweighted sum of squares test.
I have constructed the following model:
> NEDOCModel <- glm(complication ~ ultrasound + fNEDOC, family = "binomial", data = modelmain);
> summary(NEDOCModel);
Call:
glm(formula = complication ~ ultrasound + fNEDOC, family = "binomial",
data = modelmain, x = TRUE, y = TRUE)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.5841 -0.5812 -0.4899 -0.4899 2.0878
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.69293 0.10126 -16.719 <2e-16 ***
ultrasound1 -0.36661 0.12514 -2.929 0.0034 **
fNEDOCOvercrowded (140 - 200) 0.01087 0.13524 0.080 0.9359
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 1765.6 on 2284 degrees of freedom
Residual deviance: 1757.1 on 2282 degrees of freedom
AIC: 1763.1
Number of Fisher Scoring iterations: 4
where complication is a binary outcome (0 or 1), ultrasound and fNEDOC are binary predictors (0 or 1).
Following the description (and examples) for the residual.lrm
function, I receive the following error:
> resid(NEDOCModel, "gof");
Error in match.arg(type) :
'arg' should be one of “deviance”, “pearson”, “working”, “response”, “partial”
Being an amateur and relatively new to this field, I would appreciate any assistance in resolving this error and guidance in ensuring I'm properly evaluating my model.
Thanks in advance!
EDIT: Here's a small subset of the data:
simExample <- structure(list(complication = structure(c(1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("0",
"1"), class = "factor"), ultrasound = structure(c(1L, 2L, 2L,
1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L,
1L), .Label = c("0", "1"), class = "factor"), fNEDOC = structure(c(1L,
2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L,
1L, 1L, 2L), .Label = c("Not Overcrowded (00 - 140)", "Overcrowded (140 -
200)"), class = "factor")), .Names = c("complication", "ultrasound",
"fNEDOC"), row.names = c(NA, 20L), class = "data.frame")
View(simExample)
complication ultrasound fNEDOC
1 0 0 Not Overcrowded (00 - 140)
2 0 1 Overcrowded (140 - 200)
3 0 1 Not Overcrowded (00 - 140)
4 0 0 Not Overcrowded (00 - 140)
5 0 1 Not Overcrowded (00 - 140)
6 0 0 Not Overcrowded (00 - 140)
7 0 0 Not Overcrowded (00 - 140)
8 0 1 Overcrowded (140 - 200)
9 0 1 Not Overcrowded (00 - 140)
10 1 0 Overcrowded (140 - 200)
11 0 0 Not Overcrowded (00 - 140)
12 0 1 Not Overcrowded (00 - 140)
13 0 1 Not Overcrowded (00 - 140)
14 0 1 Overcrowded (140 - 200)
15 0 1 Overcrowded (140 - 200)
16 0 1 Not Overcrowded (00 - 140)
17 0 1 Not Overcrowded (00 - 140)
18 0 0 Not Overcrowded (00 - 140)
19 0 1 Not Overcrowded (00 - 140)
20 0 0 Overcrowded (140 - 200)