Ejemplo de correlación lineal

Se dispone de un data set con información sobre diferentes personas con respecto a su edad e Indice de Masa Corporal.Se quiere estudiar si existe una correlación entre su edad y su IMC.

R contiene funciones que permiten calcular los diferentes tipos de correlaciones y sus niveles de significancia: cor() y cor.test(). La segunda función es más completa ya que además de calcular el coeficiente de correlación indica su significancia (p-value) e intervalo de confianza.

#install.packages("readxl")
library(MASS)
library(ggplot2)
library(readxl)
## Warning: package 'readxl' was built under R version 4.3.3
datos_cor<-read_excel("Edad_IMC.xlsx")

En primer lugar se representan las dos variables mediante un diagrama de dispersión para intuir si existe relación lineal o monotona. Si no la hay, no tiene sentido calcular este tipo de correlaciones.

plot(datos_cor$Edad,datos_cor$IMC)

El diagrama de dispersión parece indicar una posible relación lineal positiva entre ambas variables.

Para poder elegir el coeficiente de correlación adecuado, se tiene que analizar el tipo de variables y la distribución que presentan. En este caso, ambas variables son cuantitativas continuas y pueden transformarse en rangos para ordenarlas, por lo que a priori los tres coeficientes podrían aplicarse. La elección se hará en función de la distribución que presenten las observaciones.

1.Análisis de normalidad

# Representación gráfica
library(ggplot2)
library(MASS)
par(mfrow = c(1, 2))
hist(datos_cor$Edad, breaks = 10, main = "", xlab = "Edad", border = "1")
hist(datos_cor$IMC, breaks = 10, main = "", xlab = "IMC",
     border = 1)

Ahora es importante hacer el diagrama de Quartiles para comprobar la linealidad de las variables con respecto a la normalidad

par(mfrow = c(1,2))
qqnorm(datos_cor$Edad, main = "Normal Q-Q Plot Edad")
qqline(datos_cor$Edad)
qqnorm(datos_cor$IMC, main = "Normal Q-Q Plot IMC")
qqline(datos_cor$IMC)

Test de Shapiro para determinar la normalidad de los datos

Edad

shapiro.test(datos_cor$Edad)
## 
##  Shapiro-Wilk normality test
## 
## data:  datos_cor$Edad
## W = 0.95558, p-value = 0.05809
shapiro.test(datos_cor$IMC)
## 
##  Shapiro-Wilk normality test
## 
## data:  datos_cor$IMC
## W = 0.97817, p-value = 0.4775

El análisis gráfico y el contraste de normalidad muestran que para la variable IMC se puede asumir normalidad, sin embargo, la variable Edad está en el límite. Siendo estrictos, este hecho podría excluir la posibilidad de utilizar el coeficiente de Pearson, dejando como alternativas el de Spearman o Kendall. Sin embargo, dado que la distribución de la Edad no se aleja mucho de la normalidad y que el coeficiente de Pearson tiene cierta robustez, para fines prácticos, sí que se podría utilizar Pearson siempre y cuando se tenga en cuenta este hecho en los resultados. Otra posibilidad es tratar de transformar las variables para mejorar su distribución.

2. Homocedasticidad

La homocedasticidad implica que la varianza se mantenga constante. Puede analizarse de forma gráfica representando las observaciones en un diagrama de dispersión y viendo si mantiene una homogeneidad en su dispersión a lo largo del eje X. Una forma cónica es un claro indicativo de falta de homocedasticidad.

#Homocedasticidad
fligner.test(datos_cor$Edad ~ datos_cor$IMC)
## 
##  Fligner-Killeen test of homogeneity of variances
## 
## data:  datos_cor$Edad by datos_cor$IMC
## Fligner-Killeen:med chi-squared = 14.537, df = 15, p-value = 0.4853

3. Presencia de datos atípicos

ggplot(datos_cor, aes(y = Edad)) + 
  stat_boxplot(geom = "errorbar",
               width = 0.15,
               color = 1) +  # Color barras error
  geom_boxplot(fill = 2,           # Color caja
               alpha = 0.5,        # Transparencia
               color = 1,          # Color del borde
               outlier.colour = 2)

ggplot(datos_cor, aes(y = IMC)) + 
  stat_boxplot(geom = "errorbar",
               width = 0.15,
               color = 1) +  # Color barras error
  geom_boxplot(fill = 2,           # Color caja
               alpha = 0.5,        # Transparencia
               color = 1,          # Color del borde
               outlier.colour = 2)

Como se puede ver no tenemos valores atípicos

4.Cálculo de correlación

cor(datos_cor$Edad,datos_cor$IMC, method = "pearson")
## [1] 0.7501525

El test muestran una correlación alta (>0.7). Sin embargo para poder considerar que existe realmente correlación entre las dos variables es necesario calcular su significancia, de lo contrario podría deberse al azar.

5. Significancia de la correlación

cor.test(x = datos_cor$Edad,
         y = datos_cor$IMC, 
         alternative = "two.sided",
         conf.level  = 0.95,
         method      = "pearson")
## 
##  Pearson's product-moment correlation
## 
## data:  datos_cor$Edad and datos_cor$IMC
## t = 7.8595, df = 48, p-value = 3.593e-10
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.5963179 0.8508417
## sample estimates:
##       cor 
## 0.7501525

6. Coeficiente de determinación R^2 (Tamaño del efecto)

R2_pearson <- cor(x = datos_cor$Edad,
                  y = datos_cor$IMC,
                  method = "pearson")
R2_pearson <- R2_pearson^2
R2_pearson
## [1] 0.5627288

El tamaño del efecto, es una medida que describe cuánta variabilidad de una variable (dependiente) es explicada por la otra variable (independiente). En este caso, el R^2 significa que aproximadamente el 56.27% de la variabilidad de la variable de IMC se puede explicar por la edad. Lo cual es útil para entender la relación entre estas dos variables en el contexto de una investigación o aplicación práctica

Ejemplo de coeficiente de correlación de Spearman

Cuando exista alguna duda acerca de si se cumplen las relativamente rigurosas premisas para la aplicación del coeficiente de correlación de Pearson, entonces debemos considerar el uso de alguna alternativa no paramétrica

cor(datos_cor$Edad, datos_cor$IMC, method = "spearman")
## [1] 0.7282435
cor.test(datos_cor$Edad, datos_cor$IMC, method = "spearman")
## Warning in cor.test.default(datos_cor$Edad, datos_cor$IMC, method =
## "spearman"): Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  datos_cor$Edad and datos_cor$IMC
## S = 5659.3, p-value = 2.052e-09
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.7282435

El coeficiente de correlación de Spearman ρ es aproximadamente 0.728. Este es un valor positivo y moderadamente alto, lo que indica una relación monótona positiva bastante fuerte entre la edad y el IMC. En otras palabras, a medida que la edad de los individuos en la muestra aumenta, su IMC también tiende a aumentar

El valor p asociado con esta prueba de correlación es muy pequeño, por tanto, podemos rechazar la hipótesis nula de que no hay correlación.

La hipótesis alternativa en este contexto es que la verdadera correlación de Spearman (ρ) no es igual a 0, lo que sugiere que hay alguna asociación no aleatoria entre las variables. El resultado del test apoya la hipótesis alternativa

Ejemplo de Coeficiente de correlación de Kendall

Se de desea investigar si existe una relación monótona entre la calidad de las libretas (1=Básica, 2=Estándar, 3=Premium) y la satisfacción del usuario (1= Muy insatisfecho, 2=Insatisfecho, 3=Neutral, 4=Satisfecho, 5=Muy satisfecho) ; es decir, si las libretas de mayor calidad tienden a correlacionarse con niveles más altos de satisfacción. Por tanto, se utilizará un coeficiente de correlación de Kendall para investigar esta asociación.

datos_mon<-read_excel("Libretas.xlsx", sheet = 1)
datos_mon
## # A tibble: 99 × 2
##    Libretas Satisfaccion    
##    <chr>    <chr>           
##  1 Estándar Satisfecho      
##  2 Básica   Neutral         
##  3 Básica   Muy insatisfecho
##  4 Estándar Satisfecho      
##  5 Básica   Muy satisfecho  
##  6 Estándar Satisfecho      
##  7 Básica   Muy satisfecho  
##  8 Estándar Muy insatisfecho
##  9 Estándar Satisfecho      
## 10 Básica   Satisfecho      
## # ℹ 89 more rows
str(datos_mon)
## tibble [99 × 2] (S3: tbl_df/tbl/data.frame)
##  $ Libretas    : chr [1:99] "Estándar" "Básica" "Básica" "Estándar" ...
##  $ Satisfaccion: chr [1:99] "Satisfecho" "Neutral" "Muy insatisfecho" "Satisfecho" ...
datos_mon$Libretas <- factor(datos_mon$Libretas, levels = c("Básica", "Estándar", "Premium"), ordered = TRUE)

datos_mon$Satisfaccion <- factor(datos_mon$Satisfaccion, levels = c("Muy insatisfecho", "Insatisfecho", "Neutral", "Satisfecho", "Muy satisfecho"), ordered = TRUE)

datos_mon$Libretas <- as.numeric(datos_mon$Libretas)
datos_mon$Satisfaccion <- as.numeric(datos_mon$Satisfaccion)
cor.test(datos_mon$Libretas, datos_mon$Satisfaccion, method = "kendall")
## 
##  Kendall's rank correlation tau
## 
## data:  datos_mon$Libretas and datos_mon$Satisfaccion
## z = 0.30779, p-value = 0.7582
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
##        tau 
## 0.02632207

El valor p es de 0.7582. Esto es muy por encima de los niveles de significancia comunes (0.05, 0.01), lo que indica que no hay suficiente evidencia para rechazar la hipótesis nula de que no hay asociación entre las dos variables. En otras palabras, basándonos en los datos proporcionados, no parece haber una relación significativa entre el tipo de libretas y el nivel de satisfacción reportado.

La baja magnitud del coeficiente tau de Kendall sugiere que cualquier relación monótona entre la calidad de las libretas y la satisfacción del cliente es débil.

Desde un punto de vista práctico, esto podría significar que la calidad percibida de las libretas (clasificada en categorías de “Básica”, “Estándar”, “Premium”) no tiene un impacto fuerte y estadísticamente significativo en la satisfacción de los usuarios