Skip to content

Instantly share code, notes, and snippets.

@jirilukavsky
Created February 28, 2017 11:40
Show Gist options
  • Save jirilukavsky/60c250bd350a3fe93ee560450977c92f to your computer and use it in GitHub Desktop.
Save jirilukavsky/60c250bd350a3fe93ee560450977c92f to your computer and use it in GitHub Desktop.
Simpson's paradox demo inspired by the kidney-stone example on Wikipedia. You can play with proportions and n.
# data from
# https://en.wikipedia.org/wiki/Simpson's_paradox#Kidney_stone_treatment
# in all tabs: row 1 successful, row 2 failed treatment
# small stones
mk = matrix(c(81, 87-81, 234, 270-234), ncol=2)
chisq.test(mk)
# large stones
vk = matrix(c(192, 263-192, 55, 80-55), ncol=2)
chisq.test(vk)
# all cases
tot = matrix(c(273, 350-273, 289, 350-289), ncol=2)
chisq.test(tot)
# demo
mkap = 0.95; mkan = 100 # small stones, A treatment
mkbp = 0.85; mkbn = 1000 # small stones, B treatment
vkap = 0.15; vkan = 1000 # large stones, A treatment
vkbp = 0.05; vkbn = 100 # large stones, B treatment
tab_mk = matrix(c(mkap * mkan, (1-mkap) * mkan, mkbp * mkbn, (1-mkbp) * mkbn), ncol=2)
prop.table(tab_mk, 2)
tab_vk = matrix(c(vkap * vkan, (1-vkap) * vkan, vkbp * vkbn, (1-vkbp) * vkbn), ncol=2)
prop.table(tab_vk, 2)
tab_all = tab_mk + tab_vk
prop.table(tab_all, 2)
chisq.test(tab_mk)$p.value
chisq.test(tab_vk)$p.value
chisq.test(tab_all)$p.value
@jirilukavsky
Copy link
Author

It might be a nice shiny app one day ;-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment