Los datos

datos = read.table(file = "datos/p5-ENSE2012-seleccion.csv", header = TRUE, sep = ";")

En este fichero puedes encontrar parte de los resultados de la encuesta nacional de salud, en la que se preguntó por distintos hábitos a 21007 individuos.

A continuación aparecen las variables eleccionadas junto con su codificación.

Por si te interesa, aquí está en enlace a la página del INE. Allí encontrarás

Objetivos

Vamos a usar los datos de la encuesta nacional de salud realizada en 2011-2012 para estimar al probabilidad de ciertos eventos a nivel poblacional. Básicamente:

Ejercicio 1

Descarga de los datos.

  • Selecciona la carpeta de trabajo adecuada para esta sesión con R.
  • Descarga el fichero y guárdalo en la subcarpeta datos de tu carpeta de trabajo**.
  • Explora el fichero con un editor de texto como el Bloc de Notas.
  • Lee ese fichero con R, usando el comando read.table y guárdalo en un data.frame con el nombre ense.
  • Comprueba que la lectura ha sido correcta.

Ejercicio 2

Prepara los datos

  • Comprueba si hay filas incompletas
all(complete.cases(datos))
## [1] TRUE
  • Elimina los “no sabe/no contesta”, codificados con 8 y 9.
elimina1 = which(datos[ , 1] %in% c(8, 9))
elimina2 = which(datos[ , 2] %in% c(8, 9))
datos = datos[-c(elimina1, elimina2), ]

Ejercicio 3

Calcula la tabla de contingencia para las dos variables. Incluye los valores marginales.

(tabla1 = table(datos))
##      S105
## SEXOa    1    2    3    4
##     1 2662  307 2759 3906
##     2 2100  247 1422 7581
rownames(tabla1) <- c("hombre", "mujer")
colnames(tabla1) <- c("habitual", "ocasional", "ex-fumador", "no-fumador")
tabla1Mrgs = addmargins(tabla1)

Usar la tabla para estimar a nivel poblacional las siguientes probabilidades.

  • P(mujer \(\cap\) Sí fuma, pero no diariamente)
tabla1[2,2]/sum(tabla1[, ])
## [1] 0.01177087
tabla1Mrgs[2,2]/tabla1Mrgs[3,5]
## [1] 0.01177087
  • P(mujer | Sí fuma, pero no diariamente)
tabla1[2,2]/sum(tabla1[ ,2])
## [1] 0.4458484
tabla1Mrgs[2,2]/tabla1Mrgs[3,2]
## [1] 0.4458484

Ejercicio 4

Estima, a partir de la regla de Laplace (casos favorables entre casos posibles), la probabilidad de que al elegir un individuos al azar:

  • P(mujer)
(sum(datos$SEXOa == 2)/nrow(datos) )
## [1] 0.5408883
# alternativamente
length(datos$SEXOa[datos$SEXOa == 2])/nrow(datos)
## [1] 0.5408883
  • P(Fumador ocasional|mujer)
nrow(datos[(datos$SEXOa == 2) & (datos$S105==2), ])/sum(datos$SEXOa == 2) 
## [1] 0.02176211

Ejercicio 5

Con las variables G21c_14 y S105 prepara los datos

  • Comprueba si hay filas incompletas
all(complete.cases(datos))
## [1] TRUE
  • Elimina los “no sabe/no contesta”, codificados con 8 y 9.
elimina1 = which(datos[ , 1] %in% c(8, 9))
elimina2 = which(datos[ , 2] %in% c(8, 9))
datos = datos[-c(elimina1, elimina2), ]

SI QUIERES PRACTICAR MÁS

Otros datos de ensayo clínico

Durante un ensayo clínico de una nueva prueba diagnística se ha aplicado dicho test a 1000 individuos repartidos entre sanos (S) y enfermos (E), y se ha medido si cada uno de ellos dio positivo (+) o negativo (-).

Ejercicio 6

Descarga de los datos.

  • Selecciona la carpeta de trabajo adecuada para esta sesión con R.
  • Descarga en ella este fichero csv.
  • Descarga el fichero y guárdalo en la subcarpeta datos de tu carpeta de trabajo.
  • Explora el fichero con un editor de texto como el Bloc de Notas.
  • Lee ese fichero con R, usando el comando read.table y guárdalo en un data.frame con el nombre tabla.
  • Comprueba que la lectura ha sido correcta.
datos2 = read.table(file = "datos/p5-test-diagnostico-ensayo-clinicoBis.csv", header = TRUE, sep = ";")
head(datos2, 8)
##   test estado
## 1    +      E
## 2    +      E
## 3    +      E
## 4    +      E
## 5    +      E
## 6    +      E
## 7    +      S
## 8    +      E
summary(datos2)
##  test    estado 
##  -:455   E:575  
##  +:545   S:425

Ejercicio 7

Prepara los datos

  • Comprueba si hay filas incompletas
all(complete.cases(datos2))
## [1] TRUE
  • Determina el tipo de datos de que dispones
summary(datos2)
##  test    estado 
##  -:455   E:575  
##  +:545   S:425
  • Construye una tabla de contingencia que resuma los datos
(tabla2 = table(datos2, deparse.level = ))
##     estado
## test   E   S
##    -  75 380
##    + 500  45
  • Para reordenar las filas/columnas de la tabla hay que reordenar previamente los niveles del correspondiente factor
datos2$test = factor(datos2$test, levels = c("+", "-"))
(tabla2 = table(datos2))
##     estado
## test   E   S
##    + 500  45
##    -  75 380
  • Renombra las filas/columnas de la tabla con las funciones col.names(), row.names(). Añade a la tabla los valores marginales con la función addmargins()
colnames(tabla2) <- c("Enfermo", "Sano")
row.names(tabla2) <- c("Positivo", "Negativo")
(tabla2Mrgs = addmargins(tabla2))
##           estado
## test       Enfermo Sano  Sum
##   Positivo     500   45  545
##   Negativo      75  380  455
##   Sum          575  425 1000

Ejercicio 8

  • Calcula \(P(+)\)
# tabla2Mrgs[1,3]/tabla2Mrgs[3,3]
sum(tabla2[1, ])/sum(tabla2)
## [1] 0.545
  • Calcula \(P(E\cap -)\)
# tabla2Mrgs[1,1]/tabla2Mrgs[3, 3]
tabla2[1,1]/sum(tabla2)
## [1] 0.5
  • Calcula \(P(E | -)\)
# (tabla2Mrgs[2,1]/tabla2Mrgs[3,3])/(tabla2Mrgs[2,3]/tabla2Mrgs[3,3])
(tabla2[2,1]/sum(tabla2))/(sum(tabla2[2, ])/sum(tabla2))
## [1] 0.1648352
  • Calcula la sensibilidad del test: \(P(+|E)\)
# (tabla2Mrgs[1,1]/tabla2Mrgs[3,3])/(tabla2Mrgs[3,1]/tabla2Mrgs[3,3])
(tabla2[1,1]/sum(tabla2))/(sum(tabla2[,1])/sum(tabla2))
## [1] 0.8695652
  • Calcula la especificidad del test: \(P(-|S)\)
# (tabla2Mrgs[2,2]/tabla2Mrgs[3,3])/(tabla2Mrgs[3,2]/tabla2Mrgs[3,3])
(tabla2[2,2]/sum(tabla2))/(sum(tabla2[ ,2])/sum(tabla2))
## [1] 0.8941176
  • Calcula el valor predictivo positivo del test: \(P(E|+)\)
# (tabla2Mrgs[1,1]/tabla2Mrgs[3,3])/(tabla2Mrgs[1,3]/tabla2Mrgs[3,3])
(tabla2[1,1]/sum(tabla2))/(sum(tabla2[1, ])/sum(tabla2))
## [1] 0.9174312
  • Calcula el valor predictivo negativo del test: \(P(S|-)\)
# (tabla2Mrgs[2,2]/tabla2Mrgs[3,3])/(tabla2Mrgs[2,3]/tabla2Mrgs[3,3])
(tabla2[2,2]/sum(tabla2))/(sum(tabla2[2,])/sum(tabla2))
## [1] 0.8351648

Ejercicio 9

Ahora calcularemos las probabilidades directamente con la regla de Laplace contando a partir de los datos originales del data.frame:

  • Calcula \(P(+)\)
sum(datos2$test=="+")/nrow(datos2)
## [1] 0.545
  • Calcula \(P(E \cap -)\)
sum((datos2$estado == "E") & (datos2$test == "-"))/nrow(datos2)
## [1] 0.075
  • Calcula \(P(E |-)\)
sum((datos2$estado == "E") & (datos2$test == "-"))/sum(datos2$test == "-")
## [1] 0.1648352