Titanic
References
Load data
##
data(Titanic)
Titanic
## , , Age = Child, Survived = No
##
## Sex
## Class Male Female
## 1st 0 0
## 2nd 0 0
## 3rd 35 17
## Crew 0 0
##
## , , Age = Adult, Survived = No
##
## Sex
## Class Male Female
## 1st 118 4
## 2nd 154 13
## 3rd 387 89
## Crew 670 3
##
## , , Age = Child, Survived = Yes
##
## Sex
## Class Male Female
## 1st 5 1
## 2nd 11 13
## 3rd 13 14
## Crew 0 0
##
## , , Age = Adult, Survived = Yes
##
## Sex
## Class Male Female
## 1st 57 140
## 2nd 14 80
## 3rd 75 76
## Crew 192 20
Direct method
## Collapse
Titanic2 <- apply(Titanic, MARGIN = c(1,2,4), sum)
## Permutate
Titanic3 <- aperm(Titanic2, c("Sex","Survived","Class"))
Titanic3
## , , Class = 1st
##
## Survived
## Sex No Yes
## Male 118 62
## Female 4 141
##
## , , Class = 2nd
##
## Survived
## Sex No Yes
## Male 154 25
## Female 13 93
##
## , , Class = 3rd
##
## Survived
## Sex No Yes
## Male 422 88
## Female 106 90
##
## , , Class = Crew
##
## Survived
## Sex No Yes
## Male 670 192
## Female 3 20
## Define an OR function for each stratum
CalcOddsRatio <- function(mat) {
(mat["Female","Yes"]/mat["Female","No"]) / (mat["Male","Yes"]/mat["Male","No"])
}
## Apply
apply(Titanic3, MARGIN = 3, CalcOddsRatio)
## 1st 2nd 3rd Crew
## 67.089 44.068 4.072 23.264
Raw data creation
## Re-create the raw data
TitanicRaw <- epitools::expand.table(Titanic)
head(TitanicRaw)
## Class Sex Age Survived
## 1 1st Male Child Yes
## 2 1st Male Child Yes
## 3 1st Male Child Yes
## 4 1st Male Child Yes
## 5 1st Male Child Yes
## 6 1st Male Adult No
## Run logistic regression within each level
lapply(levels(TitanicRaw$Class), function(classValue) {
resGlm <- glm(formula = (Survived == "Yes") ~ (Sex == "Female"),
family = binomial(link = "logit"),
data = subset(TitanicRaw, Class == classValue))
tableone::ShowRegTable(resGlm, printToggle = FALSE)
})
## [[1]]
## exp(beta) [confint] p
## (Intercept) " 0.53 [0.38, 0.71]" "<0.001"
## Sex == "Female"TRUE "67.09 [26.71, 225.74]" "<0.001"
##
## [[2]]
## exp(beta) [confint] p
## (Intercept) " 0.16 [0.10, 0.24]" "<0.001"
## Sex == "Female"TRUE "44.07 [22.20, 93.90]" "<0.001"
##
## [[3]]
## exp(beta) [confint] p
## (Intercept) "0.21 [0.16, 0.26]" "<0.001"
## Sex == "Female"TRUE "4.07 [2.84, 5.86]" "<0.001"
##
## [[4]]
## exp(beta) [confint] p
## (Intercept) " 0.29 [0.24, 0.34]" "<0.001"
## Sex == "Female"TRUE "23.26 [7.87, 99.49]" "<0.001"