# Instalación y carga de paquetes necesarios
## Para manipulación y visualización de datos
if (!require(tidyverse)) install.packages("tidyverse")
## Para estadísticas descriptivas
if (!require(psych)) install.packages("psych")
9 Cálculos en R
9.1 Base de datos
El conjunto de datos IRIS es uno de los conjuntos de datos más utilizados en la literatura de estadística y aprendizaje automático. Fue introducido por Ronald Fisher en 1936 y contiene mediciones de cuatro características morfológicas de flores de tres especies distintas de iris: Iris setosa, Iris versicolor e Iris virginica. Este dataset es ampliamente empleado para ilustrar técnicas de análisis estadístico y clasificación supervisada (Fisher, 1936).
Referencia del dataset: Fisher, R. (1936). Iris [Dataset]. UCI Machine Learning Repository. https://doi.org/10.24432/C56C76
Acceso a recursos: El script completo con el ejemplo desarrollado y la base de datos IRIS pueden descargarse en el siguiente repositorio: https://github.com/Ludwing-MJ/MTCDPR_sin_agrupar
9.2 Configuración del Entorno de Trabajo
Antes de comenzar cualquier análisis, es fundamental configurar adecuadamente el entorno de trabajo. Esto implica instalar y cargar los paquetes necesarios, así como explorar y comprender la estructura del conjunto de datos que se utilizará. En esta sección, se detallarán los pasos para configurar el entorno de trabajo y realizar una exploración inicial del conjunto de datos.
Se recomienda crear un proyecto nuevo en R para organizar adecuadamente el trabajo de estadística descriptiva. Se sugiere seguir los siguientes pasos para establecer un entorno de trabajo ordenado:
Crear una nueva carpeta en el directorio de trabajo denominada “Estadistica_Descriptiva_Iris”
Crear un nuevo proyecto de R dentro de esta carpeta utilizando RStudio
Crear un script donde se realizará y documentará el análisis estadístico
9.2.1 Instalación y Carga de Paquetes
Se procede a instalar y cargar los paquetes necesarios para el análisis estadístico descriptivo. Se utiliza la función condicional if(!require())
para verificar si el paquete está instalado antes de proceder con la instalación:
9.2.2 Carga y exploración de los Datos
El dataset iris
es un conjunto de datos clásico en estadística que contiene mediciones de características morfológicas de flores de tres especies del género Iris. Este dataset está incluido por defecto en R, lo que facilita su acceso para fines didácticos y de análisis estadístico.
# Cargar el dataset iris
data(iris)
# Explorar la estructura del dataset
str(iris)
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
La función str()
proporciona información sobre la estructura del dataset:
object
: Nombre del objeto a examinar
# Visualizar las primeras observaciones
head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
La función head()
muestra las primeras filas del dataset:
x
: Objeto del cual mostrar las primeras filasn
: Número de filas a mostrar (por defecto 6)
# Resumen básico del dataset
summary(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Species
setosa :50
versicolor:50
virginica :50
La función summary()
proporciona un resumen estadístico básico:
object
: Objeto del cual generar el resumenmaxsum
: Número máximo de elementos a mostrar para factores (por defecto 7)digits
: Número de dígitos significativos para valores numéricos
9.3 Medidas de Tendencia Central
9.3.1 Media Aritmética
La función mean()
calcula la media aritmética de un vector numérico.
x
: Vector numérico del cual se calculará la media.trim
: Fracción de valores a recortar de cada extremo del vector (por defecto 0).na.rm
: Valor lógico que indica si se deben remover los valoresNA
(por defectoFALSE
).
# Calcular la media para la longitud del sépalo
mean(iris$Sepal.Length)
[1] 5.843333
9.3.2 Mediana
La función median()
calcula la mediana de un vector numérico.
x
: Vector numérico del cual se calculará la mediana.na.rm
: Valor lógico que indica si se deben remover los valoresNA
(por defectoFALSE
).type
: Tipo de algoritmo para calcular la mediana (entero entre 1 y 9).
# Calcular la mediana para la longitud del sépalo
median(iris$Sepal.Length)
[1] 5.8
9.3.3 Moda
No existe una función base en R para calcular la moda directamente. Se puede crear una función personalizada para calcular la moda que maneja valores faltantes y múltiples modas:
# Función para calcular la moda
<- function(x) {
moda # Eliminar valores NA
<- na.omit(x)
x
# Verificar si el vector está vacío
if (length(x) == 0) return(NA_character_)
# Calcular la frecuencia de cada valor
<- table(x)
tabla
# Identificar el/los valores con mayor frecuencia
<- max(tabla)
max_frecuencia <- names(tabla[tabla == max_frecuencia])
modas
# Verificar si todos los valores son únicos (sin moda)
if (max_frecuencia == 1) return(NA_character_)
# Retornar la moda como un string separado por comas
return(paste(modas, collapse = ", "))
}
Una vez ya definida la función para calcular la moda (tarea que se realiza la cada vez que se abre el software y se desea cargar la función en el entorno de trabajo). Se procede a calcular la moda para la longitud del sépalo:
# Calcular la moda para la longitud del sépalo
moda(iris$Sepal.Length)
[1] "5"
9.4 Medidas de Dispersión
9.4.1 Rango
La función range()
devuelve los valores mínimo y máximo de un vector numérico. La función diff()
calcula la diferencia entre los valores máximo y mínimo.
x
: Vector numérico del cual se calculará el rango.na.rm
: Valor lógico que indica si se deben remover los valoresNA
(por defectoFALSE
).
# Obtener el valor minimo y máximo de la logitud del sépalo
range(iris$Sepal.Length)
[1] 4.3 7.9
# Calcular el rango para la longitud del sépalo
diff(range(iris$Sepal.Length))
[1] 3.6
9.4.2 Varianza
La función var()
calcula la varianza de un vector numérico.
x
: Vector numérico del cual se calculará la varianza.y
: Vector numérico opcional para calcular la covarianza.na.rm
: Valor lógico que indica si se deben remover los valoresNA
(por defectoFALSE
).use
: Método para manejar valores faltantes (por defecto “everything”).
# Calcular la varianza para la longitud del sépalo
var(iris$Sepal.Length)
[1] 0.6856935
9.4.3 Desviación Estándar
La función sd()
calcula la desviación estándar de un vector numérico.
x
: Vector numérico del cual se calculará la desviación estándar.na.rm
: Valor lógico que indica si se deben remover los valoresNA
(por defectoFALSE
).
# Calcular la desviación estándar para la longitud del sépalo
sd(iris$Sepal.Length)
[1] 0.8280661
9.4.4 Coeficiente de Variación
No existe una función base en R para calcular el coeficiente de variación directamente. Se puede crear una función personalizada o calcularse mediante operaciones aritméticas:
# Función para calcular el coeficiente de variación
<- function(x) {
cv sd(x) / mean(x)) * 100
(
}# Calcular el coeficiente de variación para la longitud del sépalo
cv(iris$Sepal.Length)
[1] 14.17113
# Calcular el coeficiente de variación para la longitud del sépalo
sd(iris$Sepal.Length) / mean(iris$Sepal.Length)) * 100 (
[1] 14.17113
9.5 Medidas de Posición Relativa
9.5.1 Cuartiles
La función quantile()
calcula los cuartiles y otros percentiles de un vector numérico.
x
: Vector numérico del cual se calcularán los cuantiles.probs
: Vector de probabilidades (0.25 para Q₁, 0.75 para Q₃).na.rm
: Valor lógico que indica si se deben remover los valoresNA
(por defectoFALSE
).type
: Método de cálculo (entero entre 1 y 9, por defecto 7).
# Calcular cuartiles para la longitud del sépalo
quantile(iris$Sepal.Length, probs = c(0.25, 0.5, 0.75))
25% 50% 75%
5.1 5.8 6.4
# Calcular Q1 y Q3 por separado
<- quantile(iris$Sepal.Length, 0.25); Q1 Q1
25%
5.1
<- quantile(iris$Sepal.Length, 0.75); Q3 Q3
75%
6.4
9.5.2 Rango intercuartílico
La función IQR()
calcula en automático el rango intercuartílico (Q1-Q3) de un vector numérico.
x
: Vector numérico del cual se calcularán los cuantiles.na.rm
: Valor lógico que indica si se deben remover los valoresNA
(por defectoFALSE
).type
: Método de cálculo (entero entre 1 y 9, por defecto 7).
# Rango intercuartílico
IQR(iris$Sepal.Length)
[1] 1.3
9.5.3 Percentiles
La función quantile()
también se utiliza para calcular percentiles.
x
: Vector numérico del cual se calcularán los cuantiles.probs
: Vector de probabilidades (ej. 0.10 para el percentil 10, 0.90 para el percentil 90).na.rm
: Valor lógico que indica si se deben remover los valoresNA
(por defectoFALSE
).type
: Método de cálculo (entero entre 1 y 9, por defecto 7).
# Calcular percentiles específicos
quantile(iris$Sepal.Length, c(0.10, 0.90))
10% 90%
4.8 6.9
# Calcular el percentil 95
quantile(iris$Sepal.Length, 0.95)
95%
7.255
9.6 Análisis Completo con el Paquete psych
La función describe()
del paquete psych
calcula múltiples estadísticas descriptivas en una sola línea de código.
x
: Data frame o vector numérico.na.rm
: Remover valores faltantes (por defectoTRUE
).trim
: Fracción para la media recortada (por defecto 0.1).skew
: Calcular asimetría (por defectoTRUE
).kurtosis
: Calcular curtosis (por defectoTRUE
).ranges
: Calcular rangos (por defectoTRUE
).
# Análisis descriptivo completo del dataset iris
describe(iris[,1:4])
vars n mean sd median trimmed mad min max range skew
Sepal.Length 1 150 5.84 0.83 5.80 5.81 1.04 4.3 7.9 3.6 0.31
Sepal.Width 2 150 3.06 0.44 3.00 3.04 0.44 2.0 4.4 2.4 0.31
Petal.Length 3 150 3.76 1.77 4.35 3.76 1.85 1.0 6.9 5.9 -0.27
Petal.Width 4 150 1.20 0.76 1.30 1.18 1.04 0.1 2.5 2.4 -0.10
kurtosis se
Sepal.Length -0.61 0.07
Sepal.Width 0.14 0.04
Petal.Length -1.42 0.14
Petal.Width -1.36 0.06
Interpretación de los Estimadores de la Función describe()
La función describe()
proporciona los siguientes estimadores estadísticos:
n: Número de observaciones válidas (sin valores faltantes)
mean: Media aritmética de los datos
sd: Desviación estándar muestral
median: Mediana o percentil 50
trimmed: Media recortada al 10% (elimina el 10% de valores extremos de cada cola)
mad: Desviación absoluta mediana, medida robusta de dispersión
min: Valor mínimo observado
max: Valor máximo observado
range: Diferencia entre el valor máximo y mínimo
skew: Coeficiente de asimetría. Valores cercanos a 0 indican distribución simétrica, valores positivos indican asimetría hacia la derecha, valores negativos hacia la izquierda
kurtosis: Coeficiente de curtosis. Valores cercanos a 0 indican distribución normal, valores positivos indican distribución leptocúrtica (más puntiaguda), valores negativos indican distribución platicúrtica (más aplanada)
se: Error estándar de la media, calculado como sd/√n
9.7 Visualización de Datos
La visualización de datos es una parte esencial del análisis estadístico descriptivo, ya que permite identificar patrones, tendencias y anomalías en los datos de manera gráfica. A continuación, se presentan ejemplos de diferentes tipos de gráficos que se pueden utilizar para visualizar el dataset iris
.
9.7.1 Diagrama de Caja (Boxplot)
El diagrama de caja es una herramienta útil para visualizar la distribución de una variable numérica y comparar distribuciones entre diferentes grupos. Este gráfico muestra la mediana, los cuartiles (Q1 y Q3), los valores atípicos y los bigotes (valores mínimo y máximo dentro de un rango razonable).
# Diagrama de caja para visualizar la longitud del sépalo por especie
ggplot(iris, aes(x = Species, y = Sepal.Length, fill = Species)) +
geom_boxplot() +
theme_minimal() +
labs(title = "Distribución de la Longitud del Sépalo por Especie",
y = "Longitud del Sépalo (cm)")
Interpretación:
La línea dentro de la caja representa la mediana.
Los bordes de la caja representan los cuartiles Q1 (25%) y Q3 (75%).
Los bigotes se extienden hasta los valores mínimo y máximo dentro de 1.5 veces el rango intercuartílico (IQR).
Los puntos fuera de los bigotes son considerados valores atípicos.
9.7.2 Histograma
El histograma es un gráfico que muestra la distribución de frecuencia de una variable numérica. Divide los datos en intervalos (bins) y muestra la frecuencia de observaciones en cada intervalo.
# Histograma de la longitud del sépalo
ggplot(iris, aes(x = Sepal.Length)) +
geom_histogram(binwidth = 0.1, fill = "steelblue", color = "black") +
theme_minimal() +
labs(title = "Distribución de la Longitud del Sépalo",
x = "Longitud del Sépalo (cm)",
y = "Frecuencia")
Interpretación:
El eje x representa los valores de la variable.
El eje y representa la frecuencia de observaciones en cada intervalo.
La forma del histograma puede indicar la simetría, asimetría y curtosis de la distribución.
9.7.3 Gráfico de Dispersión (Scatter Plot)
El gráfico de dispersión se utiliza para visualizar la relación entre dos variables numéricas. Cada punto en el gráfico representa una observación, con la posición del punto determinada por los valores de las dos variables.
# Gráfico de dispersión entre la longitud y el ancho del sépalo
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
geom_point() +
theme_minimal() +
labs(title = "Relación entre Longitud y Ancho del Sépalo",
x = "Longitud del Sépalo (cm)",
y = "Ancho del Sépalo (cm)")
Interpretación:
El gráfico muestra la relación entre dos variables.
Los patrones en el gráfico pueden indicar correlación positiva, negativa o ninguna correlación.
Se pueden utilizar diferentes colores o formas para representar diferentes grupos.