#Plots
##Variables cualitativas - Categorias
##nominal ##Ordinal
#Variables Cuantitativas
##Continuas ##Discretas
##Clasificacion de las Varaibles
library(dslabs)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(readr)
library(titanic)
library(viridis)
## Cargando paquete requerido: viridisLite
library(viridisLite)
library(RColorBrewer)
library(RColorBrewer)
#datos
titanicPlots <- titanic_train
##Variables Cualitativas Nominales: sex, Embarket
##Variables cuantitativas : Pclass, Age, Parch
# Crear la tabla de frecuencias
tabla_sex <- table(titanicPlots$Sex)
tabla_sex
##
## female male
## 314 577
# Seleccionar una paleta de colores de viridis
colores <- viridis(2) # Usamos 2 colores de la paleta viridis
# Mejorar el gráfico de barras
barplot(tabla_sex,
main = "Distribución de Personas por Sexo en el Titanic", # Título descriptivo
ylab = "Frecuencia", # Etiqueta del eje Y
xlab = "Sexo", # Etiqueta del eje X
ylim = c(0, 700), # Límite del eje Y
col = colores, # Colores viridis
border = colores, # Color del borde de las barras
beside = TRUE, # Barras separadas
names.arg = c("Hombres", "Mujeres"), # Etiquetas personalizadas en el eje X
las = 1 # Rotación de los valores del eje Y
)
grid(nx=NA, ny=NULL, col="black", lty = "dotted", lwd =par("lwd") )
##Diagrama Torta (Circular)
# Calcular la tabla de frecuencias para las clases de pasajeros
clase <- table(titanicPlots$Pclass) # Cambiar 'class' por 'clase' para evitar conflicto
# Calcular los porcentajes
porcentajes_clase <- clase * 100 / sum(clase)
# Definir los colores usando una paleta de colores de RColorBrewer
coloresTorta <- brewer.pal(3, "Accent")
#nombres
etiquetas <- paste(names(clase), "=", names(clase), ": ", round(porcentajes_clase, 1), "%", sep = "")
# Definir los colores usando una paleta de colores de RColorBrewer
coloresTorta <- brewer.pal(length(clase), "Accent")
# Crear el gráfico de pastel con los colores personalizados y etiquetas
pie(clase,
labels = paste("Clase", names(clase)),
main = "Distribución de Pasajeros por Clase",
col = coloresTorta,
border = coloresTorta)
# Añadir una leyenda separada
legend("topright",
legend = names(clase),
fill = coloresTorta,
title = "Clases")
#Histograma
ages <- na.omit(titanicPlots$Age)
# Extender ligeramente los límites para cubrir todo el rango
breaks <- seq(floor(min(ages)), ceiling(max(ages)), by = 1)
# Histograma
hist(ages,
breaks = breaks, # Intervalos de 1 en 1
probability = TRUE,
main = "Distribución de Edades de los Pasajeros del Titanic", # Título del gráfico
xlab = "Edad", # Etiqueta del eje X
ylab = "Densidad",
xlim = c(min(ages), max(ages)), # Límite del eje X
col = "lightblue", # Color de las barras (opcional)
border = "black") # Borde de las barras (opcional)
# Agregar ticks personalizados en el eje X de 10 de 10
axis(1, at = seq(floor(min(ages)), ceiling(max(ages)), by = 10))
# Línea de densidad
lines(density(ages), col = "black", lwd = 2)
# Cálculo de la mediana y la media
median_age <- median(ages)
mean_age <- mean(ages)
# Función para calcular la moda
get_mode <- function(x) {
uniq_x <- unique(x)
uniq_x[which.max(tabulate(match(x, uniq_x)))]
}
# Calcular la moda
mode_age <- get_mode(ages)
# Añadir líneas verticales para la mediana y la media
abline(v = median_age, col = "blue", lwd = 2, lty = 2) # Línea de mediana
abline(v = mean_age, col = "red", lwd = 2, lty = 2) # Línea de media
abline(v = mode_age, col = "green", lwd = 2, lty = 2) # Línea de moda
# Añadir una leyenda
legend("topright", legend = c("Mediana", "Media","Moda"), col = c("blue", "red", "green"), lty = 2, lwd = 2)
Boxplot
ages <- na.omit(titanicPlots$Age)
# Boxplot sin valores atípicos
boxplot(ages, col="blue", ylab="Tasa de asesinatos", outline=FALSE, main="Boxplot", ylim=c(0,80))
# Calcular los cuartiles y el IQR
Q1 <- quantile(ages, 0.25)
Q3 <- quantile(ages, 0.75)
IQR <- Q3 - Q1
# Definir los límites para valores atípicos
lower_bound <- Q1 - 1.5 * IQR
upper_bound <- Q3 + 1.5 * IQR
# Filtrar los datos excluyendo valores atípicos
ages_no_outliers <- ages[ages >= lower_bound & ages <= upper_bound]
max_age_no_outliers <- max(ages_no_outliers)
# Obtener resumen de los datos
summary_data <- summary(ages)
# Adicionar los puntos al gráfico (media, mediana, Q1, Q3, mínimo, máximo)
points(mean(ages), col="red", pch=21) # Media
points(as.numeric(summary_data["Median"]), col="green", pch=22) # Mediana
points(as.numeric(summary_data["1st Qu."]), col="orange", pch=23) # Primer cuartil
points(as.numeric(summary_data["3rd Qu."]), col="purple", pch=24) # Tercer cuartil
points(as.numeric(summary_data["Min."]), col="brown", pch=25) # Mínimo
points(as.numeric(summary_data["Max."]), col="pink", pch=25) # Máximo
# Agregar texto para la media
text(mean(ages), 33, labels=paste("Media: ", round(mean(ages), 2)), col="red")
# Ajustar la leyenda con los nuevos datos
legend("topright",
legend = c("Media", "Mediana", "1er Cuartil", "3er Cuartil", "Mínimo", "Máximo"),
col = c("red", "green", "orange", "purple", "brown", "pink"),
pch = c(21, 22, 23, 24, 25, 25),
lty = 1)
Comparación variables cuantitativas y cualitativas
# Variables para el gráfico
x <- titanicPlots$Age
y <- titanicPlots$Fare
# Asegurarnos de que no haya valores NA en las variables que vamos a usar
x <- na.omit(x)
y <- na.omit(titanicPlots$Fare[!is.na(titanicPlots$Age)])
# Crear el gráfico de dispersión
plot(x, y,
main = "Edad vs Tarifa Pagada",
col = titanicPlots$Pclass, # Colorear por clase (Pclass)
pch = 20,
xlab = "Edad",
ylab = "Tarifa")
# Agregar una leyenda
legend("topright",
legend = paste("Clase", unique(titanicPlots$Pclass)),
fill = unique(titanicPlots$Pclass),
cex = 0.75)
# Crear un boxplot para comparar las edades según el género
boxplot(Age ~ Sex,
data = titanicPlots,
col = c("lightblue", "pink"), # Colores para cada grupo
outline = FALSE,
ylim = c(0, 80),
main = "Boxplot de Edades según Género",
names = c('Hombres','Mujeres'))
abline(h = mean(titanicPlots$Age, na.rm = TRUE), col = "blue", lwd = 2)
# Añadir texto para la media
text(x = 1.5,
y = mean(titanicPlots$Age, na.rm = TRUE) + 3, # Posicionar un poco más arriba de la media
labels = paste("Media: ", round(mean(titanicPlots$Age, na.rm = TRUE), 2) ),
col = "blue")
# Cargar los datos
titanicData <- titanicPlots
# Eliminar filas con NA en las columnas Age, Fare y Pclass simultáneamente
clean_data <- na.omit(titanicData[ c("Age", "Fare", "Pclass")])
# Definir las variables a usar
variable_x <- clean_data$Age
variable_y <- clean_data$Fare
# Configurar la ventana gráfica
par(mfrow = c(1, 2))
# Gráfico de dispersión
plot(variable_x, variable_y,
main = "Costo vs Edad",
col = clean_data$Pclass, # Colorear por clase
pch = 20,
xlab = "Edad",
ylab = "Costo")
# Leyenda
legend("topright",
legend = paste("clase", unique(clean_data$Pclass)),
fill = unique(clean_data$Pclass),
cex = 0.75)
# Boxplot de Fare por Pclass
boxplot(Fare ~ Pclass,
data = clean_data,
col = brewer.pal(3, "Set1"), # Colores para cada clase
outline = FALSE,
ylim = c(0, 300),
names = c('Edad','Costo','Clase'),
xlab = 'Clase',
ylab='Costo',
main = "Boxplot de Costo por Clase")
# Añadir una línea horizontal con la media de Fare
abline(h = mean(clean_data$Fare), col = "blue", lwd = 2)
# Añadir el valor de la media en el gráfico del boxplot
text(x = 1.5,
y = mean(clean_data$Fare) + 10,
labels = paste("Media: ", round(mean(clean_data$Fare), 2)),
col = "blue", cex = 0.75)