1 Flujo de trabajo

2 Instalar paquetes

install.packages("PerformanceAnalytics")

3 Activar paquetes

library(tidyverse)
library(PerformanceAnalytics)

4 La base de datos: IRIS

5 Cargar la base de datos

iris

6 Ordenar y transformar los datos

iris_esp <-iris %>% 
  rename(Longitud_sepalos = Sepal.Length,
          Ancho_sepalos = Sepal.Width,
          Longitud_petalos = Petal.Length,
          Ancho_petalos = Petal.Width,
          Especie = Species) %>% 
  relocate(Especie, .before = 1) #Esto le indica a R que reubique a la variable Especie en la 1° columna.
head(iris_esp)
##   Especie Longitud_sepalos Ancho_sepalos Longitud_petalos Ancho_petalos
## 1  setosa              5.1           3.5              1.4           0.2
## 2  setosa              4.9           3.0              1.4           0.2
## 3  setosa              4.7           3.2              1.3           0.2
## 4  setosa              4.6           3.1              1.5           0.2
## 5  setosa              5.0           3.6              1.4           0.2
## 6  setosa              5.4           3.9              1.7           0.4

7 Visualizar los datos: Gráfico de dispersión

ggplot(iris_esp, aes(Ancho_petalos, Longitud_petalos)) +
  geom_point()

ggplot(iris_esp, aes(Ancho_petalos, Longitud_petalos, colour= Especie)) + 
  geom_point(shape = 17, size= 4, alpha= 1.0) +
  labs(x = "Ancho de pétalos (cm)",
       y = "Longitud de pétalos (cm)") +
  theme_minimal()

8 Matríz de correlación

names(iris_esp)
## [1] "Especie"          "Longitud_sepalos" "Ancho_sepalos"    "Longitud_petalos"
## [5] "Ancho_petalos"
# Paquete R base
# Los corchetes [ ] permiten seleccionar un subconjunto del dataframe.
# Dentro de los corchetes, 2:5 selecciona las columnas 2 a 5 del dataframe.
cor(iris_esp[, 2:5])
##                  Longitud_sepalos Ancho_sepalos Longitud_petalos Ancho_petalos
## Longitud_sepalos        1.0000000    -0.1175698        0.8717538     0.8179411
## Ancho_sepalos          -0.1175698     1.0000000       -0.4284401    -0.3661259
## Longitud_petalos        0.8717538    -0.4284401        1.0000000     0.9628654
## Ancho_petalos           0.8179411    -0.3661259        0.9628654     1.0000000
# Paquete R base
plot(iris_esp [2:5])

# Paquete PerformanceAnalytics
chart.Correlation(iris_esp [2:5], 
                  histogram = TRUE, 
                  method = "pearson", 
                  pch = 1)

La función chart.Correlation() del paquete PerformanceAnalytics en R se utiliza para crear una matriz de correlación visual con gráficos de dispersión, valores de correlación y ajustes lineales. Es especialmente útil para el análisis exploratorio de variables cuantitativas. # Actividad

# Gráfico de Correlación modificado
chart.Correlation(iris_esp [2:5], 
                  histogram = TRUE, 
                  method = "pearson", 
                  pch = 19, 
                  col= "blue")

9 La función cor.test()

Permite calcular y probar estadísticamente la correlación entre dos variables numéricas.No solo brinda el coeficiente de correlación (por ejemplo, de Pearson), sino también un test de hipótesis para evaluar si esa correlación es significativamente diferente de cero.

Argumentos principales:

Argumento Descripción
x, y Vectores numéricos a comparar.
method Método de correlación: “pearson” (por defecto), “kendall” o “spearman”.
alternative Hipótesis alternativa: “two.sided” (por defecto), “less”, “greater”.
conf.level Nivel de confianza del intervalo (por defecto: 0.95).

10 Análisis de Correlación

Vamos a realizar un análisis de correlación de variables para la especie Versicolor

VERSICOLOR <- iris_esp %>% 
  filter(Especie == "versicolor")
# Paquete PerformanceAnalytics
chart.Correlation(VERSICOLOR [2:5], histogram = TRUE, method = "pearson")

10.1 Relación entre la longitud y ancho de sépalos para la Variedad Versicolor

10.1.1 Supuestos

Necesitamos verificar el cumplimiento de los supuestos. En primer lugar vamos a evaluar el supuesto de distribución Normal de las variables (Normalidad).

H0: Se cumple el supuesto de Normalidad

H1: No se cumple el supuesto de Normalidad

shapiro.test(VERSICOLOR$Longitud_sepalos)
## 
##  Shapiro-Wilk normality test
## 
## data:  VERSICOLOR$Longitud_sepalos
## W = 0.97784, p-value = 0.4647
shapiro.test(VERSICOLOR$Ancho_sepalos)
## 
##  Shapiro-Wilk normality test
## 
## data:  VERSICOLOR$Ancho_sepalos
## W = 0.97413, p-value = 0.338

⚠️ No rechazar H₀ no prueba la normalidad, solo indica que no hay suficiente evidencia para afirmar que la variable no lo es.

¿Por qué?

Porque los tests estadísticos funcionan así:

  • El test busca señales en los datos que contradigan H₀.

  • Si encuentra señales fuertes (p < 0.05), rechaza H₀.

  • Si no encuentra señales fuertes (p ≥ 0.05), no la rechaza… pero eso puede ser:

    • Porque realmente H₀ es cierta o

    • Porque el test no tuvo suficiente potencia (por ejemplo, con muestras pequeñas o datos ruidosos).

En el caso de la prueba de normalidad para las variables longitud y ancho de sépalos , no se encontraron evidencias suficientes para afirmar que la variable no sigue distribución normal.
En términos simples: Las variables pueden considerarse con distribución aproximadamente normal.
Entonces aplicamos la prueba de Correlación de Pearson.

10.1.2 Correlación de Pearson

H0: \(\rho\) = 0
H1: \(\rho\) ≠ 0

cor.test(VERSICOLOR$Longitud_sepalos, 
         VERSICOLOR$Ancho_sepalos, 
         method = "pearson", 
         conf.level = 0.99)
## 
##  Pearson's product-moment correlation
## 
## data:  VERSICOLOR$Longitud_sepalos and VERSICOLOR$Ancho_sepalos
## t = 4.2839, df = 48, p-value = 8.772e-05
## alternative hypothesis: true correlation is not equal to 0
## 99 percent confidence interval:
##  0.2057718 0.7443655
## sample estimates:
##       cor 
## 0.5259107

Analicemos los resultados

  • t = 4.2839 (Valor del estadístico de prueba)

  • df = 48 grados de libertad

  • p-value = 8.772e-05

  • cor = 0.52 (coeficiente de correlación r)

  • IC 99%: [0.20 ; 0.74] (intervalo de confianza al 99% para la correlación muestral)

10.2 Relación entre la longitud y ancho de pétalos para la especie Versicolor

10.2.1 Supuestos

Comprobamos el supuesto de Normalidad.

H0: Se cumple el supuesto de Normalidad

H1: No se cumple el supuesto de Normalidad

shapiro.test(VERSICOLOR$Longitud_petalos)
## 
##  Shapiro-Wilk normality test
## 
## data:  VERSICOLOR$Longitud_petalos
## W = 0.966, p-value = 0.1585
shapiro.test(VERSICOLOR$Ancho_petalos)
## 
##  Shapiro-Wilk normality test
## 
## data:  VERSICOLOR$Ancho_petalos
## W = 0.94763, p-value = 0.02728

En el caso de que algún supuesto NO se cumpliera, tenemos dos opciones: transformar una o las dos variables o aplicar la prueba de correlación lineal de Spearman.

10.3 Correlación de Spearman

Planteamos hipótesis para las variables Longitud y Ancho de Pétalos

H0: \(\rho\) = 0
H1: \(\rho\) ≠ 0

cor.test(VERSICOLOR$Longitud_petalos, VERSICOLOR$Ancho_petalos, method = "spearman", conf.level = 0.99)
## Warning in cor.test.default(VERSICOLOR$Longitud_petalos,
## VERSICOLOR$Ancho_petalos, : Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  VERSICOLOR$Longitud_petalos and VERSICOLOR$Ancho_petalos
## S = 4435.5, p-value = 1.229e-11
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.7870096

¿Qué significa?

  • La prueba de Spearman se basa en los rangos de los datos.
  • Cuando hay valores repetidos (empates) en los datos, no se puede calcular un p-valor exacto. En su lugar, R utiliza una aproximación (basada en métodos como permutaciones o distribución asintótica).
  • No invalida el resultado, pero es una advertencia sobre cómo se calculó el p-valor.

Analicemos los resultados:

  • S = 4435.5 (valor del estadístico de prueba para Spearman)

  • p-value = 1.229e-11

  • rho = 0.7870096 (coeficiente de correlación de Spearman)

11 Correlación de Pearson vs. Spearman


Aspecto Correlación de Pearson Correlación de Spearman
Tipo de relación que evalúa Lineal Monótona ( Creciente o decreciente)
Supuestos principales

Normalidad bivariada

Linealidad

Homocedasticidad

No requiere normalidad

No requiere linealidad

No requiere homocedasticidad

Sensibilidad a valores atípicos (outliers) Alta, los valores extremos modifican drásticamente el coeficiente que usa medias y d.e. Baja (usa rangos, es robusta a outliers)

12 Preguntas para orientar la interpretación de la correlación lineal


📌 Sobre los supuestos para aplicar la correlación de Pearson

  • ¿Las variables presentan una distribución aproximadamente normal?
  • ¿Se verificó con gráficos (histogramas, QQ plot) y/o pruebas estadísticas (Shapiro-Wilk)?
  • ¿La relación entre las variables es lineal?
  • ¿Se evaluó mediante un diagrama de dispersión?
  • ¿Existe homogeneidad de la varianza (homocedasticidad)?
  • ¿Se observó visualmente en la nube de puntos o se aplicó alguna prueba?
  • ¿Hay presencia de valores atípicos que puedan distorsionar la correlación?
  • ¿Se identificaron y evaluaron su influencia?

📌 Sobre la relación entre variables

  • ¿Se observa una relación lineal clara entre las variables?
  • ¿La correlación observada es positiva, negativa o cercana a cero?
  • ¿Cuál es la magnitud del coeficiente de correlación? ¿Se interpreta como débil, moderada o fuerte?
  • ¿La relación observada tiene sentido desde el punto de vista teórico o con base en la literatura del área de estudio?

📌 Sobre el contexto y las variables

  • ¿Qué variables se están correlacionando y cual es su significado en el contexto del estudio?
  • ¿Son ambas variables cuantitativas continuas, como se requiere para aplicar la correlación de Pearson?
  • ¿Existen variables categóricas que podrían estar influyendo en la relación observada?

📌 Sobre el uso de la prueba de hipótesis

  • ¿La correlación obtenida es estadísticamente significativa?
  • ¿Qué indican el valor p y el intervalo de confianza respecto a la dirección y magnitud de la asociación?