| Product | Age | Gender | Education | MaritalStatus | Usage | Fitness | Income | Miles |
|---|---|---|---|---|---|---|---|---|
| TM195 | 18 | Male | 14 | Single | 3 | 4 | 29562 | 112 |
| TM195 | 19 | Male | 15 | Single | 2 | 3 | 31836 | 75 |
| TM195 | 19 | Female | 14 | Partnered | 4 | 3 | 30699 | 66 |
| TM195 | 19 | Male | 12 | Single | 3 | 3 | 32973 | 85 |
| TM195 | 20 | Male | 13 | Partnered | 4 | 2 | 35247 | 47 |
| TM195 | 20 | Female | 14 | Partnered | 3 | 3 | 32973 | 66 |
| TM195 | 21 | Female | 14 | Partnered | 3 | 3 | 35247 | 75 |
| TM195 | 21 | Male | 13 | Single | 3 | 3 | 32973 | 85 |
| TM195 | 21 | Male | 15 | Single | 5 | 4 | 35247 | 141 |
| TM195 | 21 | Female | 15 | Partnered | 2 | 3 | 37521 | 85 |
Estadística Descriptiva en Rstudio
Estadística Descriptiva
La estadística descriptiva es como un mapa que te ayuda a navegar por el mundo de los datos. Te permite resumir y visualizar tus datos de forma clara y concisa, para que puedas entenderlos mejor y tomar decisiones más informadas.
Con fines de lograr ejemplificar las técnicas descriptivas usaremos el siguiente conjunto de Datos
Datos de Clientes
El siguiente dataset contiene datos sobre la compra de cintas de correr por parte de 180 clientes de los cuales se obtuvo la siguiente información:
Product: Modelo de la cinta de correr
Age: Número de años del cliente
Gender: Género del cliente
Education: Educación en nº de años del cliente
MaritalStatus: Estado civil del cliente
Usage: Promedio de veces que el cliente desea utilizar la cinta cada semana
Fitness: Percepción de condición física del cliente (5 - muy en forma, 1 - muy poco en forma)
Ingresos: Ingresos del cliente
Miles: Millas previstos de trote
Medidas de Tendencia Central
Una medida de tendencia central es un valor numérico que resume la distribución de un conjunto de datos, proporcionando información sobre el centro alrededor del cual se agrupan los datos.
- Media: Promedio de todos los valores.
- Mediana: Valor que divide el conjunto de datos en dos mitades iguales.
- Moda: Valor que aparece con más frecuencia.
Si se desea obtener información sobre los Kilómetros previstos de trote(miles) de los clientes, podemos calcular sus medidas de tendencia Central:
(mean(datos$Miles)) # Media[1] 103.1944
(median(datos$Miles)) # Mediana[1] 94
(which.max(table(datos$Miles))) # Moda (Retorna Valor mas repetido y su posición)85
12
(max(table(datos$Miles))) # Retorna La frecuencia del valor de la moda[1] 27
Se puede interpretar que:
Promedio: Los clientes preveen trotar en promedio 103.19 millas.
_Mediana:_El 50% de los clientes prevee trotar 94 millas o menos.
Moda: Los clientes preveen trotar más frecuentemente 85 millas.
Medidas de dispersión
Una medida de dispersión es un valor numérico que caracteriza la variabilidad de un conjunto de datos respecto a una medida de tendencia central.
Rango: Diferencia entre el valor máximo y el mínimo. Es una medida simple, pero no muy robusta.
Varianza: Promedio de las diferencias cuadráticas entre cada valor y la media. Es una medida más sensible a los valores atípicos que el rango.
Desviación estándar: Raíz cuadrada de la varianza. Es una medida más interpretable que la varianza y tiene las mismas unidades que los datos originales.
Coeficiente de variación: Razón entre la desviación estándar y la media, expresada como un porcentaje. Es útil para comparar la dispersión de conjuntos de datos con diferentes unidades o medias.
Si es de interés conocer que tan variado es el grupo de clientes respecto a la edad
(range(datos$Age)) # Retorna el valor mínimo y máximo de los datos[1] 18 50
(sd(datos$Age)) # Calcula la desviación estándar[1] 6.943498
(var(datos$Age)) # Calcula la varianza[1] 48.21217
((sd(datos$Age)/mean(datos$Age))*100) # Coeficiente de Variacion[1] 24.11867
De las medidas de dispersión se puede interpretar que:
Rango: La diferencia de edad entre los clientes llega hasta los 32 años.
Descviación Estandar: La edad de los clientes se desvía 6.94 años de la media muestral.
Varianza: Las distancias al cuadrado entre la edad del cliente y la media muestral es de 48.21.
Coeficiente de Variación: La edad de los clientes se dispersa en un 24.11% alrededor de la media que es 28.79.
La función summary es una herramienta poderosa para obtener un resumen estadístico de un objeto de datos, como un vector, dataframe, factor o matriz. Genera información sobre medidas de tendencia central, dispersión , posición y frecuencias, si la variable es del tipo “categórica”, la información proporcionada corresponde a sus frecuencias.
summary(datos) Product Age Gender Education MaritalStatus
TM195:80 Min. :18.00 Female: 76 Min. :12.00 Partnered:107
TM498:60 1st Qu.:24.00 Male :104 1st Qu.:14.00 Single : 73
TM798:40 Median :26.00 Median :16.00
Mean :28.79 Mean :15.57
3rd Qu.:33.00 3rd Qu.:16.00
Max. :50.00 Max. :21.00
Usage Fitness Income Miles
Min. :2.000 Min. :1.000 Min. : 29562 Min. : 21.0
1st Qu.:3.000 1st Qu.:3.000 1st Qu.: 44059 1st Qu.: 66.0
Median :3.000 Median :3.000 Median : 50597 Median : 94.0
Mean :3.456 Mean :3.311 Mean : 53720 Mean :103.2
3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.: 58668 3rd Qu.:114.8
Max. :7.000 Max. :5.000 Max. :104581 Max. :360.0
Visualización de Datos en Rstudio
Rstudio facilita la creación de gráficos para estadística descriptiva. Permite crear histogramas, diagramas de barras y cajas para visualizar distribuciones de frecuencia, medidas de tendencia central y dispersión mediante sus propias funciones, una alternativa es ggplot2, esta libreria ofrece mayor flexibilidad para crear gráficos más complejos permitiendo personalizar elementos del gráfico con mayor calidad en los resultados.
Gráfico de Barras
Un gráfico de barras es una representación gráfica de datos que utiliza barras rectangulares de longitud proporcional a los valores que representan. Se utiliza principalmente para comparar valores de una variable en diferentes categorías o momentos.
En el caso de la variable Product contiene informacion de el tipo de cinta que usa cada cliente, si deseamos analizar cual es el producto mas solicitado un gráfico de barras puede ser adecuado
Grafico de Barras R base
(absFreq <- data.frame(table(datos$Product))) # asigna el data frame con las frecuencias a la variable absFreq Var1 Freq
1 TM195 80
2 TM498 60
3 TM798 40
barplot(height = absFreq$Freq, #Altura de las barras
names.arg = absFreq$Var1, # Etiquetas de las barras
col = c("azure", "bisque", "darkseagreen"), # Colores para las barras
main = "Gráficos de Barras en R base", # Titulo del Gráfico
xlab = "Producto", # Etiqueta en eje x
ylab = "Fracuencias Absolutas") # Etiqueta en eje yGráfico de Barras ggplot
Es indispensable cargar la libreria ggplot2, si no esta insatalada ejecutar install.packages("ggplot2").
library(ggplot2)
ggplot(datos, aes(x = Product, fill = Product)) + #Define los elementos a Graficar
geom_bar(stat = "count", color = "black", width = .7) + # Tipo de gráfico
labs(x = "Producto", y = "Frecuencia Absoluta", title = "Gráfico de Barras en ggplot") + # Etiquetas de los ejes
guides(fill = FALSE) + # Remover cajas informativas
scale_fill_manual(values = c("azure", "bisque", "darkseagreen")) + # Define los colores manualmente
theme_bw() # Tema del gráficoDe los gráficos podemos interpretar que el producto TM798 es la cinta para correr más popular con 80 clientes, seguida por TM498 con 60 clientes y finalmente la cinta TM195 es la menos popular con 40 clientes. Esta información puede ser útil para propietarios de tiendas de fitness, fabricantes y consumidores para tomar decisiones sobre stock, marketing etc.
Histogramas
En un histograma, las barras se adyacen sin espacios entre sí, mostrando la distribución de la frecuencia de los datos en diferentes intervalos. En cambio, en un gráfico de barras, las barras están separadas, lo que permite comparar valores específicos entre diferentes categorías. Se puede decir que los histogramas se realizan para variables continuas, mientras que el gráfico de barras para variables categoricas.
En el caso de la variable Income contiene informacion de el ingreso de cada cliente, si deseamos analizar cual es la situación economica de los clientes, un histograma nos puede ayudar a observar como se distribuye el ingreso, usaremos los Ingresos en escala logaritmica.
Histograma en R base
n <- nrow(datos)
hist(log(datos$Income), # Datos para Histograma en escala Logaritmica
breaks = 1 + (3.3*log(n)), # Numero de Clases
col = "darkseagreen", # Color de las barras
ylab = "Frecuencias Relativas", # Etiqueta eje y
xlab = "Ingresos", #etiqueta eje x
main = "Histograma en R base") # Titulo del gráficoHistograma en ggplot
ggplot(datos, aes(x = log(Income))) + # Datos para el histograma
geom_histogram(bins = ceiling(1 + (3.3*log(n))), fill = "darkseagreen", col = "black", closed = "left") + # Histograma y características
labs(x = "Ingresos", y = "Frecuencias Relativas", title = "Histograma en ggplot", stat) + # etiquetas del gráfico
theme_bw() #tema del gráficoPodemos Interpretar que el histograma muestra que la mayoría de los clientes tienen ingresos entre $ 10.5 y $11.1, con una distribución asimétrica a la derecha, lo que indica una mayor concentración de clientes en los rangos de ingresos más bajos. Esto sugiere que la mayoría de los clientes son de clase media y ofrecer cintas para correr a precios accesibles para este público objetivo.
Gráfico de Cajas (Box-Plot)
El gráfico de cajas es una herramienta visual que permite comprender la distribución de un conjunto de datos numéricos. Muestra la mediana, el rango intercuartílico, los valores máximo y mínimo y los valores atípicos.
Continuando con la variable Income, análizamos su distribución, esta vez desde otro enfoque gráfico
Gráfico de cajas(Box- Plot) R base
boxplot(x = log(datos$Income),
col = "darkseagreen",
horizontal = TRUE,
ylim =c(10.2, 11.6),
xlab = "Ingreso",
main = "Box-Plot en R base")Gráfico de cajas(Box- Plot) ggplot
ggplot(datos, aes(x = log(Income))) + # Datos para el gráfico
geom_boxplot(fill = "darkseagreen") + # Gráfico boxplot
ylim(-1,1) + # Límites en el eje y
xlim(10.2, 11.6) +
stat_boxplot(geom = "errorbar", width = 0.25) + # Lineas de Error
labs(x = "Ingreso", title = "Box-Plot en ggplot") + # Etiquetas de los ejes
theme_bw() + # Tema del Gráfico
theme(axis.text.y = element_blank(), axis.ticks.y = element_blank()) # Elimina numeros en el eje y