Clase 02 - Análisis de frecuencia y representación gráfica

logo

Conjunto de datos

Para esta clase se utilizará una base de datos correspondiente a los pacientes egresados de todos los hospitales públicos del país durante el año 2017. Estos datos fueron descargados desde el sitio web del Departamento de Estadísticas e Informaciones en Salud (DEIS).

#Lectura de datos
datos=read.csv("Egresos_2017.csv",sep=";",header=T,check.names = F)

Ninguna de las variables utilizadas pueden ser asociadas a información considerada privada o sensibles.

Ejemplos generales

1.1. Distribución de frecuencia

Variables cualitativa - Previsión

Para ejemplificar como efectuar una tabla de frecuencia sobre una variable cualitativa se usará el atributo previsión.

#Tabla de frecuencia variables cuanlitativas
  #Frecuencia
fi=-as.numeric(sort(-table(datos$PREVI))) #Frecuencia absoluta
fac=cumsum(fi)                           #Frecuencia acumulada
fri=as.numeric(fi/sum(fi))*100           #Frecuencia relativa
frac=cumsum(fri)                         #Frecuencia relativa acumulada
previ=c("FONASA","ISAPRE","SIN PREVISIÓN","OTRA","DIPRECA","CAPREDENA","IGNORADA")
  #Tabla
frec_previ=data.frame(previ,fi,fac,fri=round(fri,2),frac=round(frac,2))
  #Visualización
knitr::kable(frec_previ)
previ fi fac fri frac
FONASA 707737 707737 67.50 67.50
ISAPRE 239809 947546 22.87 90.37
SIN PREVISIÓN 29934 977480 2.85 93.22
OTRA 22751 1000231 2.17 95.39
DIPRECA 22690 1022921 2.16 97.55
CAPREDENA 22219 1045140 2.12 99.67
IGNORADA 3435 1048575 0.33 100.00

Variables cuantitativa - Edad

Para ejemplificar como efectuar una tabla de frecuencia sobre una variable cualitativa se usará el atributo edad.

#Tabla de frecuencia variables cuantitativas
  #Frecuencia
fi=as.numeric(table(datos$EDAD))  #Frecuencia absoluta
fac=cumsum(fi)                    #Frecuencia acumulada
fri=as.numeric(fi/sum(fi))*100    #Frecuencia relativa
frac=cumsum(fri)                  #Frecuencia relativa acumulada
  #Tabla
edad=sort(unique(datos$EDAD))
frec_edad=data.frame(edad,fi,fac,fri=round(fri,2),frac=round(frac,2))
  #Visualización
knitr::kable(head(frec_edad,5))
edad fi fac fri frac
0 51937 51937 4.95 4.95
1 16025 67962 1.53 6.48
2 11046 79008 1.05 7.53
3 9804 88812 0.93 8.47
4 8904 97716 0.85 9.32
knitr::kable(tail(frec_edad,5))
edad fi fac fri frac
106 105 14 1048564 0 100
107 106 5 1048569 0 100
108 107 2 1048571 0 100
109 108 2 1048573 0 100
110 109 2 1048575 0 100

Pregunta
¿Qué ocurre al construir directamente una tabla de frecuencia?¿Qué conclusiones se pueden extraer?

#Tabla de frecuencia variables cuantitativas
  #Frecuencia
edad=sort(unique(datos$EDAD))       # Ordenar los datos
n = length(edad)                    # Número de elementos de edad
k = round(1 + 3.3 * log(n))         # Aplicamos regla de Sturges
h = round((max(edad)-min(edad))/k)  # Cálculo de intervalo

 #Crear intervalos
intervalos=hist(datos$EDAD, plot=FALSE, breaks = k)$breaks
intervalos=paste("(",intervalos[1:(length(intervalos)-1)],"-",intervalos[2:(length(intervalos))],"]",sep="")
intervalos[1]="[0-5]"

 #Cálculo de frecuencia
fi = hist(datos$EDAD, plot=FALSE, breaks = k)$counts      #Frecuencia con intervalos
fac=cumsum(fi)                                            #Frecuencia acumulada
fri=as.numeric(fi/sum(fi))*100                            #Frecuencia relativa
frac=cumsum(fri)                                          #Frecuencia relativa acumulada  

frec_edad=data.frame(edad=intervalos,fi,fac,fri=round(fri,2),frac=round(frac,2))
knitr::kable(frec_edad)
edad fi fac fri frac
[0-5] 105591 105591 10.07 10.07
(5-10] 29897 135488 2.85 12.92
(10-15] 28213 163701 2.69 15.61
(15-20] 49624 213325 4.73 20.34
(20-25] 75668 288993 7.22 27.56
(25-30] 91775 380768 8.75 36.31
(30-35] 87810 468578 8.37 44.69
(35-40] 73278 541856 6.99 51.68
(40-45] 58853 600709 5.61 57.29
(45-50] 53750 654459 5.13 62.41
(50-55] 59219 713678 5.65 68.06
(55-60] 60988 774666 5.82 73.88
(60-65] 59949 834615 5.72 79.60
(65-70] 57143 891758 5.45 85.04
(70-75] 51796 943554 4.94 89.98
(75-80] 42090 985644 4.01 94.00
(80-85] 31800 1017444 3.03 97.03
(85-90] 21528 1038972 2.05 99.08
(90-95] 7755 1046727 0.74 99.82
(95-100] 1669 1048396 0.16 99.98
(100-105] 168 1048564 0.02 100.00
(105-110] 11 1048575 0.00 100.00

1.2. Gráficos

Variables cuantitativas- Previsión

Para ejemplificar como representar gráficamente variables cualitativas usaremos gráficos de barra, tipo pie y representación de Pareto. Sin embargo, existen múltiples alternativas de representación. Estas serán vistas en el Módulo 5 del diplomado.

Gráfico de barras

library(ggplot2)
library(plotly)
# Gráfico de barras
p=ggplot(data=frec_previ, aes(x=reorder(previ, -fri),y=fi)) +
  geom_bar(stat="identity",fill="maroon",alpha=0.8) + theme_minimal() + 
  labs(title="Frecuencia absoluta - Previsión", x="Previsión", y = "Frecuencia absoluta")
ggplotly(p)

Gráfico tipo pie

p=ggplot(frec_previ, aes(x="", y=fri, fill=reorder(previ, -fri))) +
  geom_bar(stat="identity", width=1) + coord_polar("y", start=0) + theme_minimal() +
  labs(title="Frecuencia relativa - Previsión", x="Previsión", y = "Frecuencia relativa (%)")
p=p + scale_fill_brewer(palette="RdPu",name = "Tipo de Previsión")
plot(p)

Gráfico tipo Pareto

# Gráfico de barras
p=ggplot(data=frec_previ, aes(x=reorder(previ, -fri),y=fi)) +
  geom_bar(stat="identity",fill="maroon",alpha=0.8) + theme_minimal() + 
  labs(title="Frecuencia absoluta y absoluta acumulada - Previsión", x="Previsión", y = "Frecuencia absoluta")
p = p + geom_point(aes(y=fac))
ggplotly(p)

Variables cuantitativas - Edad

Al igual que las variables cualitativas, existen múltiples alternativas de representación. En este caso he ejemplificado 2: diagrama de puntos e histograma.

Diagrama de punto

library("BHH2")
## Warning: package 'BHH2' was built under R version 4.1.1
dotPlot(datos$EDAD,xlab = "EDAD (años)",)

Histograma

grafico=ggplot(datos,aes(EDAD)) # Gráfico y datos base
#Histograma (25 niveles) (colores- http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf)
grafico = grafico + geom_histogram(bins=30,fill="maroon",color="maroon",alpha=0.8)
grafico = grafico + theme_bw() # Visualización estándar en blanco y negro
grafico = grafico + ylab("Frecuencia absoluta (edad)") + xlab("Edad (años)")
grafico = grafico + ggtitle("Histograma")
ggplotly(grafico)

Pregunta
¿Qué diferencia aprecia entre ambos tipos de representaciones?