class: middle
Para la sesión, necesitamos instalar los siguientes paquetes:
Para instalarlos, utilizamos los siguientes comandos en la consola una sola vez.
install.packages("janitor")
install.packages("summarytools")
install.packages("tidyverse")
–
Luego, esperamos a que complete la instalación y verificamos:
library(janitor)
library(summarytools)
library(ggplot2)
En esta sesión veremos la exploración de variables cualitativas utilizando tablas, y gráficos.
Para ello, abriremos el archivo: “Univar_1_Var_Cualitativas.R”
Con el siguiente código, leemos los datos directamente desde un enlace:
# Cargar los datos sobre Cancer de mama:
url<-"https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer/breast-cancer.data"
datos <- read.table(url, sep=",",stringsAsFactors=TRUE)
names(datos) <- c("clase","edad","menopausia","tamanio",
"inv_nodes","node_caps","deg_malig",
"breast","breast_quad","irradiat")
## Mas informacion en: https://archive.ics.uci.edu/ml/datasets/Breast+Cancer
Exploramos el dataset observando los primeros 6 registros. Para ello, usamos el comando head:
Luego, realizamos una exploración del tipo de columnas que tiene este dataset.
str(datos)
## 'data.frame': 286 obs. of 10 variables:
## $ clase : Factor w/ 2 levels "no-recurrence-events",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ edad : Factor w/ 6 levels "20-29","30-39",..: 2 3 3 5 3 5 4 5 3 3 ...
## $ menopausia : Factor w/ 3 levels "ge40","lt40",..: 3 3 3 1 3 1 3 1 3 3 ...
## $ tamanio : Factor w/ 11 levels "0-4","10-14",..: 6 4 4 3 1 3 5 4 11 4 ...
## $ inv_nodes : Factor w/ 7 levels "0-2","12-14",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ node_caps : Factor w/ 3 levels "?","no","yes": 2 2 2 2 2 2 2 2 2 2 ...
## $ deg_malig : int 3 2 2 2 2 2 2 1 2 2 ...
## $ breast : Factor w/ 2 levels "left","right": 1 2 1 2 2 1 1 1 1 2 ...
## $ breast_quad: Factor w/ 6 levels "?","central",..: 3 6 3 4 5 3 3 3 3 4 ...
## $ irradiat : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
Observamos que en este set de datos todas las variables excepto deg_malig son de tipo factor (observe ‘Factor’ al lado de cada variable).
Las tablas de frecuencias se pueden construir de diferentes maneras en R.
### Utilizando table |
| Exploramos la variable clase con tablas de frecuencias: |
r # Explorando con tablas: frecuencias y proporciones table(datos$clase) |
## ## no-recurrence-events recurrence-events ## 201 85 |
Interpretación: - Tenemos 201 casos de eventos no recurrentes de cáncer, y - 85 observaciones con eventos recurrentes de cáncer,
# prop.table convierte la tabla a proporciones
proptable <- prop.table(table(datos$clase))
# round redondea a los digitos indicados en el segundo argumento.
round(proptable, 3)
##
## no-recurrence-events recurrence-events
## 0.703 0.297
–
Interpretación: - El 70.3% de las observaciones son eventos no recurrentes de cáncer, y - 29.7% de las observaciones son eventos recurrentes de cáncer,
–
# El comando as.data.frame convierte esta tabla a un data frame para mejorar la visualización
as.data.frame(proptable)
## Var1 Freq
## 1 no-recurrence-events 0.7027972
## 2 recurrence-events 0.2972028
janitorAhora, exploramos la variable age con tablas de frecuencias. Esta vez utilizaremos el paquete janitor para una mejor visualización.
Utilizamos el comando tabyl para crear la tabla de frecuencias y observamos los resultados e interpretamos.
library(janitor)
janitor::tabyl(datos$edad)
## datos$edad n percent
## 20-29 1 0.003496503
## 30-39 36 0.125874126
## 40-49 90 0.314685315
## 50-59 96 0.335664336
## 60-69 57 0.199300699
## 70-79 6 0.020979021
summarytoolsOtra opción es usar el paquete summarytools. Si ya realizó la instalación, utilice el siguiente código:
library(summarytools)
summarytools::freq(datos$menopausia,
order = "freq")
## Frequencies
## datos$menopausia
## Type: Factor
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ------------- ------ --------- -------------- --------- --------------
## premeno 150 52.45 52.45 52.45 52.45
## ge40 129 45.10 97.55 45.10 97.55
## lt40 7 2.45 100.00 2.45 100.00
## <NA> 0 0.00 100.00
## Total 286 100.00 100.00 100.00 100.00
–
Interpretación: - El 52.45% de las observaciones son mujeres que tuvieron pre menopausia. - El 45.10% de las observaciones son mujeres que tuvieron la menopausia a los 40 o más. - Solo el 2.42% tuvo la menopausia antes de los 40.
Para crear un gráfico circular, utilizamos el comando pie. Por ejemplo, lo utilizaremos para observar la clasificación de los casos de cancer con un gráfico circular.
pie(table(datos$clase),
main="Gráfico para la clasificación de casos")
Note que despues de main vemos un texto. Este texto es el título principal (main) del gráfico. Podemos modificar el título, cambiando el texto dentro de las comillas.
Alternativamente, podemos utilizar la librería ggplot para crear un gráfico de pie con mejor apariencia.
tabla_clase <- data.frame(table(datos$clase))
names(tabla_clase) <- c("Clase","Frecuencia")
library(ggplot2)
ggplot(tabla_clase,
aes(x="", y=Frecuencia, fill=Clase)) +
geom_bar(stat="identity", width=1) +
coord_polar("y", start=0) + theme_void()
Creamos el gráfico de barras para la variable menopausia.
barplot(table(datos$menopausia),
xlab="Menopausia",
ylab="Frecuencia",
main="Distribución de tipos de menopausia")
Este gráfico acompaña a la tabla de frecuencias para una visualización rápida de la distribución de la variable.
name: yourturn template: section
.left-column[ #
.fancy[Ejercicio]]
–>
Ejercicios:
.right-column[ Realizar el análisis univariado de las variables del dataset que no han sido analizadas. Considerar lo siguiente:
Explorar la variable .acidinline[tumor-size] (tamaño del tumo) utilizando un gráfico y una tabla de frecuencias. Observar la frecuencia y proporciones de cada categoría. Interpretar resultados.
Explorar la variable .acidinline[deg-malig] (grado histológico del tumor) utilizando un gráfico y tabla de frecuencias. Observar la frecuencia y proporciones de cada categoría e interpretar resultados.
Explorar la variable .acidinline[breast] (lado) utilizando un gráfico y tabla de frecuencias. Observar la frecuencia y proporciones de cada categoría e interpretar resultados.
.left-column[ ## .fancy[.acidinline[08:00 minutes]]]