Cargar los datos
setwd("D:/Data")
datos <- read.csv("database.csv", header = TRUE, sep = ";", dec =".")
Variables Ordinales
Variable: Año
anio_v <- as.numeric(as.character(datos$Year))
# Agrupar años
anio_grupo <- cut(anio_v,
breaks = c(1980, 1990, 2000, 2010, 2020),
labels = c("1981-1990", "1991-2000", "2001-2010", "2011-2017"),
right = FALSE, include.lowest = TRUE, ordered_result = TRUE)
# Crear tabla de frecuencia
TDF_anios <- table(anio_grupo)
Tabla_anios <- as.data.frame(TDF_anios)
names(Tabla_anios) <- c("ANIOS", "ni")
Tabla_anios$hi_porcentaje <- (Tabla_anios$ni / sum(Tabla_anios$ni)) * 100
TDF_aniosFinal <- rbind(
Tabla_anios,
data.frame(ANIOS = "TOTAL",
ni = sum(Tabla_anios$ni),
hi_porcentaje = 100)
)
TDF_aniosFinal$ni <- round(TDF_aniosFinal$ni, 2)
TDF_aniosFinal$hi_porcentaje <- round(TDF_aniosFinal$hi_porcentaje, 2)
Tabla
print(TDF_aniosFinal)
## ANIOS ni hi_porcentaje
## 1 1981-1990 8405 22.05
## 2 1991-2000 9572 25.11
## 3 2001-2010 10653 27.95
## 4 2011-2017 9483 24.88
## 5 TOTAL 38113 100.00
GRÁFICA 1.1: Frecuencia Absoluta local
par(mar = c(5, 4, 4, 2) + 0.1)
barplot(TDF_aniosFinal$ni[TDF_aniosFinal$ANIOS != "TOTAL"],
names.arg = TDF_aniosFinal$ANIOS[TDF_aniosFinal$ANIOS != "TOTAL"],
main = "GRÁFICO 1.1: DISTRIBUCION DE AÑOS DE FABRICACION",
xlab = "AÑOS AGRUPADOS",
ylab = "CANTIDAD",
col = "skyblue",
las = 1,
cex.names = 0.8)

GRÁFICA 1.2: Frecuencia Absoluta globlaL
par(mar = c(5, 4, 4, 2) + 0.1)
barplot(TDF_aniosFinal$ni[TDF_aniosFinal$ANIOS != "TOTAL"],
names.arg = TDF_aniosFinal$ANIOS[TDF_aniosFinal$ANIOS != "TOTAL"],
main = "GRÁFICO 1.2: DISTRIBUCION DE AÑOS DE FABRICACION",
xlab = "AÑOS AGRUPADOS",
ylab = "CANTIDAD",
col = "darkorange",
las = 1,
ylim = c(0, sum(TDF_aniosFinal$ni)),
cex.names = 0.8)

GRÁFICA 1.3: Frecuencia Relativa local
par(mar = c(5, 4, 4, 2) + 0.1)
barplot(TDF_aniosFinal$hi_porcentaje[TDF_aniosFinal$ANIOS != "TOTAL"],
names.arg = TDF_aniosFinal$ANIOS[TDF_aniosFinal$ANIOS != "TOTAL"],
main = "GRÁFICO 1.3: DISTRIBUCIÓN POR AÑOS (%)",
xlab = "AÑO",
ylab = "PORCENTAJE",
col = "mediumseagreen",
las = 1,
cex.names = 0.8)

GRÁFICA 1.4: Frecuencia Relativa global
par(mar = c(5, 4, 4, 2) + 0.1)
barplot(TDF_aniosFinal$hi_porcentaje[TDF_aniosFinal$ANIOS != "TOTAL"],
names.arg = TDF_aniosFinal$ANIOS[TDF_aniosFinal$ANIOS != "TOTAL"],
main = "GRÁFICO 1.4: DISTRIBUCIÓN POR AÑOS (%)",
xlab = "AÑO",
ylab = "PORCENTAJE",
col = "orchid",
ylim = c(0, 100),
las = 1,
cex.names = 0.8)

GRÁFICA 1.5: Diagrama Circular
par(mar = c(0, 0, 0, 4), xpd = TRUE)
etiquetas_anios <- paste0(
TDF_aniosFinal$hi_porcentaje[TDF_aniosFinal$ANIOS != "TOTAL"], "%"
)
colores_anios <- rainbow(length(etiquetas_anios)) # Colores para cada año
pie(TDF_aniosFinal$hi_porcentaje[TDF_aniosFinal$ANIOS != "TOTAL"],
main = "GRÁFICO 1.5: DISTRIBUCIÓN POR AÑOS (CIRCULAR)",
radius = 0.5,
col = colores_anios,
labels = etiquetas_anios,
cex = 0.6)
legend("bottomright",
legend = TDF_aniosFinal$ANIOS[TDF_aniosFinal$ANIOS != "TOTAL"],
title = "AÑOS",
fill = colores_anios,
cex = 0.6)

Indicadores estadísticos
# MODA
frecuencia_max_anios <- max(TDF_anios)
moda_anios <- names(TDF_anios)[TDF_anios == frecuencia_max_anios]
print(paste("MODA(S) (AÑOS AGRUPADOS):", paste(moda_anios, collapse = ", ")))
## [1] "MODA(S) (AÑOS AGRUPADOS): 2001-2010"
# MEDIANA
anio_v_ORD <- sort(anio_v)
posMe <- (length(anio_v) + 1) / 2
mediana_anios <- anio_v_ORD[ceiling(posMe)] # Usamos ceiling por si no es número entero exacto
print(paste("MEDIANA (AÑOS AGRUPADOS):", mediana_anios))
## [1] "MEDIANA (AÑOS AGRUPADOS): 2001"
Variable: Transmisión
# Convertir columna a carácter
transmision_v <- as.character(datos$Transmission)
# Agrupar los valores que COMIENZAN con los términos indicados
transmision_grupo <- ifelse(grepl("^2-Wheel Drive", transmision_v, ignore.case = TRUE), "2-Wheel Drive",
ifelse(grepl("^4-Wheel Drive|^4-Wheel or All-Wheel Drive", transmision_v, ignore.case = TRUE), "4-Wheel or All-Wheel Drive",
ifelse(grepl("^All-Wheel Drive", transmision_v, ignore.case = TRUE), "All-Wheel Drive",
ifelse(grepl("^Auto$", transmision_v, ignore.case = TRUE), "Auto", # exacto "Auto"
ifelse(grepl("^Automatic", transmision_v, ignore.case = TRUE), "Automatic",
ifelse(grepl("^Front-Wheel Drive", transmision_v, ignore.case = TRUE), "Front-Wheel Drive",
ifelse(grepl("^Manual", transmision_v, ignore.case = TRUE), "Manual",
ifelse(grepl("^Rear-Wheel Drive", transmision_v, ignore.case = TRUE), "Rear-Wheel Drive", "OTROS"))))))))
# Quitar NA y vacíos
transmision_grupo <- transmision_grupo[!is.na(transmision_grupo) & transmision_grupo != ""]
# Ordenar como factor
transmision_grupo <- factor(transmision_grupo, levels = c("2-Wheel Drive", "4-Wheel or All-Wheel Drive",
"All-Wheel Drive", "Auto", "Automatic",
"Front-Wheel Drive", "Manual",
"Rear-Wheel Drive", "OTROS"))
# Crear tabla de frecuencia
TDF_transmision <- table(transmision_grupo)
Tabla_transmision <- as.data.frame(TDF_transmision)
names(Tabla_transmision) <- c("TIPO_TRANSMISION", "ni")
Tabla_transmision$hi_porcentaje <- (Tabla_transmision$ni / sum(Tabla_transmision$ni)) * 100
# Agregar total
TDF_transmisionFinal <- rbind(
Tabla_transmision,
data.frame(TIPO_TRANSMISION = "TOTAL",
ni = sum(Tabla_transmision$ni),
hi_porcentaje = 100)
)
# Redondear valores
TDF_transmisionFinal$ni <- round(TDF_transmisionFinal$ni, 2)
TDF_transmisionFinal$hi_porcentaje <- round(TDF_transmisionFinal$hi_porcentaje, 2)
# Filtrar datos sin la fila "TOTAL" para gráficos
TDF_transmisionFinal_limpio <- subset(TDF_transmisionFinal,
TIPO_TRANSMISION != "TOTAL" & TIPO_TRANSMISION != "" & !is.na(TIPO_TRANSMISION))
Tabla
print(TDF_transmisionFinal)
## TIPO_TRANSMISION ni hi_porcentaje
## 1 2-Wheel Drive 138 0.36
## 2 4-Wheel or All-Wheel Drive 103 0.27
## 3 All-Wheel Drive 30 0.08
## 4 Auto 0 0.00
## 5 Automatic 24035 63.06
## 6 Front-Wheel Drive 3 0.01
## 7 Manual 12376 32.47
## 8 Rear-Wheel Drive 485 1.27
## 9 OTROS 943 2.47
## 10 TOTAL 38113 100.00
Gráfica 2.1: Frecuencia Absoluta local
par(mar = c(5, 4, 4, 2) + 0.1)
barplot(TDF_transmisionFinal_limpio$ni,
names.arg = TDF_transmisionFinal_limpio$TIPO_TRANSMISION,
main = "GRÁFICO 2.1: DISTRIBUCION DE TIPOS DE TRANSMISIÓN",
xlab = "TIPO DE TRANSMISIÓN",
ylab = "CANTIDAD",
col = "lightblue",
las = 2,
cex.names = 0.7)

Gráfica 2.2: Frecuencia Absoluta global
par(mar = c(5, 4, 4, 2) + 0.1)
barplot(TDF_transmisionFinal_limpio$ni,
names.arg = TDF_transmisionFinal_limpio$TIPO_TRANSMISION,
main = "GRÁFICO 2.2: DISTRIBUCION DE TIPOS DE TRANSMISIÓN",
xlab = "TIPO DE TRANSMISIÓN",
ylab = "CANTIDAD",
col = "darkblue",
ylim = c(0, sum(TDF_transmisionFinal_limpio$ni)),
las = 2,
cex.names = 0.7)

Gráfica 2.3: Frecuencia Relativa local
par(mar = c(5, 4, 4, 2) + 0.1)
barplot(TDF_transmisionFinal_limpio$hi_porcentaje,
names.arg = TDF_transmisionFinal_limpio$TIPO_TRANSMISION,
main = "GRÁFICO 2.3: DISTRIBUCION DE TIPOS DE TRANSMISIÓN PORCENTAJE (%)",
xlab = "TIPO DE TRANSMISIÓN",
ylab = "PORCENTAJE",
col = "lightgreen",
las = 2,
cex.names = 0.7)

Gráfica 2.4: Frecuencia Relativa global
par(mar = c(5, 4, 4, 2) + 0.1)
barplot(TDF_transmisionFinal_limpio$hi_porcentaje,
names.arg = TDF_transmisionFinal_limpio$TIPO_TRANSMISION,
main = "GRÁFICO 2.4: DISTRIBUCION DE TIPOS DE TRANSMISIÓN PORCENTAJE (%)",
xlab = "TIPO DE TRANSMISIÓN",
ylab = "PORCENTAJE",
col = "tomato",
ylim = c(0, 100),
las = 2,
cex.names = 0.7)

Gráfica 2.5: Diagrama Circular
par(mar = c(0, 0, 0, 4), xpd = TRUE)
etiquetas_transmision <- paste0(
TDF_transmisionFinal_limpio$hi_porcentaje, "%"
)
colores_transmision <- rainbow(length(etiquetas_transmision))
pie(TDF_transmisionFinal_limpio$hi_porcentaje,
main = "GRÁFICO 2.5: DISTRIBUCIÓN DE TIPOS DE TRANSMISIÓN (CIRCULAR)",
radius = 0.5,
col = colores_transmision,
labels = etiquetas_transmision,
cex = 0.6)
legend("bottomright",
legend = TDF_transmisionFinal_limpio$TIPO_TRANSMISION,
title = "TIPO DE TRANSMISIÓN",
fill = colores_transmision,
cex = 0.6)

Indicadores estadísticos
# MODA
TDF_transmision <- table(transmision_grupo)
frecuencia_max_transmision <- max(TDF_transmision)
moda_transmision <- names(TDF_transmision)[TDF_transmision == frecuencia_max_transmision]
print(paste("MODA(S) (TIPO DE TRANSMISIÓN):", paste(moda_transmision, collapse = ", ")))
## [1] "MODA(S) (TIPO DE TRANSMISIÓN): Automatic"
# MEDIANA
transmision_ordenada <- sort(as.character(transmision_grupo))
pos_mediana <- (length(transmision_ordenada) + 1) / 2
mediana_transmision <- transmision_ordenada[ceiling(pos_mediana)] # Ceiling en caso de longitud impar
print(paste("MEDIANA (TIPO DE TRANSMISIÓN):", mediana_transmision))
## [1] "MEDIANA (TIPO DE TRANSMISIÓN): Automatic"