Un histograma visualiza la distribución y frecuencia datos durante un intervalo continuo o un período de tiempo determinado. Cada barra en un histograma representa la frecuencia tabulada en cada intervalo / bin.
Los histogramas ayudan a dar una estimación de dónde se concentran los valores, cuáles son los extremos y si hay huecos o valores inusuales.
#cargar librerias ggplot
#-----------------------------------------
library(ggplot2)
# leer datos de titanic
titanic <- read.csv("titanic.csv")
survival - Survival (0 = No; 1 = Yes)
class - Passenger Class (1 = 1st; 2 = 2nd; 3 = 3rd)
name - Name
sex - Sex
age - Age
sibsp - Number of Siblings/Spouses Aboard
parch - Number of Parents/Children Aboard
ticket - Ticket Number
fare - Passenger Fare
cabin - Cabin
embarked - Port of Embarkation (C = Cherbourg; Q = Queenstown; S = Southampton)
boat - Lifeboat (if survived)
body - Body number (if did not survive and body was recovered)
Se pueden construir histogramas con ggplot2 utilizando la geometría geom_histogram() el cual requiere solo 1 variable numérica como entrada.
En este ejemplo se utiliza la variable númerica Age y se muestra una distribución de la edad de los pasajeros del Titanic, donde el indica que la mayor cantidad de pasajeros esta entre las edades de 20 a 40 años.
ggplot(titanic, aes(Age))+
geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 263 rows containing non-finite values (stat_bin).
Al crear este gráfico de Histrograma, R envia dos mensajes:
stat_bin()using
bins = 30. Pick better value with
binwidth`.
Warning
Removed 263 rows containing non-finite values (stat_bin).
El primer mensaje indica que se han generado 30 bin o bloques de columna para crear el histograma, que es el valor predeterminado y que este parámetro se puede modificar con el parámetro bins. El segundo mensaje es un WARNING que indica que se han omitido 263 valores de la variable Age.
En este ejmplo utilizaremos 20 bins o columnas.
ggplot(titanic, aes(Age))+
geom_histogram(bins = 20)
## Warning: Removed 263 rows containing non-finite values (stat_bin).
Cambiar el color del borde de las barras del histograma para ver mejor los bins.
ggplot(titanic, aes(Age))+
geom_histogram( bins = 20, color="red")
## Warning: Removed 263 rows containing non-finite values (stat_bin).
Cambiar el color del relleno de las barras del histograma utilizando valores hexadecimales “#ff326c”.
ggplot(titanic, aes(Age))+
geom_histogram( bins = 20, color="red", fill="#ff769c")
## Warning: Removed 263 rows containing non-finite values (stat_bin).
Añadir una capa de etiqueta de datos donde es necesario utilizar la misma cantidad de bins en stat_bin(bins = 20).
ggplot(titanic, aes(Age))+
geom_histogram( bins = 20, color="red", fill="#ff769c")+
stat_bin(bins=20, geom="text", aes(label=..count..), vjust=-0.5)
## Warning: Removed 263 rows containing non-finite values (stat_bin).
## Warning: Removed 263 rows containing non-finite values (stat_bin).
Al desplegar los graficos con la variable Age, GGPLOT envia el emnsaje:
Removed 263 rows containing non-finite values (stat_bin)
Esto indica que existen valores nulos que están siendo eliminados del gráfico.Podemos ver el esto en el resumen de datos con la función summary(data).
#resumen de datos
summary(titanic)
## Pclass Survived Name Sex
## Min. :1.000 Min. :0.000 Length:1309 Length:1309
## 1st Qu.:2.000 1st Qu.:0.000 Class :character Class :character
## Median :3.000 Median :0.000 Mode :character Mode :character
## Mean :2.295 Mean :0.382
## 3rd Qu.:3.000 3rd Qu.:1.000
## Max. :3.000 Max. :1.000
##
## Age Sibsp Parch Ticket
## Min. : 0.1667 Min. :0.0000 Min. :0.000 Length:1309
## 1st Qu.:21.0000 1st Qu.:0.0000 1st Qu.:0.000 Class :character
## Median :28.0000 Median :0.0000 Median :0.000 Mode :character
## Mean :29.8811 Mean :0.4989 Mean :0.385
## 3rd Qu.:39.0000 3rd Qu.:1.0000 3rd Qu.:0.000
## Max. :80.0000 Max. :8.0000 Max. :9.000
## NA's :263
## Fare Cabin Embarked Boat
## Min. : 0.000 Length:1309 Length:1309 Length:1309
## 1st Qu.: 7.896 Class :character Class :character Class :character
## Median : 14.454 Mode :character Mode :character Mode :character
## Mean : 33.295
## 3rd Qu.: 31.275
## Max. :512.329
## NA's :1
## body home.dest
## Min. : 1.0 Length:1309
## 1st Qu.: 72.0 Class :character
## Median :155.0 Mode :character
## Mean :160.8
## 3rd Qu.:256.0
## Max. :328.0
## NA's :1188
Modificar las etiquetas de los ejes X / Y del gráfico.
ggplot(titanic, aes(Age))+
geom_histogram( bins = 20, color="red", fill="#ff769c")+
stat_bin(bins=20, geom="text", aes(label=..count..), vjust=-0.5) +
ylab("N° Pasajeros") + xlab("Edad")
## Warning: Removed 263 rows containing non-finite values (stat_bin).
## Warning: Removed 263 rows containing non-finite values (stat_bin).
Aunque el histograma muestra dos datos por columna al utilizar la variable categorica SEC, el color de los datos agrupados es el mismo.
Esto se debe a que en la geometria tiene definida un solo color fill=“#ff769c”.
ggplot(titanic, aes(Age, fill = Sex))+
geom_histogram( bins = 20, color="red", fill="#ff769c")+
stat_bin(bins=20, geom="text", aes(label=..count..), vjust=-0.5) +
ylab("N° Pasajeros") + xlab("Edad")
## Warning: Removed 263 rows containing non-finite values (stat_bin).
## Warning: Removed 263 rows containing non-finite values (stat_bin).
Diferentes colores en el histograma basado en el color generado de una variable categorica eliminando el parámetro fill=“#ff769c” de la geometria.
ggplot(titanic, aes(Age, fill = Sex))+
geom_histogram( bins = 20, color="red")+
stat_bin(bins=20, geom="text", aes(label=..count..), vjust=-0.5) +
ylab("N° Pasajeros") + xlab("Edad")
## Warning: Removed 263 rows containing non-finite values (stat_bin).
## Warning: Removed 263 rows containing non-finite values (stat_bin).
Aunque permite mostrar los histogramas por sexo y sus datos, en existen valores que se solapan visualmente por lo que es necesaro modificar la visualización utilizando FACETAS.
ggplot(titanic, aes(Age))+
geom_histogram( bins = 20, color="black", aes(fill=Sex))+
stat_bin(bins=20, geom="text", aes(label=..count..), vjust=-0.5) +
ylab("N° Pasajeros") + xlab("Edad") +
facet_wrap(~Sex)
## Warning: Removed 263 rows containing non-finite values (stat_bin).
## Warning: Removed 263 rows containing non-finite values (stat_bin).
ggplot(titanic, aes(Age))+
geom_histogram( bins = 20, color="black", aes(fill=Sex))+
stat_bin(bins=20, geom="text", aes(label=..count..), vjust=-0.5) +
ylab("N° Pasajeros") + xlab("Edad") +
facet_wrap(~Sex, ncol=1)
## Warning: Removed 263 rows containing non-finite values (stat_bin).
## Warning: Removed 263 rows containing non-finite values (stat_bin).
ggplot(titanic, aes(Age))+
geom_histogram( bins = 20, color="black", aes(fill=Sex))+
stat_bin(bins=20, geom="text", aes(label=..count..), vjust=-0.5) +
ylab("N° Pasajeros") + xlab("Edad") +
facet_wrap(~Sex)+
scale_x_continuous(breaks=c(0,10,20,30,40,50,60,70,80,90,100))+
scale_y_continuous(breaks = c(0,20,40,60,80,100,120))
## Warning: Removed 263 rows containing non-finite values (stat_bin).
## Warning: Removed 263 rows containing non-finite values (stat_bin).
Los resultados del histograma parecen estar bien, sin embargo los colores generados de la variable categórica no es el correcto. La variable Survived es una variable categorica con dos valores (0,1) por lo cual al ser asignada al atributo fill = Survived debiera generar dos colores.
¿Porqué ocurre este característica de degradado en el relleno?
ggplot(titanic, aes(Age))+
geom_histogram( bins = 20, color="black", aes(fill=Survived))+
stat_bin(bins=20, geom="text", aes(label=..count..), vjust=-0.5) +
ylab("N° Pasajeros") + xlab("Edad") +
scale_x_continuous(breaks=c(0,10,20,30,40,50,60,70,80,90,100))+
scale_y_continuous(breaks = c(0,20,40,60,80,100))+
facet_wrap(~Survived)
## Warning: Removed 263 rows containing non-finite values (stat_bin).
## Warning: Removed 263 rows containing non-finite values (stat_bin).
Si ejecutamos la funcion str(titanic) se muestra que la variable Survived es de tipo entero con valores 0 y 1, por lo cual GGPLOT asignará a los colores valores continuos entre 0 y 1, osea 0.1, 0.2, 0.3, 0.4… hasta llegar a 1, es por eso que hay un degradado de colores por cada valor generado.
str(titanic)
## 'data.frame': 1309 obs. of 14 variables:
## $ Pclass : int 1 1 1 1 1 1 1 1 1 1 ...
## $ Survived : int 1 1 0 0 0 1 1 0 1 0 ...
## $ Name : chr "Allen, Miss. Elisabeth Walton" "Allison, Master. Hudson Trevor" "Allison, Miss. Helen Loraine" "Allison, Mr. Hudson Joshua Creighton" ...
## $ Sex : chr "female" "male" "female" "male" ...
## $ Age : num 29 0.917 2 30 25 ...
## $ Sibsp : int 0 1 1 1 1 0 1 0 2 0 ...
## $ Parch : int 0 2 2 2 2 0 0 0 0 0 ...
## $ Ticket : chr "24160" "113781" "113781" "113781" ...
## $ Fare : num 211 152 152 152 152 ...
## $ Cabin : chr "B5" "C22 C26" "C22 C26" "C22 C26" ...
## $ Embarked : chr "S" "S" "S" "S" ...
## $ Boat : chr "2" "11" "" "" ...
## $ body : int NA NA NA 135 NA NA NA NA NA 22 ...
## $ home.dest: chr "St Louis, MO" "Montreal, PQ / Chesterville, ON" "Montreal, PQ / Chesterville, ON" "Montreal, PQ / Chesterville, ON" ...
Debemos decirle a GGPLOT que Survived es una variable categórica asignando el siguiente código fill= as.factor(Survived).
ggplot(titanic, aes(Age))+
geom_histogram( bins = 20, color="black", aes(fill=as.factor(Survived)))+
stat_bin(bins=20, geom="text", aes(label=..count..), vjust=-0.5) +
ylab("N° Pasajeros") + xlab("Edad") +
scale_x_continuous(breaks=c(0,10,20,30,40,50,60,70,80,90,100))+
scale_y_continuous(breaks = c(0,20,40,60,80,100))+
facet_wrap(~Survived)
## Warning: Removed 263 rows containing non-finite values (stat_bin).
## Warning: Removed 263 rows containing non-finite values (stat_bin).
Aunque utilicemos el siguiente código en GGPLOT la variable Survived sigue siendo de tipo númerica, int (entero).
Para transformar el tipo de variable en el data.frame, en este caso tipo factor (categorica) debemos utilizar la función as.factor(variable) y asignarla a la misma variable que transformamos.
titanic$Survived <- as.factor(titanic$Survived)
titanic$Sex<- as.factor(titanic$Sex)
Si ejecutamos la función levels(titanic$Survived) muestra que esta variable Survived tiene dos valores o levels: 0 y 1.
Estos mismos valores aparecen en el gráfico de histograma con la capa de facetas.
Si queremos cambiar los valores de los datos representados por levels debemos asiganarles nuevos valores o labels.
#mostrar levels de la variable
levels(titanic$Survived)
## [1] "0" "1"
#modificar los levels de la variable Survived con nuevos datos
titanic$Survived <- factor(titanic$Survived,
levels = c(0,1),
labels = c("no sobrevivieron","sobrevivieron"))
#mostrar nuevo slevels de la variable
levels(titanic$Survived)
## [1] "no sobrevivieron" "sobrevivieron"
Si visualizamos nuevamente el gráfico de histograma los datos de Survived en la capa facet() cambiaron.
Dr le añadio titulo , subtitulo y se modifico la leyenda de “Sobrevivientes”.
ggplot(titanic, aes(Age))+
geom_histogram( bins = 20, color="black", aes(fill=as.factor(Survived)))+
stat_bin(bins=20, geom="text", aes(label=..count..), vjust=-0.5) +
ylab("N° Pasajeros") + xlab("Edad") +
scale_x_continuous(breaks=c(0,10,20,30,40,50,60,70,80,90,100))+
scale_y_continuous(breaks = c(0,20,40,60,80,100))+
facet_wrap(~Survived) +
labs(title="Diatribución de la edad por Sexo de pasajeros que sobrevivieron",
subtitle="Datos del Titanic - 1912") +
guides(fill = guide_legend("Sobrevivientes"))
## Warning: Removed 263 rows containing non-finite values (stat_bin).
## Warning: Removed 263 rows containing non-finite values (stat_bin).
Podemos eliminar el título “Sobrevivientes” en la leyenda a la derecha del gráfico porque no sería necesario con los cambios realizados, para ello utilizamos el siguiente código guides(fill = guide_legend("")).
ggplot(titanic, aes(Age))+
geom_histogram( bins = 20, color="black", aes(fill=as.factor(Survived)))+
stat_bin(bins=20, geom="text", aes(label=..count..), vjust=-0.5, size=3) +
ylab("N° Pasajeros") + xlab("Edad") +
facet_wrap(~Survived) +
labs(title="Diatribución de la edad por Sexo de pasajeros que sobrevivieron",
subtitle="Datos del Titanic - 1912") +
guides(fill = guide_legend("")) +
scale_x_continuous(breaks=c(0,10,20,30,40,50,60,70,80,90,100))+
scale_y_continuous(breaks = c(0,20,40,60,80,100))
## Warning: Removed 263 rows containing non-finite values (stat_bin).
## Warning: Removed 263 rows containing non-finite values (stat_bin).
Para fortalecer el análisis de los datos utilizaremos tablas de contingencias.
En el histrograma un elemento de interés es que se muestran pasajeros con X meses por lo que crearemos un subgrupo de datos a partir de un dataframe utilizando la funcion subset(tabla, filtro) para identificar cuantos pasajeros eran menores de meses. Utilizaremos un filtro o condición para extraer solo las filas cuyo valor de Age sea menor a 1.
#Número de sobrevivientes del titanic
table(titanic$Sex,titanic$Survived)
##
## no sobrevivieron sobrevivieron
## female 127 339
## male 682 161
#--------------------------------------------------------
#Sub grupo de pasajeros con mas de 18 y menos de 40 años
Edades <- subset(titanic, titanic$Age>=18 | titanic$Age<=40)
#Número de pasajeros con mas de 18 y menos de 40 años
nrow(Edades)
## [1] 1046
#Número de pasajeros con mas de 18 y menos de 40 años
table(Edades$Sex,Edades$Survived)
##
## no sobrevivieron sobrevivieron
## female 96 292
## male 523 135
#porcentaje
nrow(Edades) / nrow(titanic) *100
## [1] 79.90833
#--------------------------------------------------------
#Sub grupo de pasajeros con X meses de edad en el titanic
bebes <- subset(titanic, titanic$Age<=1)
#Número menores con X meses en el titanic
nrow(bebes)
## [1] 22
#Número menores con X meses que sobrevivieron por sexo
table(bebes$Sex,bebes$Survived)
##
## no sobrevivieron sobrevivieron
## female 1 8
## male 4 9
#porcentaje
nrow(bebes) / nrow(titanic) *100
## [1] 1.680672
Según datos y gráfico de histograma de las 500 personas que sobrevivieron el mayor grupo estaba entre las edades de 18 y 40 años represntando el 79.9% de los pasajeros, de estos 22 eran pasajeros menores de un año, El Rango del grupo que fallecio estaba entre 18 y 45 años aproximadamente y se identifican 5 menores de un año.
Crear un gráfico de histograma con la variable FARE.
Mostrar etiquetas de datos.
¿Que puede interpretar?
Crear un gráfico de histograma con la variable Fare y la variable categorica Pclass .
Mostrar etiquetas de datos.
Modificar la cantidad de bins.
Incluya titulo y leyendas de ejes X /Y
¿Que observa en el gráfico?
Modifique los valores de la variable categorica Pclass por:
Primera Clase, Segunda Clase, Tercera Clase.