Un gráfico de densidad visualiza la distribución de datos cuantitativos en un intervalo o período de tiempo continuo. Este gráfico es una variación de un histograma que usa suavizado de kernel para trazar valores, lo que permite distribuciones más suaves suavizando el ruido.
Los picos de un gráfico de densidad ayudan a mostrar dónde se concentran los valores durante el intervalo.
#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_density() 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. La mayor densidad de datos está en el rango de edad de 15 a 45.
#grafico de densidad
ggplot(titanic, aes(Age))+
geom_density()
## Warning: Removed 263 rows containing non-finite values (stat_density).
Al crear este gráfico de desnsidad, R envia el mensaje:
Warning
Removed 263 rows containing non-finite values (stat_bin).
Indica que se han omitido 263 valores de la variable Age por ser valores nulos.
Podemos cambiar el color de la línea del grafico y el tamaño de la línea en la geometría.
#graficos de area de densidad
ggplot(titanic, aes(Age))+
geom_density(color="#589652", size=2)
## Warning: Removed 263 rows containing non-finite values (stat_density).
Crear un color de relleno del grafico de densidad utilizando colores hexadecimales y la estetica fill.
#graficos de area de densidad
ggplot(titanic, aes(Age))+
geom_density(fill="#589652")
## Warning: Removed 263 rows containing non-finite values (stat_density).
#Grafico densidad con variable cuantitativa Age y categorica Sex. Se utiliza la variable categórica para crear grupos de datos en las estica de datos fill =Sex.
ggplot(titanic, aes(Age, fill=Sex))+
geom_density()
## Warning: Removed 263 rows containing non-finite values (stat_density).
Se puden superponer los gráficos y mostrar ambos utilizando la estética alpha en la geometria.
En el gráfico de densidad se puede ver que existe una dispersión de datos (ancho del grafico) similar aunque los datos del grupofemenino están ligeramente mpas dispersos y una centralidad de datos (punto más alto de la curva, indica la media de datos) ligeramente mayor en los hombres.
Esto puede indicar que la media de edad de lis varones es mayor que el de las mujeres.
ggplot(titanic, aes(Age, fill=Sex))+
geom_density(alpha=0.45)
## Warning: Removed 263 rows containing non-finite values (stat_density).
Al crear subgrupo de datos por sexo, obtenemos dos nuevos dataFrames, female y male.
Si utilizamos la función mean() podemos calcular la media de los datos de la variable Age de la siguiente forma mean(female$Age).
#subgrupo de datos por sexo
female <- subset(titanic, titanic$Sex=="female")
male <- subset(titanic, titanic$Sex=="male")
nrow(female)
## [1] 466
nrow(male)
## [1] 843
#media de subgrupo de datos son valores nulos
# el resultado será NA
mean(female$Age)
## [1] NA
mean(male$Age)
## [1] NA
Si ejecutamos la función summary podemos ver un resumen de los datos, donde en la variable Age indica 263 valores nulos, este impide que podamos utilizar funciones aritméticas como mean().
#Resumen de datos dond Eel variable AGE tiene valores nulos o NA
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
Podemos utilizar dentro de la funciones aritméticas la función na.omit(variable) para eliminar los valores nulos de la variable Age.
De esta forma calculamos la media de datos para identificar cual grupo tiene un valor central mayor:
female: 28.68
male 30.58
#media de subgrupo de datos sin valores nulos
mean(na.omit(female$Age))
## [1] 28.68707
mean(na.omit(male$Age))
## [1] 30.58523
#mediana
median(na.omit(female$Age))
## [1] 27
median(na.omit(male$Age))
## [1] 28
Para conocer la dispersión de los datos por grupo Sex utilizamos la fucnión sd() y los dos subgrupos de datos.
El resultados de la desviación estandar nos muestara que:
female: 14.577
male: 14.28057
Una desviación estandar ligeramente mayor en los datos del Sexo femenino, como mostraba el gráfico de dispersión en la districución de datos.
#media de subgrupo de datos sin valores nulos
sd(na.omit(female$Age))
## [1] 14.577
sd(na.omit(male$Age))
## [1] 14.28057
Mostrar la media de los datos por grupo en el gráfico de densidad con la capa geom_vline().
Se añadio el título y el cambio de la etiqueta del eje x.
Se modifco la etqiueta de la leyenda.
ggplot(titanic, aes(Age, fill=Sex))+
geom_density(alpha=0.25)+
geom_vline(aes(xintercept=mean(na.omit(female$Age)), color="blue"),
linetype="dashed", size=1) +
geom_vline(aes(xintercept=mean(na.omit(male$Age)), color="red"),
linetype="dashed", size=1) +
labs(title="Grafico de densidad de datos por Edad y Sexo",x="Edad(año)", y = "Density")
## Warning: Removed 263 rows containing non-finite values (stat_density).
ggplot(titanic, aes(Age, fill=Sex))+
geom_density(alpha=0.25)+
geom_vline(aes(xintercept=mean(na.omit(female$Age)), color="blue"),
linetype="dashed", size=1) +
geom_vline(aes(xintercept=mean(na.omit(male$Age)), color="red"),
linetype="dashed", size=1) +
labs(title="Grafico de densidad de datos por Edad y Sexo",x="Edad(año)", y = "Density")+
guides(fill = guide_legend("Sexo"), color = FALSE)+
facet_wrap(~Sex)
## Warning: Removed 263 rows containing non-finite values (stat_density).
La mayor distribución en el gráfico esta en pasajeros (mujeres) con edad por debajo de la media.
#total de pasajeros por sexo
table(titanic$Sex)
##
## female male
## 466 843
#total de observaciones de mujeres
mujeres <- subset(titanic, titanic$Sex=="female")
# media edad de mujeres
mediaM <- mean(na.omit(female$Age))
#mujeres menores que la media
mujeresEdad_mayor <- subset(mujeres, mujeres$Age>mediaM)
#mujeres mayores de la media
mujeresEdad_menor <- subset(mujeres, mujeres$Age<mediaM)
Para eliminar una etiqueta se debe llamar el atributo, en este caso color= y darle el valor de FALSE, para que no se muestre.
ggplot(titanic, aes(Age, fill=Sex))+
geom_density(alpha=0.25)+
geom_vline(aes(xintercept=mean(na.omit(female$Age)), color="blue"),
linetype="dashed", size=1) +
geom_vline(aes(xintercept=mean(na.omit(male$Age)), color="red"),
linetype="dashed", size=1) +
labs(title="Grafico de densidad de datos por Edad y Sexo",x="Edad(año)", y = "Density")+
guides(fill = guide_legend("Sexo"), color = FALSE)
## Warning: Removed 263 rows containing non-finite values (stat_density).
Para agrupar graficos de densidad se debe utilizar la función position = “stack” en la geometría.
ggplot(titanic, aes(Age, fill=Sex))+
geom_density(alpha=0.25 , position = "stack")+
geom_vline(aes(xintercept=mean(na.omit(female$Age)), color="blue"),
linetype="dashed", size=1) +
geom_vline(aes(xintercept=mean(na.omit(male$Age)), color="red"),
linetype="dashed", size=1) +
labs(title="Grafico de densidad de datos por Edad y Sexo",x="Edad(año)", y = "Density")+
guides(fill = guide_legend("Sexo"), color = FALSE)
## Warning: Removed 263 rows containing non-finite values (stat_density).
Según datos y gráfico de densidad podemos decir que la variable Age con datos del sexo femenino se caracteriza por 28.68 +- 14.577 y los datos del sexo masculino 30.58 +- 14.28057, que indica una mayor centralidad de los datos del sexo masculino y una mayor dispersión en los datos del sexo femenino.
Se utiliza la geometria de histrograma con la diferencia que se le debe indicar que el valor de Y esta relacionado con la densidad geom_histogram(aes(y=..density..)) los demás parámetros dentro de la geometria de historgrama son esteticos.
ggplot(titanic, aes(Age))+
geom_histogram(aes(y=..density..), alpha=0.35, bins=20)+
geom_density(alpha=0.25 )+
geom_vline(aes(xintercept=mean(na.omit(female$Age)), color="blue"),
linetype="dashed", size=1) +
geom_vline(aes(xintercept=mean(na.omit(male$Age)), color="red"),
linetype="dashed", size=1) +
labs(title="Grafico de densidad de datos por Edad y Sexo",x="Edad(año)", y = "Density")+
guides(fill = guide_legend("Sexo"), color = FALSE)
## Warning: Removed 263 rows containing non-finite values (stat_bin).
## Warning: Removed 263 rows containing non-finite values (stat_density).
Crear un gráfico de densidad con la variable FARE y categorica Sex
Creo un gráfico de densidad con la variable FARE y categorica Sex Utilice en la geometria la estetica kernel = c(kernel=“gaussian”).
Calcule la media y los datos de pasajeros del sexo masculino, mayores y menores que la media.
Muestre los 10 primeros datos.