5/6/21

ESTADÍSTICA DESCRIPTIVA EN R



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.



Recomendados: (1), (2), (3).

 

No hay comentarios:

Publicar un comentario