La estadística descriptiva es una rama de la estadística que se encarga de recopilar, organizar, presentar y analizar un conjunto de datos con el fin de describir sus características. En esta sección, realizaremos algunos ejemplos de análisis estadístico descriptivo en R; en la siguiente tabla podemos ver los estadísticos más usados:
Estadístico | Código en R |
---|---|
Media | mean(data) |
Mediana | median(data) |
Moda (o modas) | freq_table <- br="" data="" decreasing="TRUE)" sort="" table=""> max_freq <- br="" freq_table=""> modes <- as.numeric="" br="" freq_table="=" max_freq="" names=""> modes ->->-> |
Varianza | var(data) |
Desviación Estándar | sd(data) |
Coeficiente de Variación | (sd(data) / mean(data)) * 100 |
Mínimo valor | min(data) |
Máximo valor | max(data) |
Rango | range(data)[2] - range(data)[1] |
Rango Intercuartílico | IQR(data) |
Rango Interdecílico | diff(quantile(data, c(0.1, 0.9))) |
Cuartiles (Q1, Q2, Q3) | paste(quantile(data, c(0.25, 0.5, 0.75)), collapse = ", ") |
Deciles | paste(quantile(data, seq(0.1, 0.9, by = 0.1)), collapse = ", ") |
Percentiles | paste(quantile(data, seq(0.01, 0.99, by = 0.01)), collapse = ", ") |
Media Ponderada | weighted.mean(data, w = rep(1, length(data))) |
Media Geométrica | exp(mean(log(data))) |
Media Armónica | length(data) / sum(1 / data) |
Media Cuadrática | sqrt(mean(data^2)) |
Coeficiente de Asimetría | sum((data - mean(data))^3) / ((length(data) - 1) * sd(data)^3) |
Coeficiente de Curtosis | sum((data - mean(data))^4) / ((length(data) - 1) * sd(data)^4) - 3 |
Resumen (media, media, cuartiles) | summary(data) |
Resumen de Estadísticas (con librería "pastecs") | stat.desc(data) |
Para efectos de ejemplo, dividiremos el análisis en dos grupos: datos puntuales y datos agrupados. Así mismo, utilizaremos una data predefinida de R denominada “mtcars” y su variable “mpg” (millas por galón).
A. DATOS PUNTUALES
1. Medidas de Tendencia Central
- Media (promedio). Suma de todos los valores dividida por el número de valores.
- Mediana. Valor central cuando los datos están ordenados.
- Moda: Valor que más se repite en el conjunto de datos.
```{r}
# Cargamos las librerías necesarias
library(dplyr)
library(tidyr)
library(ggplot2)
library(pastecs)
library(e1071)
# Cargamos la data 'mtcars' y la variable 'mpg' (millas por galón)
data <- mtcars$mpg
# Media
mean(data)
# Mediana
median(data)
# Moda (todas las modas que contenga la data)
data <- mtcars$mpg
freq_table <- sort(table(data), decreasing = TRUE)
max_freq <- freq_table[1]
modes <- as.numeric(names(freq_table[freq_table == max_freq]))
modes
```
2. Medidas de Dispersión
- Desviación estándar. Cuánto se desvían los datos respecto a la media.
- Varianza. Cuadrado de la desviación estándar.
- Coeficiente de variación. Relación entre la desviación estándar y la media, expresada en porcentaje.
```{r}
# Varianza
var(data)
# Desviación Estándar
sd(data)
# Coeficiente de Variación
cv <- (sd(data) / mean(data)) * 100
cv
```
3. Medidas de Posición
- Rango: Diferencia entre el valor máximo y el mínimo.
- Cuartiles, Deciles, Percentiles: Valores que dividen el conjunto de datos en partes iguales.
```{r}
# Rango
range(data)
diff(range(data))
# Cuartiles
quantile(data)
# Deciles
quantile(data, probs = seq(0, 1, by = 0.1))
# Percentiles
quantile(data, probs = seq(0, 1, by = 0.01))
```
4. Medidas de Forma
- Asimetría: Grado de simetría de la distribución de los datos.
- Curtosis: Grado de concentración de los datos en el centro de la distribución.
```{r}
# Asimetría
skewness(data)
# Curtosis
kurtosis(data)
```
5. Tablas de Frecuencias
Tablas que resumen los datos en diferentes categorías.
```{r}
# Tabla de Frecuencias
table(data)
```
6. Representación gráfica
Representaciones visuales de los datos mediante gráfico de barras, histogramas, boxplots, diagramas de dispersión, entre otros.
```{r}
# Gráficos de Barras
barplot(table(data), main = "Gráfico de Barras de MPG", xlab = "Millas por Galón", ylab = "Frecuencia")
# Histogramas
hist(data, main = "Histograma de MPG", xlab = "Millas por Galón")
# Boxplots
boxplot(data, main = "Boxplot de MPG", ylab = "Millas por Galón")
# Diagramas de Dispersión
plot(data, main = "Diagrama de Dispersión de MPG", xlab = "Index", ylab = "Millas por Galón")
```
B. DATOS AGRUPADOS
Utilizaremos la misma data para crear una tabla de frecuencias organizada por intervalos:
1. Tabla de frecuencias
```{r}
# Cargamos las librerías necesarias
library(dplyr)
library(tidyr)
library(ggplot2)
library(pastecs)
library(e1071)
# Cargamos la data 'mtcars' y la variable 'mpg' (millas por galón)
data <- mtcars$mpg
# Para determinar el número de clases, existen diferentes reglas como Freedman, Sturges, Scott entre otras; para el ejemplo usaremos la regla de Freedman-Diaconis.
n <- length(data)
iqr <- IQR(data)
num_clases <- ceiling((max(data) - min(data)) / (2 * iqr / (n^(1/3))))
# Calculamos los intervalos
rango <- range(data)
ancho_intervalo <- (rango[2] - rango[1]) / num_clases
breaks <- seq(rango[1], rango[2], by = ancho_intervalo)
# Creamos la tabla de frecuencias agrupada
data_agrupada <- cut(data, breaks = breaks, right = FALSE)
tabla_frec <- table(data_agrupada)
frec_df <- as.data.frame(tabla_frec)
names(frec_df) <- c("Intervalo", "Frecuencia")
# Calcularmos frecuencias acumuladas y relativas
frec_df$`Frecuencia Acumulada` <- cumsum(frec_df$Frecuencia)
frec_df$`Frecuencia Relativa` <- frec_df$Frecuencia / sum(frec_df$Frecuencia)
frec_df$`Frecuencia Relativa Acumulada` <- cumsum(freq_df$`Frecuencia Relativa`)
# Mostramos la tabla de frecuencias
print(frec_df)
```
2. Medidas de Tendencia Central
- Media Agrupada: Utiliza el punto medio de los intervalos y sus frecuencias.
- Mediana Agrupada: Calculada a partir del intervalo de la mediana.
- Moda Agrupada: Calculada a partir del intervalo modal.
```{r}
# Media grupal
puntos_medios <- (head(breaks, -1) + tail(breaks, -1)) / 2
frec_df$`Puntos Medios` <- puntos_medios
media_agrupada <- sum(puntos_medios * frec_df$Frecuencia) / sum(frec_df$Frecuencia)
# Mediana grupal
N_2 <- sum(frec_df$Frecuencia) / 2
mediana_clas <- frec_df[frec_df$`Frecuencia Acumulada` >= N_2, ][1, ]
mediana_agrupada <- mediana_clas$`Puntos Medios`
# Moda grupal
moda_clas <- frec_df[which.max(frec_df$Frecuencia), ]
moda_agrupada <- moda_clas$`Puntos Medios`
cat("Media Grupal:", media_agrupada, "\n")
cat("Mediana Grupal:", mediana_agrupada, "\n")
cat("Moda Grupal:", moda_agrupada, "\n")
```
3. Medidas de dispersión
La varianza y la desviación estándar agrupadas, utilizan los puntos medios y sus frecuencias.
```{r}
# Varianza y desviación estándar grupal
media_cuad <- sum((puntos_medios^2) * frec_df$Frecuencia) / sum(frec_df$Frecuencia)
varianza_agrup <- media_cuad - (media_agrupada^2)
ds_agrupada <- sqrt(varianza_agrup)
cat("Varianza Grupal:", varianza_agrup, "\n")
cat("Desviación Estándar Grupal:", ds_agrupada, "\n")
```
4. Medidas de posición
Cuartiles, deciles y percentiles agrupados a partir de la distribución de frecuencias.
```{r}
# Cuartiles grupales
cuartiles <- quantile(data, probs = c(0.25, 0.5, 0.75))
# Deciles grupales
deciles <- quantile(data, probs = seq(0.1, 0.9, by = 0.1))
# Percentiles grupales
percentiles <- quantile(data, probs = seq(0.01, 0.99, by = 0.01))
cat("Cuartiles Grupal:\n", cuartiles, "\n")
cat("Deciles Grupal:\n", deciles, "\n")
cat("Percentiles Grupal:\n", percentiles, "\n")
```
5. Medidas de forma
```{r}
# Calcular la asimetría y curtosis
asimetria_agr <- sum(frec_df$Frecuencia * ((puntos_medios - media_agrupada) / ds_agrupada)^3) / sum(frec_df$Frecuencia)
curtosis_agr <- sum(frec_df$Frecuencia * ((puntos_medios - media_agrupada) / ds_agrupada)^4) / sum(frec_df$Frecuencia) - 3
cat("Asimetría:", asimetria_agr, "\n")
cat("Curtosis:", curtosis_agr, "\n")
```
4. Gráficos para Datos Agrupados
```{r}
# Histograma
ggplot(data = freq_df, aes(x = `Intervalo`, y = Frecuencia)) +
geom_bar(stat = "identity") +
labs(title = "Histograma de Frecuencia", x = "Intervalo", y = "Frecuencia")
# Gráfico de Densidad
ggplot(data = mtcars, aes(x = mpg)) +
geom_density(fill = "blue", alpha = 0.5) +
labs(title = "Gráfico de Densidad de mpg", x = "mpg", y = "Densidad")
# Polígono de Frecuencia
plot(puntos_medios, tabla_frec, type = "b", main = "Polígono de Frecuencia de MPG", xlab = "Punto Medio", ylab = "Frecuencia")
```
CÓDIGO DE RESUMEN
```{r}
# Cargar el dataset
data <- mtcars$mpg
# Cálculo de los estadísticos descriptivos
descriptive_stats <- data.frame(
Estadístico=c("Media", "Mediana", "Moda", "Desviación Estándar", "Varianza",
"Coeficiente de Variación", "Rango", "Rango Intercuartílico",
"Rango Interdecílico", "Rango Semi Intercuartílico",
"Media Ponderada", "Media Geométrica", "Media Armónica",
"Media Cuadrática", "Coeficiente de Asimetría",
"Coeficiente de Curtosis"),
Valor=c(mean(data),
median(data),
as.numeric(names(sort(table(data), decreasing = TRUE)[1])),
sd(data),
var(data),
(sd(data) / mean(data)) * 100,
range(data)[2] - range(data)[1],
IQR(data),
diff(quantile(data, c(0.1, 0.9))),
IQR(data) / 2,
weighted.mean(data, w = rep(1, length(data))),
exp(mean(log(data))),
length(data) / sum(1 / data),
sqrt(mean(data^2)),
sum((data - mean(data))^3) / ((length(data) - 1) * sd(data)^3),
sum((data - mean(data))^4) / ((length(data) - 1) * sd(data)^4) - 3))
print(descriptive_stats)
```
NOTA:
Como se había indicado, "mtcars" es un conjunto de datos predefinido de R, lo que significa que podemos acceder a su información simplemente mencionándolo en nuestro código, sin embargo, cuando queremos utilizar nuestro propio conjunto de datos, necesitamos especificar su ubicación.
Supongamos que tenemos un dataset en formato CSV llamado "Mi_data.csv". Para cargar esta data desde la carpeta de ubicación, seguimos estos pasos:
- Presionamos Ctrl + Shift + H para abrir el navegador de archivos.
- Ubicamos la carpeta donde se encuentra el archivo.
- Seleccionamos el archivo y presionamos el botón "Open".
- Luego, utilizamos el siguiente código para cargar el dataset en R:
```{r}
mi_data <- read.csv("Mi_data.csv")
head(mi_data)
```
Para seleccionar la variable que deseamos analizar, utilizamos:
```{r}
data <- mi_data$nombre_de_la_variable
```
Nos aseguramos de reemplazar "nombre_de_la_variable" con el nombre de la columna específica que se desea analizar.
Como vimos, la estadística descriptiva es una herramienta importante para entender y describir los datos, y R nos facilita el cálculo de los estadísticos y su presentación en tablas y gráficos.
No hay comentarios:
Publicar un comentario