Esta sección inicial se basa en el artículo titulado \(\text{"Thirteen Ways to Look at the Correlation Coefficient" de JOSEPH LEE RODGERS y W. ALAN NICEWANDER*}\). En dicho sección, se exploran diversas perspectivas para interpretar las correlaciones. A lo largo de esta sección, se expondrán estas interpretaciones, así como la aplicación práctica de las mismas.
La covarianza y la correlación son medidas que ayudan a entender cómo dos variables están relacionadas entre sí. La covarianza se basa en calcular la suma de los productos cruzados de las variables centradas, sin ajustarse por la escala de las variables. Aunque la covarianza a menudo se pasa por alto en libros de introducción, la varianza (que no se pasa por alto) es en realidad un caso especial de la covarianza, es decir, la varianza es la covarianza de una variable consigo misma.
La covarianza de dos variables no tiene límites en poblaciones infinitas, y en una muestra tiene límites indeterminados y una interpretación complicada. Por lo tanto, la covarianza a menudo no es una medida descriptiva útil de la relación entre dos variables, porque su valor depende de las escalas de medición de X e Y.
El coeficiente de correlación es una versión escalada de la covarianza. Se calcula dividiendo la covarianza por las desviaciones estándar de las dos variables. Esto reescala la covarianza y la coloca en un intervalo entre -1 y +1. Por lo tanto, la interpretación de la correlación como una medida de la relación entre dos variables suele ser más manejable que la de la covarianza. Además, facilita la comparación entre diferentes correlaciones.
\[\text{Cor(X,Y)} ≡\text{Cov}(X_{\text{estándar}}, Y_{\text{estándar}})\tag{1.1}\]
Partimos de
\[ \begin{equation} X_{\text{estándar}} = \frac{x - \bar{x}}{S_x} \\ Y_{\text{estándar}} = \frac{y - \bar{y}}{S_y} \end{equation}\tag{1.2} \]
Así:
\[\begin{equation} \begin{split} \text{Cov}(X_{\text{estándar}} Y_{\text{estándar}}) & ≡ \mathbb{E}[(X_{\text{estándar}})(Y_{\text{estándar}})] \\ & ≡ \mathbb{E}\left[\left(\frac{X - \bar{X}}{S_x}\right) \left(\frac{Y - \bar{Y}}{S_y}\right)\right] \\ & ≡ \mathbb{E}[(X - \bar{X})(Y - \bar{Y})] \cdot \frac{1}{S_xS_y} \\ & ≡ \mathbb{E}[XY - X\bar{Y} - \bar{X}Y + \bar{X}\bar{Y}]\cdot\frac{1}{S_xS_y} \\ & ≡ \left(\mathbb{E}[XY] - \mathbb{E}[X]\mathbb{E}[Y] - \mathbb{E}[X]\mathbb{E}[Y] + \mathbb{E}[X]\mathbb{E}[Y]\right) \cdot \frac{1}{S_xS_y} \\ & ≡ \frac{\mathbb{E}[XY] - \mathbb{E}[X]\mathbb{E}[Y]}{S_xS_y} \\ & ≡ \frac{\text{Cov}(X,Y)}{S_xS_y} \\ & ≡ \text{Cor}(X,Y)\hspace{2cm}\blacksquare \end{split} \end{equation}\]
data("iris")
# 1. Correlación como Covarianza Estandarizada
# Seleccionar las variables de interés
sepal_length <- iris$Sepal.Length
m1_ <- mean(sepal_length)
s1_ <- sd(sepal_length)
petal_width <- iris$Petal.Width
m2_ <- mean(petal_width)
s2_ <- sd(petal_width)
# Variables estandarizadas
stand_x <- (sepal_length - m1_)/s1_
stand_y <- (petal_width - m2_)/s2_
# Calcular la correlación entre las variables
correlation <- cor(sepal_length, petal_width)
# Calcular la covarianza entre las variables
covariance <- cov(stand_x, stand_y)
# Calcular la covarianza estandarizada (covarianza / (desviación estándar * desviación estándar))
#std_covariance <- covariance / (sd(sepal_length) * sd(petal_width))
# Imprimir los resultados
print(paste("Correlacion:", correlation))## [1] "Correlacion: 0.817941126271576"
## [1] "Covarianza: 0.817941126271576"
La relación entre correlación y regresión se representa más fácilmente en
\[ r = b_{Y \cdot X}\left(\frac{S_{X}}{S_{Y}}\right) = b_{X \cdot Y}\left(\frac{S_{Y}}{S_{X}}\right) \tag{2.1} \]
donde \(b_{Y\cdot X}\), y \(b_{X\cdot Y}\) son las pendientes de las rectas de regresión para predecir \(Y\) a partir de \(X\) y \(X\) a partir de \(Y\), respectivamente. Aquí, la correlación se expresa como una función de la pendiente de cualquiera de las líneas de regresión y las desviaciones estándar de las dos variables. La relación de desviaciones estándar tiene el efecto de reescalar las unidades de la pendiente de regresión en unidades de la correlación. Así pues, la correlación es una pendiente normalizada. Una interpretación similar implica que la correlación es la pendiente de la línea de regresión estandarizada. Cuando estandarizamos las dos variables sin procesar, las desviaciones estándar se hacen unidad y la pendiente de la recta de regresión se convierte en la correlación. En este caso, el intercepto es 0, y la recta de regresión se expresa fácilmente como
\[ \hat{Z}_{Y}= rZ_{X}\tag{2.2} \]
De esta interpretación se desprende que la correlación reescala las unidades de la variable \(X\) estandarizada para predecir unidades de la variable \(Y\) estandarizada. Obsérvese que la pendiente de la regresión de \(z_{y}\) sobre \(z_{x}\) restringe la línea de regresión para que caiga entre las dos diagonales representadas en la región sombreada de la Figura 2. Las correlaciones positivas implican que la línea pasará por los cuadrantes primero y tercero. Las correlaciones positivas implican que la línea pasará por los cuadrantes primero y tercero; las correlaciones negativas implican que pasará por los cuadrantes segundo y cuarto. La regresión de \(z_{x}\) sobre \(z_{y}\), tiene el mismo ángulo con el eje \(Y\) que la regresión de \(z_{y}\) sobre \(z_{x}\) tiene con el eje \(X\), y caerá en la región no sombreada de la Figura 2, como se indica.
Partimos de la formula de la pendiente de una regresión es:
\[\hat\beta_{1} = \frac{S_{xy}}{S_{x}^2}\tag{2.3}\]
Entonces:
\[b_{xy} = \frac{S_{xy}}{S_{x}^2}\quad \wedge\quad b_{yx} = \frac{S_{yx}}{S_{y}^2}\tag{2.4}\]
\(\equiv\)
\[S_{xy} = b_{xy} \cdot S_{x}^2\quad \wedge\quad S_{yx} = b_{yx} \cdot S_{y}^2\tag{2.5}\]
Dado que \(S_{xy} = S_{yx}\quad y\quad r = \frac{S_{xy}}{S_{x} \cdot S_{y}}\), entonces:
\[ r = b_{Y \cdot X}\left(\frac{S_{X}}{S_{Y}}\right) = b_{X \cdot Y}\left(\frac{S_{Y}}{S_{X}}\right)\hspace{2cm}\blacksquare \]
Se encontro un clip de tal forma que lo muestra geometricamente, para más información esta disponible el canal de StatCourses
# 2. Pendiente estandarizada de la línea de regresión entre dos variables y
# compararla con el coeficiente de correlación.
# Seleccionar las variables de interés
petal_length <- iris$Petal.Length
petal_width <- iris$Petal.Width
# Calcular el coeficiente de correlación
correlation <- cor(petal_length, petal_width)
# Calcular la pendiente de la línea de regresión
regression_slope <- correlation * (sd(petal_width) / sd(petal_length))
# Calcular la regresión lineal
regression <- lm(petal_width ~ petal_length)
# Obtener la pendiente de regresión
regression_slope_1 <- coef(regression)[2]
cor_slopr <- regression_slope*(sd(petal_length) / sd(petal_width))
# Imprimir los resultados
#rint(paste("Correlation:", correlation))
#print(paste('Correlation by Standardized Slope of Regression Line:', cor_slopr))
#print(paste("Standardized Slope of Regression Line:", regression_slope))
#print(paste("Regression Slope:", regression_slope_1))
#data.frame(core)
# Crear el gráfico de dispersión
# Crear el gráfico de dispersión
scatter_plot <- ggplot(iris, aes(x = petal_length, y = petal_width)) +
geom_point() +
geom_abline(intercept = 0, slope = regression_slope, color = "red", linetype = "dashed") +
labs(title = "Relación entre Pendiente Estandarizada y Coeficiente de Correlación",
x = "Longitud del Pétalo",
y = "Ancho del Pétalo") +
annotate("text", x = mean(iris$petal_length), y = mean(iris$petal_width),
label = paste("Correlation =", round(correlation, 2),
"\nStandardized Slope =", round(regression_slope, 2)),
color = "blue", size = 4, hjust = 0, vjust = 1)
# Crear la tabla con la información
result_table <- data.frame(
Result = c("Correlation", "Correlation by Standardized Slope", "Standardized Slope", "Regression Slope"),
Value = c(correlation, cor_slopr, regression_slope, regression_slope_1)
)
# Colocar el gráfico y la tabla uno al lado del otro
grid.arrange(scatter_plot, tableGrob(result_table), nrow = 2)La correlación también puede expresarse como una función simultánea de las dos pendientes de las rectas de regresión no normalizadas, \(b_{Y\cdot X}\) y \(b_{X\cdot Y}\). La función es, de hecho, la media geométrica, y representa la primera de varias interpretaciones de \(r\) como un tipo especial de media:
\[r = \pm \sqrt{b_{\text{Y} \cdot \text{X}} b_{\text{X} \cdot \text{Y}}}\tag{5.1} \]
Esta relación puede derivarse de la ecuación (3.1) multiplicando los términos segundo y tercero de la igualdad para obtener \(r^2\), cancelando las desviaciones típicas y sacando la raíz cuadrada.
Existe una extensión de esta interpretación que incluye la regresión multivariante. Dadas las matrices de coeficientes de regresión que relacionan dos conjuntos de variables, \(b_{\text{Y} \cdot \text{X}}\)” y “\(b_{\text{X} \cdot \text{Y}}\). las raíces cuadradas de los valores propios del producto de estas matrices son las correlaciones canónicas para los dos conjuntos de variables. Estos valores se reducen al coeficiente de correlación simple cuando hay una única variable \(X\) y una única variable \(Y\).
# Seleccionar las variables de interés
sepal_length <- iris$Sepal.Length
sepal_width <- iris$Sepal.Width
# Calcular las pendientes de las dos regresiones
regression_slope1 <- lm(sepal_width ~ sepal_length)$coefficients[2]
regression_slope2 <- lm(sepal_length ~ sepal_width)$coefficients[2]
# Calcular la correlación como la media geométrica de las pendientes
correlation <- sqrt(abs(regression_slope1 * regression_slope2))
# Imprimir el resultado
print(paste("Ccorrelación como la media geométria de las dos pendientes de regresion:", correlation))## [1] "Ccorrelación como la media geométria de las dos pendientes de regresion: 0.117569784133002"
## [1] "Correaction: -0.117569784133002"
A veces se critica la correlación por no tener una interpretación obvia para sus unidades. Esta crítica se mitiga elevando la correlación al cuadrado. El índice elevado al cuadrado suele denominarse coeficiente de determinación, y las unidades pueden interpretarse como la proporción de la varianza en una variable que se explica por las diferencias en la otra [véase Ozer (1985) para una discusión de varias interpretaciones diferentes del coeficiente de determinación]. Podemos dividir la suma total de cuadrados para \(Y\) \(SS_{TOT}\) en la suma de cuadrados debida a la regresión \(SS_{REG}\) y la suma de cuadrados debida al error \(SS_{ERR}\). La variabilidad de \(X\) explicada por las diferencias de \(Y\) es el cociente de \(SS_{REG}\) y \(SS_{TOT}\) y \(r\) es la raíz cuadrada de ese cociente.
\(r = \sqrt{\frac{\sum_{i=1}^n (y_i - \hat{y}_i)^2}{\sum_{i=1}^n (y_i - \bar{y})^2}} = \sqrt{\frac{SS_{REG}}{SS_{TOT}}}\tag{6.1}\)
Equivalentemente, el numerador y el denominador de esta ecuación pueden dividirse por \((N-1)^\frac{1}{2}\) y \(r\) se convierte en la raíz cuadrada de la relación de las varianzas (o la relación de las desviaciones estándar) de las variables predichas y observadas:
\[r = \sqrt{\frac{S^2_{\hat{Y}}}{S^2_{Y}}}=\frac{S^2_{\hat{Y}}}{S^2_{Y}}\]
Nótese que \(S^2_{\hat{Y}}\), es una estimación sesgada de \(\sigma^2_{\hat{Y}}\), mientras que \(S^2_{\hat{Y}}\) es insesgada). Esta interpretación es la que motivó las primeras conceptualizaciones de Pearson sobre el índice (véase Mulaik 1972, p. 4). La correlación como cociente de dos varianzas puede compararse con otra interpretación (debida a Galton) de la correlación como cociente de dos medias. Presentaremos esta interpretación en el apartado 13.
set.seed(12062023)
# Modelo
modelo <- lm(sepal_width ~ sepal_length)
# y Estimado
Y_estimado <- predict(modelo)
# SS_REG
Var_Y_Estimado <- sum((Y_estimado - sepal_width)^2)
# Vector de medias
meanvector <- rep(mean(sepal_width), length(sepal_width))
Var_Y_Tot <- sum((iris$Sepal.Width - meanvector)^2)
cor_razon <- sqrt(Var_Y_Estimado/Var_Y_Tot)
r <- cor(sepal_width, sepal_length)
print(cor_razon)## [1] 0.9930646
## [1] -0.1175698
Otra forma de interpretar la correlación como media (véase el apartado 4) es expresarla como el producto cruzado medio de las variables estandarizadas:
\[r = \frac{\sum Z_x Z_y}{N}\tag{5.1}\]
La ecuación (5.1) puede obtenerse directamente dividiendo el numerador y el denominador de la ecuación correlación por el producto de las dos desviaciones típicas de la muestra. Dado que la media de una distribución es su primer momento, esta fórmula permite comprender el significado del “producto-momento” en el nombre del coeficiente de correlación.
Las dos representaciones siguientes implican interpretaciones trigonométricas de la correlación.
Recordemos la fórmula de la covarianza
\(\text{cov}(x, y) = \frac{\sum_{i=1}^{N} (x_i - \bar{x})(y_i - \bar{y})}{n-1}\)
Dividimos en ambos lados la multiplicación de la desviación estandar de cada una de las variables
\(\text{r} = \frac{\sum_{i=1}^{N} (x_i - \bar{x})(y_i - \bar{y})}{N(\sigma_x \sigma_y)}\)
\(\text{r} = \frac{\sum_{i=1}^{N} \frac{(x_i - \bar{x})}{\sigma_x} \frac{(y_i - \bar{y})}{\sigma_y}}{N}\)
\(\text{r} = \frac{\sum_{i=1}^{N} z_x z_y}{N}\)
Como se sugirió en la Sección 2., las dos rectas de regresión estandarizadas son simétricas respecto a cualquiera de las diagonales. sea el ángulo entre las dos rectas . Entonces (Ver figura 1)
\[r = \sec(\beta) \pm \tan(\beta)\tag{6.1}\]
Disponemos de una demostración sencilla de esta relación. La ecuación (6.1) no es intuitivamente obvia, ni es tan útil para fines computacionales o conceptuales como algunas de las otras. Su valor es mostrar que existe una relación sistemática entre la correlación y la distancia angular entre las dos líneas de regresión. La siguiente interpretación, también trigonométrica, tiene mucho más valor conceptual.
Las ecuaciones de las dos líneas de regresion de las variables son:
\(x = a_{xy}+b_{xy}y\) \(y = a_{yx}+b_{yx}x\)
La relación entre los coeficientes de regresión y la correlación es:
\(b_{xy} = r\frac{s_{x}}{s_{y}} \quad \text{y} \quad b_{xy} = r\frac{s_{y}}{s_{x}}\)
Por lo que las pendientes de las rectas serían \(\frac{1}{r} \text{ y la otra pendiente } r\)
El ángulo entre las dos rectas con pendientes conocidas
\(\tan(\theta) = \frac{m_1 - m_2}{1 + m_1 m_2}\)
Por lo que:
\(\tan(\theta) = \frac{1}{2}[\frac{1}{r} - r]\)
Reescribimos la ecuación cómo una cuadrática:
\(r^{2} + 2\tan(\theta)r - 1 = 0\)
Resolvemos entonces la ecuación para r:
\(r = \sec(\theta) \pm \tan(\theta)\)
#Pendientes
pend_uno <- cor(petal_length, petal_width)
pend_dos <- 1/cor(petal_length, petal_width)
#Ángulo
tan_angulo <- (pend_dos - pend_uno)/(1 + (pend_dos*pend_uno))
angulo <- atan(tan_angulo)
#Correlación
corre_met_7 <- ((1/(cos(angulo))) - tan(angulo))
print(paste("Correlación con función cor(): ", correlation))## [1] "Correlación con función cor(): 0.117569784133002"
## [1] "Correlación con método 6: 0.962865431402796"
El modelo geométrico estándar para representar la relación entre variables es el diagrama de dispersión. En este espacio, las observaciones se representan como puntos en un espacio definido por los ejes de las variables. Se puede definir una versión “al revés” de este espacio -normalmente denominado “person space”- dejando que cada eje represente una observación. Este espacio contiene dos puntos -uno por cada variable- que definen los extremos de los vectores en este espacio (potencialmente) de enormes dimensiones. Aunque la multidimensionalidad de este espacio impide la visualización, los dos vectores variables definen un subespacio bidimensional que se conceptualiza fácilmente.
Si los vectores variables se basan en variables centradas, entonces la correlación tiene relación con el ángulo \(\propto\) entre los vectores variables (Rodgers 1982):
\[r = \cos(\propto).\tag{7.1}\]
Cuando el ángulo es 0, los vectores caen sobre la misma línea y \(cos(\propto) = \pm 1\). Cuando el ángulo es \(90°\), los vectores son perpendiculares y \(cos(\propto) = 0\). [Rodgers, Nicewander y Toothaker (1984) mostraron la relación entre vectores variables ortogonales y no correlacionados en el “person space”].
Visualmente, es mucho más fácil ver la correlación observando un ángulo que mirando cómo se agrupan los puntos en torno a la línea de regresión. En nuestra opinión, esta interpretación es, con mucho, la forma más fácil de “ver” el tamaño de la correlación, ya que se puede observar directamente el tamaño de un ángulo entre dos vectores. Sin embargo, este espacio interior-exterior que permite representar r como el coseno de un ángulo está relativamente descuidado como herramienta de interpretación. Las excepciones incluyen un número de interpretaciones factor-analíticas, las representaciones geométricas de Draper y Smith (1981, pp. 201-203) del análisis de regresión múltiple, y Huck y Sandler (1984, p. 52). Fisher también utilizó este espacio con bastante frecuencia para conceptualizar sus elegantes ideas estadísticas (véase Box 1978).
# Calcular producto escalar
producto_escalar <- sum(petal_length * petal_width)
# Calcular longitud de vectores
longitud_x <- sqrt(sum(petal_length^2))
longitud_y <- sqrt(sum(petal_width^2))
# Calcular coseno
coseno <- producto_escalar / (longitud_x * longitud_y)
# Imprimir resultado
print(paste("Correlación con función cor(): ", correlation))## [1] "Correlación con función cor(): 0.117569784133002"
## [1] "Correlación con método 7: 0.983549683299602"
Define \(Z_y - Z_x\) como la diferencia entre las variables estandarizadas de \(X\) e \(Y\) para cada observación. Luego,
\[ r = 1 - S^2_{(Z_y - Z_x)}/2\tag{8.1} \]
Esto puede demostrarse comenzando con la varianza de una puntuación de diferencia: \(S^2_{Y-X}=S^2_{X}+S^2_{Y}-2rs_{X}s_{Y}\).Puesto que las desviaciones estándar y las varianzas se convierten en unidad cuando se estandarizan las variables, podemos resolver fácilmente para r y obtener la ecuación (8.1).
Es interesante observar que en esta ecuación, puesto que la correlación está limitada por el intervalo de - 1 a +1, la varianza de esta puntuación de diferencia está limitada por el intervalo de 0 a 4. Por tanto, la varianza de una diferencia de puntuaciones estandarizadas nunca puede superar 4. El límite superior de la varianza se alcanza cuando la correlación es - 1.
También podemos definir r como la varianza de una suma de variables estandarizadas:
\[ r = S^2_{(Z_y - Z_x)}/2 - 1\tag{8.2} \]
En este caso, la varianza de la suma también oscila entre 0 y 4, y el límite superior se alcanza cuando la correlación es +1. El valor de esta novena interpretación es mostrar que la correlación es una transformación lineal de un cierto tipo de varianza. Así, dada la correlación, podemos definir directamente la varianza de la suma o de la diferencia de las variables estandarizadas, y viceversa.
Las nueve interpretaciones anteriores del coeficiente de correlación eran de naturaleza algebraica y trigonométrica. No se hicieron suposiciones distribucionales sobre la naturaleza de las distribuciones univariantes o bivariantes de \(X\) e \(Y\). En las interpretaciones finales, se asumirá la normalidad bivariante. Mantenemos nuestro interés en las versiones conceptuales y computacionales de \(r\), pero basamos nuestro último conjunto de interpretaciones en este supuesto común sobre la distribución de la población.
Esta interpretación se debe a Chatillon (1984a). Sugirió dibujar un “globo de cumpleaños” alrededor del diagrama de dispersión de una relación bivariada. El globo es en realidad una elipse aproximada, a partir de la cual se obtienen dos medidas-\(h\) y \(H\) (véase la Fig. 3). h es el diámetro vertical de la elipse en el centro de la distribución en el eje X; H es el alcance vertical de la elipse en el eje Y. Chatillon demostró que la correlación puede calcularse aproximadamente como
\[ r = \sqrt{1-(h/H)^2}\tag{9.1} \]
Justificó teóricamente la eficacia de este procedimiento computacional aproximado, suponiendo normalidad bivariante y uniformidad bivariante. También presentó una serie de ejemplos en los que la técnica funciona bastante bien. Una sugerencia interesante es que la “regla del globo” puede utilizarse para construir aproximadamente una relación bivariante con una correlación determinada. Se dibuja una elipse que produzca la r deseada y luego se rellenan los puntos uniformemente a lo largo de la elipse. Thomas (1984) presentó un “nomógrafo de bolsillo”, que era una diapositiva de 3” x 5” que podía utilizarse para “avistar” una relación bivariada y estimar una correlación basada en la regla del globo.
# Calcula el diámetro vertical de la elipse en el centro de la distribución en el eje X
h <- max(petal_width) - min(petal_width)
# Calcular el alcance vertical de la elipse en el eje Y
H <- max(petal_length) - min(petal_length)
r_balloon = sqrt(1 - (h / H)^2)
print(paste("Correlación con función cor(): ", correlation))## [1] "Correlación con función cor(): 0.117569784133002"
## [1] "Correlación con método 9: 0.913526303607584"
Dos autores diferentes han sugerido interpretaciones de r relacionadas con las elipses bivariantes de isoconcentración. Obsérvese que estas elipses son versiones más formales del “globo” de la Sección 10 y que son las estructuras geométricas que Galton observó en sus datos empíricos (véase la Fig. 1). Chatillon (1984b) dio una clase de distribuciones bivariadas (incluyendo normal, uniforme y mezclas de uniformes) que tienen contornos de isodensidad elípticos. Hay una elipse por cada constante positiva, dada la correlación de la población. El globo que se dibujaría alrededor de un diagrama de dispersión se aproximaría a una de estas elipses para una constante positiva grande. Si las variables están estandarizadas, estas elipses se centran en el origen. Para \(p > 0\), los ejes principales caen sobre la diagonal positiva; para \(p < 0\), sobre la diagonal negativa.
Marks (1982) demostró, mediante cálculos sencillos, que la 64 The American Statistician, febrero 1988, Vol. 42, No. 1 pendiente de la línea tangente en \(z_{x} = 0\) es la correlación.
La \(\text{figura 2}\) muestra esta línea tangente, cuya pendiente es igual a r . Cuando la correlación es 0, la elipse es un círculo y la tangente tiene pendiente 0. Cuando la correlación es unidad, la elipse se aproxima a una línea recta que es la diagonal (con pendiente 1). Cuando la correlación es unidad, la elipse se aproxima a una recta que es la diagonal (con pendiente 1). Obsérvese que, puesto que todas las elipses de isoconcentración son paralelas, la interpretación es invariante a la elección de la elipse. También cabe señalar que la pendiente de la recta tangente en \(z_{x} = 0\) es la misma que la pendiente de la recta de regresión normalizada (véase el apartado 2).
Schilling (1984) también utilizó este marco para derivar una relación similar. Estandaricemos las variables de forma que las elipses estén centradas en el origen, como antes. Si \(D\) es la longitud del eje mayor de una elipse de isoconcentración y d es la longitud del eje menor, entonces
\[ r = (D^2- d^2)/(D^2+d^2).\tag{10.1} \]
Estos ejes también se representan en la \(\text{Figura 2}\), y la interpretación es invariable con respecto a la elección de la elipse, como antes.
stand_x <- scale(petal_length) # Standard petal_length
stand_y <- scale(petal_width) # Standard petal_width
# Distancia entre los puntos extremos en dirección de la correlación
D <- sqrt((stand_x - mean(stand_x))^2 + (stand_y - mean(stand_y))^2)
# Distancia entre los puntos extremos en la dirección perpendicular a la correlación
d <- sqrt((stand_x - mean(stand_x))^2 * (1 - correlation^2))
# (1 - cor(x, y)^2) representa el complemento del coeficiente de correlación al cuadrado entre x y y
calculated_r <- mean((D^2 - d^2) / (D^2 + d^2))
print(paste("Correlación con función cor(): ", correlation))## [1] "Correlación con función cor(): 0.117569784133002"
## [1] "Correlación con método 10: 0.332141189573255"
Las interpretaciones anteriores de \(r\) se basaban en variables cuantitativas. Nuestra duodécima representación de la correlación muestra su relación con la estadística de prueba de los experimentos diseñados, en los que una de las variables (la variable independiente) es una variable categórica. Esto demuestra la artificialidad de la distinción correlacional/experimental al discutir el diseño experimental. De hecho, Fisher (1925) presentó originalmente el análisis de la varianza (ANOVA) en términos de la correlación intraclase (véase Box 1978).
Supongamos que tenemos un experimento diseñado con dos condiciones de tratamiento. El modelo estadístico estándar para comprobar la diferencia entre las condiciones es la prueba t de dos muestras independientes. Si X se define como una variable dicotómica que indica la pertenencia a un grupo (0 si es el grupo 1, 1 si es el grupo 2), entonces la correlación entre \(X\) y la variable dependiente \(Y\) es
\[ r = \frac{t}{\sqrt{t^2+n-2}},\tag{11.1} \]
donde \(n\) es el número total combinado de observaciones en los dos grupos de tratamiento. Este coeficiente de correlación puede utilizarse como medida de la fuerza del efecto de un tratamiento, en contraposición a la significación de un efecto. La prueba de significación de r en este contexto proporciona la misma prueba que la prueba \(t\) habitual. Por lo tanto, está claro que \(r\) puede servir como estadístico de prueba en un experimento diseñado, así como proporcionar una medida de asociación en entornos de observación.
En entornos ANOVA con más grupos o múltiples factores, la extensión de esta relación define los coeficientes de correlación múltiple asociados con los efectos principales y las interacciones en experimentos más complejos. Por ejemplo, en un ANOVA unidireccional con k grupos y un total de N sujetos, la correlación múltiple al cuadrado entre la variable dependiente y las columnas de la matriz de diseño se relaciona con el estadístico F mediante la siguiente fórmula (Draper y Smith 1981, p. 93): \(R^2 = F(k - 1)/[F(k - 1) + (N - k)]\).
# Crear una variable dicotómica para grupos (setosa y no setosa)
group <- as.numeric(iris$Species == "setosa") # Variable dicotómica para grupos
n <- length(petal_length)
# Separar los datos en dos grupos según la variable dicotómica
x_group = petal_length[group == 0]
y_group = petal_width[group == 0]
# Calcular las medias de cada grupo
xbar1 <- mean(x_group)
xbar2 <- mean(y_group)
# Calcular la desviación estándar combinada (s)
s <- sqrt(((sum((x_group - xbar1)^2) + sum((y_group - xbar2)^2)) / (length(x_group)+length(y_group) - 2)))
# Calcular la estadística t
t <- (xbar1 - xbar2) / (s * sqrt(1/length(x_group) + 1/length(y_group)))
r_t <- t / sqrt(t^2 + n - 2)
print(paste("Correlación con función cor(): ", correlation))## [1] "Correlación con función cor(): 0.117569784133002"
## [1] "Correlación con método 11: 0.943949374523694"
Ésta es la tercera interpretación de la correlación de medias (véanse los apartados 3 y 5). Proporciona una conclusión apropiada para nuestro artículo, ya que fue propuesta por primera vez por Galton. Además, las primeras ideas y cálculos de Galton sobre la correlación se basaban en esta interpretación. Nicewander y Price (1982) elaboraron esta interpretación.
Para Galton, era natural centrarse en la correlación como cociente de medias, porque estaba interesado en cuestiones como: ¿Cómo se compara la altura media de los hijos de padres inusualmente altos con la altura media de sus padres? En el siguiente desarrollo se utiliza la notación poblacional en lugar de la muestral, porque sólo en el límite (de aumento del tamaño de la muestra) la expresión de la razón de medias dará valores idénticos a la \(r\) de Pearson.
Consideremos una situación similar a la que habría interesado a Galton. Sea \(X\) una variable que denota el \(IQ\) de la madre, y sea \(Y\) el \(IQ\) de su hijo mayor. Supongamos además que las medias \(\mu(X)\) y \(\mu(Y)\) son 0 y que las desviaciones típicas \(\sigma(X)\) y \(\sigma(Y)\) son la unidad. Ahora seleccione algún valor arbitrariamente grande de \(X\) (digamos \(X_{c}\)), y calcule la media \(IQ\) de las madres cuyo \(IQ\) es mayor que \(X\).Que esta media se denote por \(\mu(X|X > X_{c})\), es decir, la media \(IQ\) de las madres cuyo \(IQ\) es mayor que \(X_{c}\). A continuación, calcula la media de las puntuaciones \(IQ\), \(Y\), de los hijos mayores de estas madres excepcionales. Denotemos esta media por ,\(\mu(Y|X> X_{c})\), es decir, la media \(IQ\) de los hijos mayores de madres cuyo \(IQ\) es mayor que \(X\),. Entonces se puede demostrar que
\[ r = \frac{\mu(Y|X>X_{c})-\mu_{Y}}{\mu(X|X>X_{c})-\mu_{X}}=\frac{\mu(Y|X>X_{c})}{\mu(X|X>X_{c})}\tag{12.1} \]
La prueba de (12.1) requiere un supuesto de normalidad bivariante de \(X\) y \(Y\) estandarizados. La prueba es sencilla y sólo implica el hecho de que, para \(z_{x}\), y \(z_{y}\), \(r\) es la pendiente de la recta de regresión, así como la razón de estas dos medias condicionales.
Nuestro ejemplo es específico, pero la interpretación se aplica a cualquier escenario en el que se produce una selección explícita sobre una variable, que selecciona implícitamente sobre una segunda variable. Brogden (1946) utilizó la interpretación de la relación de medias para demostrar que cuando se utiliza un test psicológico para la selección de personal, la correlación entre la puntuación del test y la medida del criterio da el grado proporcional en que el test es un dispositivo de selección “perfecto”. Esta interpretación puede utilizarse para otros fines.
# 12
# Definir un valor de corte arbitrario x_c
x_c <- 1
# Calcular la media de Y condicional a X > x_c
mean_y_x <- mean(stand_y[stand_x > x_c])
# Calcular la media de X condicional a X > x_c
mean_x_x <- mean(stand_x[stand_x > x_c])
# Calcular la media de Y y X
mean_std_y <- mean(stand_y)
mean_std_x <- mean(stand_x)
r_ratio <- (mean_y_x - mean_std_y) / (mean_x_x - mean_std_x)
r_ratio## [1] 0.9378494
## [1] "Correlación con función cor(): 0.117569784133002"
## [1] "Correlación con método 12: 0.93784938737202"
La correlación de rango de Spearman se presenta como la contraparte no paramétrica de la correlación producto-momento de Pearson. Este coeficiente, representado por (ρ o rs), evalúa la intensidad y la dirección de la relación entre dos variables clasificadas.
Por otra parte, el coeficiente de correlación de rango de Spearman se considera como la alternativa no paramétrica a la correlación de Pearson.
\[ rs = 1-\frac{6\sum d^2_{i}}{n(n^2-1)} \]
La correlación de Spearman difiere de la correlación de Pearson en el sentido de que no utiliza los datos brutos directamente, sino que se basa en los rangos asignados a los valores de las variables. Este proceso de asignar rangos a los datos se conoce como “ranking”. Los rankings son una forma de ordenar los valores de las variables de menor a mayor, asignando a cada valor un rango correspondiente según su posición en la ordenación.
Explicación de Rankings:
Los rankings son esenciales en la correlación de Spearman porque permiten comparar la relación relativa entre los valores de las dos variables en lugar de depender de las magnitudes absolutas de los datos. Esto es especialmente útil cuando los datos no siguen una distribución normal o cuando hay presencia de valores atípicos.
Ejemplos acerca de los Rankings: Supongamos que tenemos dos conjuntos de datos A y B, y sus respectivos rankings se muestran a continuación:
Conjunto A: 10, 5, 8, 12 Ranking A: 3, 4, 2, 1
Conjunto B: 7, 15, 9, 11 Ranking B: 3, 1, 2, 4
En estos ejemplos, los rankings se han asignado de acuerdo con el orden ascendente de los valores. La correlación de Spearman evaluará la relación entre los rankings de A y B, en lugar de los valores brutos, proporcionando así una medida robusta de la asociación entre las dos variables.
En resumen, el uso de rankings en la correlación de Spearman facilita una evaluación más robusta de la asociación entre variables, independientemente de la distribución o presencia de valores atípicos en los datos.
Es necesario contar con dos variables que presenten características ordinales, de intervalo o de proporción para aplicar la correlación de Spearman. Mientras que la correlación producto-momento de Pearson suele ser la elección común para datos de intervalo o relación, la correlación de Spearman ofrece una alternativa valiosa cuando las suposiciones de la correlación de Pearson se ven significativamente comprometidas.
Es esencial destacar que la correlación de Spearman evalúa la fuerza y la dirección de la relación monótona entre las dos variables, a diferencia de la correlación de Pearson, que se centra en la relación lineal entre las variables. Esta capacidad de la correlación de Spearman la hace especialmente adecuada para situaciones en las que la relación entre las variables no sigue una tendencia lineal clara o cuando la presencia de valores atípicos afecta la validez de la correlación de Pearson.
Tipos de Variables:
Es crucial comprender que la correlación de Spearman es versátil y puede aplicarse a diferentes tipos de variables, incluyendo las ordinales, de intervalo o de proporción. Las variables ordinales representan categorías con un orden específico pero sin una distancia uniforme entre ellas. Las variables de intervalo y de proporción, por otro lado, tienen una escala numérica con una distancia uniforme entre los valores, permitiendo una mayor flexibilidad en el análisis de la relación entre ellas.
La correlación de Pearson, también denominada coeficiente de correlación de Pearson, se fundamenta en diversas suposiciones o condiciones que deben ser satisfechas para garantizar la validez y confiabilidad de sus resultados. Estas condiciones abarcan:
Relación lineal: Es necesario que la relación entre las dos variables sea aproximadamente lineal. Esto implica que, al observar un gráfico de dispersión, los puntos deben mostrar una tendencia general en forma de línea recta.
Normalidad: Ambas variables deben adherirse a una distribución normal. Esto implica que los valores de las variables deben distribuirse de manera simétrica en torno a la media.
Homocedasticidad: La variabilidad de una variable debe ser constante en todos los niveles de la otra variable. Esto se traduce en que la dispersión de los puntos en el gráfico de dispersión debe ser uniforme en todos los niveles de las variables.
Independencia: Las observaciones deben ser independientes entre sí. En otras palabras, el valor de una observación no debe depender del valor de otra observación dentro del conjunto de datos.
Una relación monótona es una relación que hace una de las siguientes cosas:
A medida que aumenta el valor de una variable, también lo hace el valor de la otra variable.
A medida que aumenta el valor de una variable, el valor de la otra variable disminuye.
Se mide la reacción de tiempo de ocho jugadores de computadora y se les pregunta la edad
# Crear los vectores time_reaction y age
time_reaction <- c(12, 15, 17, 18, 20, 21, 22, 26)
age <- c(14, 25, 20, 35, 45, 30, 60, 95)
# Crear un dataframe con los datos
(data <- data.frame(time_reaction, age))| time_reaction | age |
|---|---|
| 12 | 14 |
| 15 | 25 |
| 17 | 20 |
| 18 | 35 |
| 20 | 45 |
| 21 | 30 |
| 22 | 60 |
| 26 | 95 |
# Calcular la correlación de Pearson
correlation <- cor(time_reaction, age)
# Imprimir la correlación
print(paste("La correlación de Pearson entre time_reaction y age es:", correlation))## [1] "La correlación de Pearson entre time_reaction y age es: 0.891574223931793"
# Calcular la Spearman´s Rank Correlation
(corr <- cor.test(x=time_reaction, y=age, method = 'spearman'))##
## Spearman's rank correlation rho
##
## data: time_reaction and age
## S = 8, p-value = 0.004563
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.9047619
## [1] 0.9047619
#Calcular los rangos de los vectores
rank_time <- rank(time_reaction)
rank_age <- rank(age)
(data <- data %>%
mutate(rank_time,rank_age))| time_reaction | age | rank_time | rank_age |
|---|---|---|---|
| 12 | 14 | 1 | 1 |
| 15 | 25 | 2 | 3 |
| 17 | 20 | 3 | 2 |
| 18 | 35 | 4 | 5 |
| 20 | 45 | 5 | 6 |
| 21 | 30 | 6 | 4 |
| 22 | 60 | 7 | 7 |
| 26 | 95 | 8 | 8 |
## [1] 0.9047619
| time_reaction | age | rank_time | rank_age | d | d^2 |
|---|---|---|---|---|---|
| 12 | 14 | 1 | 1 | 0 | 0 |
| 15 | 25 | 2 | 3 | -1 | 1 |
| 17 | 20 | 3 | 2 | 1 | 1 |
| 18 | 35 | 4 | 5 | -1 | 1 |
| 20 | 45 | 5 | 6 | -1 | 1 |
| 21 | 30 | 6 | 4 | 2 | 4 |
| 22 | 60 | 7 | 7 | 0 | 0 |
| 26 | 95 | 8 | 8 | 0 | 0 |
## [1] 0.9047619
ggplot(data, aes(x=time_reaction, y=age)) +
geom_line() +
geom_point(color='#2980B9', size = 4) +
labs(title = 'Tiempo de reacción Vs Edad')A medida que aumenta el valor de una variable la otra aumenta, es funcion monotona creciente.
Por otro lado, esta correlación se puede evaluar por medio del paquete correlation
Conocido comúnmente como el “coeficiente tau de Kendall”, tanto el coeficiente Tau de Kendall como el coeficiente de correlación de rangos de Spearman son métodos que evalúan asociaciones estadísticas según los rangos de los datos. La correlación de rangos de Kendall, que es de naturaleza no paramétrica, se presenta como una alternativa a la correlación de Pearson, la cual es paramétrica, cuando los datos no cumplen con uno o varios supuestos de la prueba. Asimismo, representa la opción más adecuada frente a la correlación de Spearman (no paramétrica), especialmente cuando el tamaño de la muestra es reducido y se observan numerosos empates en los rangos.
Este método se emplea para examinar similitudes en el ordenamiento de los datos cuando se clasifican según cantidades. A diferencia de otros coeficientes de correlación que se basan en observaciones individuales, el coeficiente de correlación de Kendall utiliza pares de observaciones. Su evaluación de la fuerza de la asociación se fundamenta en el patrón de concordancia y discordancia observado entre estos pares.
La fórmula para el coeficiente de correlación de rango de Kendall (tau de Kendall) entre dos variables, \(X\) e \(Y\), se expresa como:
\[ \tau = \frac{{\text{Número de pares concordantes} - \text{Número de pares discordantes}}}{{\text{Número total de pares}}} \]
Donde:
Un par \((X_i, Y_i)\) y \((X_j, Y_j)\) es “concordante” si los rangos relativos concuerdan (es decir, si \(X_i > X_j\) y \(Y_i > Y_j\) o \(X_i < X_j\) y \(Y_i < Y_j\)).
Un par \((X_i, Y_i)\) y \((X_j, Y_j)\) es “discordante” si los rangos relativos discordantes (es decir, si \(X_i > X_j\) y \(Y_i < Y_j\) o \(X_i < X_j\) y \(Y_i > Y_j\)).
El coeficiente de correlación de Kendall (\(\tau\)) varía entre -1 y 1, donde:
Suponga que hay dos doctores a los cuales le solicitan que clasifique a 6 pacientes de acuerdo con su salud
| doc_1 | doc_2 |
|---|---|
| 1 | 3 |
| 2 | 1 |
| 3 | 4 |
| 4 | 2 |
| 5 | 6 |
| 6 | 5 |
## Calcular pares concordantes y discordantes Función 1
dif_mat_set <- function(a,b){
matriz_1 <- combn(a, 2)
matriz_2 <- combn(b, 2)
print(matriz_1)
print(matriz_2)
# Inicializar variable
pares_concordantes <- 0
# Verificar si las matrices tienen el mismo número de columnas
if (ncol(matriz_1) == ncol(matriz_2)) {
# Calcular la diferencia entre las matrices
for (j in 1:ncol(matriz_1)) {
columna_1 <- matriz_1[, j]
encontrado <- FALSE # Bandera para controlar si se ha encontrado una pareja concordante
for (i in 1:ncol(matriz_2)) {
if (all(columna_1 == matriz_2[, i])) {
encontrado <- TRUE
break # Salir del bucle interno si se encuentra una pareja concordante
}
}
if (encontrado) {
pares_concordantes <- pares_concordantes + 1 # Incrementar el contador de pares concordantes
}
}
} else {
cat("Las matrices tienen un número diferente de columnas.\n")
}
pares_discordantes <- ncol(matriz_1) - pares_concordantes
# Retornar los resultados como una lista
resultado <- c(pares_concordantes ,pares_discordantes)
return(resultado)
}
dif_mat_set(doc_1,doc_2)## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
## [1,] 1 1 1 1 1 2 2 2 2 3 3 3 4 4
## [2,] 2 3 4 5 6 3 4 5 6 4 5 6 5 6
## [,15]
## [1,] 5
## [2,] 6
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
## [1,] 3 3 3 3 3 1 1 1 1 4 4 4 2 2
## [2,] 1 4 2 6 5 4 2 6 5 2 6 5 6 5
## [,15]
## [1,] 6
## [2,] 5
## [1] 11 4
## Calcular pares concordantes y discordantes Función 2
dif_mat_set_optimizado <- function(a, b) {
# Crear todas las combinaciones posibles de a y b
combinaciones_a <- combn(a, 2) # Genera todas las combinaciones de a de tamaño 2
combinaciones_b <- combn(b, 2) # Genera todas las combinaciones de b de tamaño 2
# Convertir las matrices de combinaciones en conjuntos
conjunto_a <- apply(combinaciones_a, 2, paste, collapse = "-") # columnas -> conjunto
conjunto_b <- apply(combinaciones_b, 2, paste, collapse = "-") # columnas -> conjunto
print(conjunto_a)
print(conjunto_b)
# Encontrar la intersección entre los conjuntos
interseccion <- intersect(conjunto_a, conjunto_b)
# Calcular el número de pares concordantes
pares_concordantes <- length(interseccion)
# Calcular el número de pares discordantes
pares_discordantes <- ncol(combinaciones_a) - pares_concordantes
# Retornar los resultados como una lista
resultado <- c(pares_concordantes,pares_discordantes)
return(resultado)
}
dif_mat_set_optimizado(doc_1,doc_2)## [1] "1-2" "1-3" "1-4" "1-5" "1-6" "2-3" "2-4" "2-5" "2-6" "3-4" "3-5" "3-6"
## [13] "4-5" "4-6" "5-6"
## [1] "3-1" "3-4" "3-2" "3-6" "3-5" "1-4" "1-2" "1-6" "1-5" "4-2" "4-6" "4-5"
## [13] "2-6" "2-5" "6-5"
## [1] 11 4
## [1] "1-2" "1-3" "1-4" "1-5" "1-6" "2-3" "2-4" "2-5" "2-6" "3-4" "3-5" "3-6"
## [13] "4-5" "4-6" "5-6"
## [1] "3-1" "3-4" "3-2" "3-6" "3-5" "1-4" "1-2" "1-6" "1-5" "4-2" "4-6" "4-5"
## [13] "2-6" "2-5" "6-5"
cor_kendall <- round(1 - 2*(pares[2])/sum(pares),2)
print(paste('La correlacion por medio del rango de Kendall´s es:', cor_kendall))## [1] "La correlacion por medio del rango de Kendall´s es: 0.47"
##
## Kendall's rank correlation tau
##
## data: doc_2 and doc_1
## T = 11, p-value = 0.2722
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
## tau
## 0.4666667
## [1] 0.4666667
## Calcular correlacion de rango de Kendall´s con R
result <- round(cor(doc_1, doc_2, method = "kendall"),2)
cat("Kendall correlation coefficient is:", result)## Kendall correlation coefficient is: 0.47
ggplot(data_2, aes(x=doc_1, y=doc_2)) +
geom_point(color='#2980B9', size = 4) +
labs(title = 'Doc1 Vs Doc2')Esta de igual forma se puede aplicar teniendo en cuenta el paquete correlation
En el análisis estadístico que sigue, se implementa la correlación media de bipeso, conocida también como bicor. Esta métrica, detallada en el libro “Weighted Network Analysis: Applications in Genomics and Systems Biology” de Steve Horvath, constituye una medida de similitud entre las muestras. Diferenciándose de la correlación de Pearson o la información mutua, la correlación media de bipeso se basa en la mediana en lugar de la media, lo que la hace menos susceptible a los valores atípicos y la posiciona como una alternativa robusta en la evaluación de la similitud entre conjuntos de datos.
Para el entendimiento de la definición biweight midcorrelation se generan tres funciones.
Introduce un vector numérico x y emite un vector cuyo componente uth está dado por
\[ \text{escalaRobusta}(x)_u = \frac{x_u - \text{med}(x)}{\text{mad}(x) \cdot 9} \] Donde \(mad(x)\ =\ med(|x − med(x)|)\) es la mediana desviación absoluta de x y 9 es un número que podría cambiarse.
\[ \text{peso}(x)_u = (1 - (x_u)^2)^2 \cdot H(1 - |x_u|) \]
Donde:
\[ H(x) = \begin{cases}1, & \text{si } x >0\\ 0, & \text{otro}\end{cases} \]
La tercera función es la función de covarianza ponderada basada en la mediana:
\[ \text{covMedianWeighted}(x, y) = \frac{sum\left((x - \text{median}(x))w_x \cdot (y - \text{median}(y))w_y\right)}{\sqrt{sum (w_x^2) \cdot sum (w_y^2)}} \] Donde los pesos se dan por \(w.x\ =\ peso(escalarobusta (x)).\)
Usando estas funciones, biweight midcorrelation entre \(x\) e \(y\) se define de la siguiente manera:
\[ \text{bicor}(x, y) = \frac{\text{covMedianWeighted}(x, y)}{\sqrt{\text{covMedianWeighted}(x, x) \cdot \text{covMedianWeighted}(y, y)}} \]
Se ha demostrado que la correlación media de doble peso es más robusta en la evaluación de la similitud en las redes de expresión génica, y a menudo se utiliza para el análisis de la red de correlación ponderada.
La correlación media de doble peso se ha implementado en el lenguaje de programación estadística R como la función bicor como parte del paquete WGCNA
También se implementa en el lenguaje de programación Raku como la función bi_cor_coef como parte del módulo de estadísticas.
# Función para escalar los datos de manera robusta
robustScale = function(x) {
(x - median(x, na.rm = TRUE)) / (9 * mad(x, constant = 1))
}
# Función para calcular los pesos
weight = function(x) {
(1 - x^2)^2 * ifelse(abs(x) <= 1, 1, 0)
}
# Función para calcular la covarianza ponderada por la mediana
covMedianWeighted = function(x, y) {
w.x = weight(robustScale(x))
w.y = weight(robustScale(y))
numerator = sum((x - median(x, na.rm = TRUE)) * w.x * (y - median(y, na.rm = TRUE)) * w.y, na.rm = TRUE)
denominator = sqrt(sum(w.x^2, na.rm = TRUE) * sum(w.y^2, na.rm = TRUE))
numerator / denominator
}
# Función bicor
bicorF = function(x, y) {
denom = sqrt(covMedianWeighted(x, x) * covMedianWeighted(y, y))
covMedianWeighted(x, y) / denom
}
# Simulación de dos vectores correlacionados
set.seed(1)
x = rnorm(50)
y = x + rnorm(50)
# Calcular bicor
bicorF(x, y) # = 0.5902869## [1] 0.5902869
## [1] 0.5902869
## [1] 0.6339331
## [1] 0.5671549
Por otro lado, esta función se pude aplicar teniendo encuenta el paquete \(correlation\)
La correlación tetracórica se emplea para evaluar la concordancia entre evaluadores en contextos de datos binarios, donde las respuestas pueden ser categorizadas como correctas o incorrectas. Este tipo de datos binarios presenta dos posibles respuestas. La correlación tetracórica estima la relación que existiría si se midiera en una escala continua.
Su aplicación abarca diversas finalidades, como el análisis de puntuaciones en la Teoría de Respuesta al Ítem (TRI) y la conversión de estadísticas de comorbilidad en coeficientes de correlación. Esta forma de correlación presenta la ventaja de no ser influenciada por la cantidad de niveles de calificación ni por las proporciones marginales de dichos niveles.
La denominación “correlación tetracórica” se deriva de la serie tetracórica, un método numérico utilizado en la era previa a la informática. A pesar de que es más frecuente estimar correlaciones mediante métodos como la estimación de máxima verosimilitud, la correlación tetracórica se destaca por su utilidad en contextos específicos.
Existen dos supuestos fundamentales en el uso de la correlación tetracórica:
Adicionalmente, es crucial garantizar que los errores sean independientes entre los evaluadores y los casos. También se debe verificar que la varianza de los errores sea homogénea a lo largo de los niveles de la variable independiente. Estos requisitos contribuyen a la validez y confiabilidad de los resultados obtenidos mediante la correlación tetracórica.
El coeficiente de correlación tetracórica, representado como
rtet (a veces escrito como r* o
rt), proporciona información sobre la fuerza de la
asociación entre las calificaciones de dos evaluadores. Un valor de “0”
indica ausencia de acuerdo, mientras que un valor de “1” denota un
acuerdo perfecto. La mayoría de las correlaciones se ubicarán en un
punto intermedio; el nivel aceptable de concordancia depende en gran
medida del tipo de datos en consideración. Por ejemplo, en comparación
con situaciones no médicas, las evaluaciones médicas entre profesionales
de la medicina exigirán un nivel más alto de acuerdo. En términos
generales, una concordancia superior a 0,7 suele considerarse
“suficientemente fuerte”.
Para ilustrar el cálculo de la correlación tetracórica, consideremos una tabla de 2x2 con dos variables, x e y, cada una con dos valores. Siguiendo el ejemplo proporcionado por Statology (2021, August 16) en su artículo sobre Tetrachoric Correlation
La fórmula para calcular la correlación tetrórica entre las dos variables de esta tabla es:
\[ Tetrachoric\ correlation = \cos\left(\frac{\pi}{{1+\sqrt{\frac{ad}{{b/c}}}}}\right) \]
Supongamos que queremos saber si el género está asociado o no con la preferencia de los partidos políticos, así que tomamos una muestra aleatoria simple de 100 votantes y los encuestamos sobre su preferencia de los partidos políticos.
\[ Tetrachoric\ correlation = \cos\left(\frac{\pi}{{1+\sqrt{\frac{19 \cdot 39}{{30/12}}}}}\right) = 0.277. \]
Esta correlación es bastante baja, lo que indica que hay una asociación débil entre el género y la preferencia de los partidos políticos.
# Crea una matriz de datos de ejemplo (reemplaza esto con tus propios datos)
datos <- matrix(c(1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7), nrow = 5)
# Calcula la correlación tetracórica usando hetcor
hetcor(datos, method = "tetrachoric")## data contain one or more character variables
## the values of which are ordered alphabetically
## Warning in FUN(X[[i]], ...): polyserial correlation between variables datos and method produced a warning:
## y has fewer than 2 levels
## Warning in FUN(X[[i]], ...): polyserial correlation between variables X2 and method produced a warning:
## y has fewer than 2 levels
## Warning in FUN(X[[i]], ...): polyserial correlation between variables X3 and method produced a warning:
## y has fewer than 2 levels
## Warning in hetcor.data.frame(dframe, ML = ML, std.err = std.err, use = use, : 3
## correlations couldn't be computed and are NA
##
## Two-Step Estimates
##
## Correlations/Type of Correlation:
## datos X2 X3 method
## datos 1 Pearson Pearson Polyserial
## X2 1 1 Pearson Polyserial
## X3 1 1 1 Polyserial
## method <NA> <NA> <NA> 1
##
## Standard Errors:
## datos X2 X3
## datos
## X2 1.957e-16
## X3 1.957e-16 1.957e-16
## method <NA> <NA> <NA>
##
## n = 5
La correlación multinivel, también conocida como correlación jerárquica o correlación anidada, se refiere a la examinación de las relaciones o asociaciones entre variables en múltiples niveles o niveles anidados dentro de una estructura de datos. Este enfoque se utiliza a menudo en la investigación y el análisis de datos cuando se trata de datos que tienen una estructura jerárquica o anidada, como datos recopilados de individuos dentro de grupos, que a su vez están dentro de poblaciones más grandes.
En el análisis de correlación multinivel, los investigadores buscan comprender cómo las variables están correlacionadas no solo a nivel individual, sino también en niveles superiores de agregación. Esto les permite explorar si existen correlaciones que existen dentro de grupos o conjuntos de datos, así como correlaciones que existen entre estos grupos.
Por ejemplo, en la investigación educativa, es posible que esté interesado en comprender la relación entre las calificaciones de los estudiantes (nivel individual) y el nivel socioeconómico de las escuelas a las que asisten (nivel grupal), al mismo tiempo que se considera la correlación general a nivel de distrito o regional.
El análisis de correlación multinivel puede proporcionar información sobre las complejas interacciones entre variables en diferentes niveles de una estructura de datos jerárquica y puede ser valioso para tomar decisiones informadas y sacar conclusiones significativas en diversos campos, incluyendo las ciencias sociales, la educación, la epidemiología y más. A menudo, implica el uso de técnicas estadísticas como el modelado multinivel o el modelado lineal jerárquico (HLM) para tener en cuenta la estructura anidada de los datos y estimar correlaciones en diferentes niveles.
El análisis de correlación multinivel implica el procesamiento adecuado de las variables y se utiliza principalmente para analizar la relación entre variables que tienen una estructura jerárquica o multinivel. Aquí hay algunas consideraciones clave:
Identificación de niveles: Lo primero que debes hacer es identificar claramente los diferentes niveles de tus datos. Por lo general, tienes al menos dos niveles: el nivel individual y el nivel grupal. En el ejemplo anterior, el nivel individual incluye los datos de los estudiantes, mientras que el nivel grupal incluye los datos de las escuelas.
Codificación de niveles: Debes codificar adecuadamente los niveles en tus datos. Esto significa asignar a cada observación (por ejemplo, a cada estudiante) un código que indique a qué grupo (por ejemplo, a qué escuela) pertenece. Esto facilitará la identificación de la estructura jerárquica en tus datos.
Selección de variables: Identifica las variables que deseas analizar en términos de su relación en diferentes niveles. En el ejemplo anterior, podrías estar interesado en la relación entre las calificaciones de los estudiantes y las características de las escuelas, como el presupuesto escolar o el tamaño de las clases.
Estadísticas multinivel: Para analizar estas relaciones, generalmente se utilizan modelos estadísticos multinivel o modelos de ecuaciones estructurales multinivel. Estos modelos tienen en cuenta la estructura jerárquica de tus datos y permiten estimar las correlaciones tanto a nivel individual como a nivel grupal.
Normalización de variables: Es importante que las variables estén en la misma escala o que estén normalizadas antes de realizar el análisis de correlación multinivel. Esto puede incluir la estandarización de las puntuaciones, la transformación de variables si es necesario (por ejemplo, logaritmos) y la eliminación de valores atípicos.
Evaluación de la varianza: El análisis multinivel también puede proporcionar información sobre cómo se distribuye la varianza de las variables de interés en los diferentes niveles. Esto es útil para comprender cuánta variabilidad se debe a diferencias entre grupos y cuánta variabilidad se debe a diferencias dentro de los grupos.
Interpretación: Finalmente, interpreta los resultados a la luz de tus preguntas de investigación. ¿Existen correlaciones significativas entre las variables a nivel individual y grupal? ¿Cuánta variabilidad en las calificaciones de los estudiantes se puede atribuir a las diferencias entre las escuelas?
El análisis de correlación multinivel es adecuado cuando estás interesado en comprender cómo las variables se relacionan en diferentes niveles jerárquicos, como estudiantes dentro de escuelas, empleados dentro de empresas o pacientes dentro de hospitales. Permite una comprensión más completa de las influencias contextuales en los resultados individuales y es útil en una variedad de disciplinas, incluyendo la sociología, la psicología, la educación y la salud pública, entre otras.
Supongamos que estás realizando un estudio sobre el rendimiento académico de estudiantes en diferentes escuelas y deseas examinar cómo las características de las escuelas (nivel grupal) pueden estar relacionadas con el rendimiento de los estudiantes (nivel individual). Tu conjunto de datos podría verse así:
A nivel individual (nivel 1): Tienes datos de calificaciones de matemáticas de estudiantes, así como información sobre el nivel de ingresos de sus familias, su asistencia a clases y su tiempo de estudio. A nivel grupal (nivel 2): Tienes datos sobre las escuelas a las que asisten estos estudiantes, como el presupuesto escolar, el tamaño de las clases y el porcentaje de estudiantes con almuerzo gratuito. El objetivo es determinar si existe una correlación entre las características de las escuelas (por ejemplo, el presupuesto escolar o el tamaño de las clases) y el rendimiento académico de los estudiantes en matemáticas. Aquí es donde entra en juego la correlación multinivel.
Mediante el análisis de correlación multinivel, podrías descubrir que, aunque hay una cierta correlación entre el ingreso familiar y el rendimiento académico a nivel individual (algunos estudiantes de familias más ricas tienden a obtener mejores calificaciones), también existe una correlación entre el presupuesto escolar y el rendimiento académico. Es decir, las escuelas con un presupuesto escolar más alto tienden a tener estudiantes con un mejor rendimiento en matemáticas, independientemente del ingreso familiar de los estudiantes.
Este es solo un ejemplo simplificado para ilustrar cómo funciona la correlación multinivel. En situaciones reales, el análisis multinivel puede ser mucho más complejo y puede requerir técnicas estadísticas avanzadas para desentrañar las relaciones entre múltiples niveles de datos.
Paso a Paso
Paso 1: Recopilación de datos
Reúne los datos necesarios para tu estudio. Debes tener información sobre las calificaciones de matemáticas de los estudiantes y las características de las escuelas, como el presupuesto escolar, el tamaño de las clases y el porcentaje de estudiantes con almuerzo gratuito.
Paso 2: Identificación de niveles
Identifica claramente los niveles de tus datos. Tienes dos niveles en este caso: el nivel individual (estudiantes) y el nivel grupal (escuelas).
Paso 3: Codificación de niveles
Asigna un código a cada observación para indicar a qué escuela pertenece cada estudiante. Esto te permite identificar la estructura jerárquica en tus datos.
Paso 4: Selección de variables
Selecciona las variables que deseas analizar. En este ejemplo, estás interesado en la relación entre las calificaciones de matemáticas de los estudiantes y las características de las escuelas (presupuesto escolar, tamaño de las clases, porcentaje de estudiantes con almuerzo gratuito).
Paso 5: Normalización de variables
Asegúrate de que tus variables estén en la misma escala o estén normalizadas según sea necesario. Por ejemplo, podrías estandarizar las calificaciones de matemáticas para que tengan una media de 0 y una desviación estándar de 1.
Paso 6: Análisis estadístico
Utiliza un modelo estadístico multinivel o un modelo de ecuaciones estructurales multinivel para analizar la relación entre las calificaciones de matemáticas y las características de las escuelas. Este modelo tendrá en cuenta la estructura jerárquica de tus datos y te proporcionará estimaciones de correlación a nivel individual y grupal.
Paso 7: Interpretación de resultados
Interpreta los resultados de tu análisis. Por ejemplo, podrías descubrir que existe una correlación significativa entre el presupuesto escolar y las calificaciones de matemáticas a nivel de escuela, lo que sugiere que las escuelas con un presupuesto más alto tienden a tener estudiantes con mejores calificaciones en matemáticas.
Este es un proceso simplificado que ilustra cómo llevar a cabo un análisis de correlación multinivel con el procesamiento de datos necesario en cada etapa. En la práctica, los análisis multinivel pueden ser más complejos y requerir software estadístico especializado para realizar las estimaciones y las pruebas adecuadas.
library(correlation)
# Simulación de numeros
set.seed(13122023)
data <- simulate_simpson(n=100, groups=10)
## Visualización de los datos
library(ggplot2)
ggplot(data, aes(x=V1, y=V2)) +
geom_point() +
geom_smooth(colour="black", method="lm", se=FALSE) +
theme_classic()## # Correlation Matrix (pearson-method)
##
## Parameter1 | Parameter2 | r | 95% CI | t(998) | p
## ---------------------------------------------------------------------
## V1 | V2 | -0.84 | [-0.86, -0.82] | -48.77 | < .001***
##
## p-value adjustment method: Holm (1979)
## Observations: 1000
## The Simpson’s Paradox
ggplot(data, aes(x=V1, y=V2)) +
geom_point(aes(colour=Group)) +
geom_smooth(aes(colour=Group), method="lm", se=FALSE) +
geom_smooth(colour="black", method="lm", se=FALSE) +
theme_classic()## Parameter1 | Parameter2 | r | CI | t(998) | p
## ------------------------------------------------------------------
## V1 | V2 | 0.50 | [0.45, 0.55] | 18.24 | < .001***
##
## Observations: 1000
La correlación de distancia es una medida de dependencia entre dos vectores aleatorios emparejados de dimensiones arbitrarias, no necesariamente iguales. El coeficiente de correlación de distancia de la población es cero si y solo si los vectores aleatorios son independientes. Por lo tanto, la correlación de distancia mide tanto la asociación lineal como la no lineal entre dos variables o vectores aleatorios. Esto contrasta con la correlación de Pearson, que solo puede detectar asociaciones lineales entre dos variables aleatorias.
La correlación de distancia se puede aplicar a cualquier tipo de variable, ya sea continua o categórica. Además, las variables pueden tener diferentes dimensiones
\[dCor(X, Y) = \frac{dCov(X, Y)}{\sqrt{dVar(X) dVar(Y)}}\]
\[dCov_n(X, Y) = \frac{1}{n^2} \sum_{j=1}^{n} \sum_{k=1}^{n} A_{j,k} B_{j,k}\]
\[dVar_n(X) = \frac{1}{n^2} \sum_{k,l} A_{k,l}^2\]
Sea \((Xk, Yk), k = 1, 2,…, n\) una muestra estadística de un par de dos variables aleatorias, \(X\) e \(Y\).
Primero, calculamos las matrices de distancias \(n\) por \(n\) \((aj, k)\) y \((bj, k)\) que contienen todas las distancias por pares.
\[ a_{j,k} = \lVert \mathbf{X}_j - \mathbf{X}_k \rVert, \quad j,k = 1,2,\ldots,n \\ b_{j,k} = \lVert \mathbf{Y}_j - \mathbf{Y}_k \rVert, \quad j,k = 1,2,\ldots,n \]
Luego tomamos las distancias dobles centradas.
$$ A_{j,k} = a_{j,k} - {a}{j.} - {a}{.k} + {a}{..} \ B{j,k} = b_{j,k} - {b}{j.} - {b}{.k} + {b}_{..}
$$
Calcular las matrices de distancia centradas significa calcular las matrices de distancia para cada variable y luego centrarlas. Una matriz de distancia es una matriz cuadrada que contiene las distancias entre todos los pares de observaciones en un conjunto de datos. Para centrar una matriz de distancia, se resta la media de cada fila y cada columna y se agrega la media general de la matriz. Esto tiene el efecto de centrar las distancias alrededor de cero.
¿Por qué hacemos esto?
La razón por la que hacemos esto es por la siguiente razón. Cualquier tipo de covarianza es el producto cruzado de momentos. Como las distancias no son momentos, tenemos que calcularlas en momentos. Para calcular estos momentos, primero hay que calcular las desviaciones de la media, que es lo que se consigue con el doble centrado.
centered_dist_matrix <- function(x) {
n <- length(x)
a <- matrix(0, n, n)
for (i in seq_len(n)) {
for (j in seq_len(n)) {
a[i, j] <- abs(x[i] - x[j]) # Eclidiana
}
}
row_means <- rowMeans(a)
col_means <- colMeans(a)
grand_mean <- mean(a)
for (i in seq_len(n)) {
for (j in seq_len(n)) {
a[i, j] <- a[i, j] - row_means[i] - col_means[j] + grand_mean
}
}
return(a)
}
n <- length(iris$Petal.Length)
A <- centered_dist_matrix(iris$Petal.Length)
B <- centered_dist_matrix(iris$Petal.Width)
dcov <- sum(A * B) / (n ^ 2)
dvar_x <- sum(A ^ 2) / (n ^ 2)
dvar_y <- sum(B ^ 2) / (n ^ 2)
dcor <- dcov / sqrt(dvar_x * dvar_y)
dcor## [1] 0.9479572
data(iris)
library(correlation)
print(cor_test(iris, "Petal.Length", "Petal.Width", method = "distance"))## Parameter1 | Parameter2 | r | 95% CI | t(11024) | p
## -----------------------------------------------------------------------
## Petal.Length | Petal.Width | 0.95 | [0.93, 0.96] | 312.15 | < .001***
##
## Observations: 150
La correlación de porcentaje de curvatura (Percentage Bend Correlation) es una medida de correlación robusta que protege contra valores atípicos en las distribuciones marginales de las variables. Es similar a otras medidas de correlación robustas, como la correlación de Kendall. La correlación de porcentaje de curvatura se puede aplicar a cualquier tipo de variable continua. No he encontrado información específica sobre su aplicación a variables categóricas.
La correlación de curvatura porcentual entre las variables \(X\) e \(Y\) se calcula siguiendo los pasos que se indican a continuación:
Paso 1: Establecer \(m=((1-β)\cdot n)+0,5\) y redondear m al entero más próximo.
Paso 2: Sea \(𝑊𝑖 = |𝑋𝑖 - 𝑀𝑥|\) para \(𝑖 = 1, 2, 3, ... , 𝑛\) donde \(𝑀𝑥\) es la mediana de \(X\)
Paso 3: Ordenar los \(𝑊𝑖\) en orden ascendente
Paso 4: \(𝑊\hat{𝑥} = 𝑊(𝑚\)) (es decir, el estadístico de orden m-ésimo). \(W (m)\) es la estimación del cuantil \((1-β)\) de \(W\)
Paso 5: Ordene los valores de \(X\). Calcular el número de valores de \((𝑋𝑖 - 𝑀𝑥)/𝑊̂𝑥 (𝛽)\) que son menores que -1 y el número que son mayores que +1 y se almacenan en \(i1\) e \(i2\) respectivamente. A continuación, se calculan los términos siguientes respectivamente (14, 15, 16).
\[ S_x = \sum_{i=i1+1}^{i2} X_i\tag{14} \]
\[\hat{\Phi}_x = \frac{W_x(i2-i1)+S_x}{n-i1-i2}\tag{15}\]
\[U_i = \frac{X_i - \hat{\Phi}_x}{W_x}\tag{16}\]
Paso 6: Repita los cálculos anteriores en la variable Y. Almacene las cantidades correspondientes en \(𝑊\hat{𝑦}\), \(\phi\hat{𝑦}\) , y \(𝑉𝑖\).
\[\gamma(X) = \max\{-1, \min\{1, x\}\}\tag{17}\]
Paso 8: Calcula los siguientes términos (18, 19)
\[A_i = \gamma(U_i)\tag{18}\]
\[B_i = \gamma(V_i)\tag{19}\]
Paso 9: Calcular el coeficiente de correlación de curvatura porcentual como se indica a continuación (20):
\[r_{pbn} = \frac{\sum_{i=1}^{n} A_i B_i}{\sqrt{\sum_{i=1}^{n} A_i^2 \sum_{i=1}^{n} B_i^2}}\tag{20}\]
El valor de \(β\) se selecciona entre 0 y 0,5. Los valores más altos de β dan lugar a un punto de ruptura más alto a expensas de una menor eficiencia.
# A pedal
percentage_bend_correlation <- function(X, Y, beta = 0.5) {
n <- length(X)
# Paso 1
m <- floor(((1 - beta) * n) + 0.5)
# Paso 2
median_X <- median(X)
W_X <- abs(X - median_X)
# Paso 3
sorted_W_X <- sort(W_X)
# Paso 4
W_hat_X <- sorted_W_X[m]
# Paso 5
sorted_X <- sort(X)
i1 <- sum(((sorted_X - median_X) / W_hat_X) < -1)
i2 <- sum(((sorted_X - median_X) / W_hat_X) > 1)
S_X <- sum(sorted_X[(i1 + 1):(n - i2)])
phi_hat_X <- (W_hat_X * (i2 - i1) + S_X) / (n - i1 - i2)
U_X <- (sorted_X - phi_hat_X) / W_hat_X
# Repetir en Y
median_Y <- median(Y)
W_Y <- abs(Y - median_Y)
sorted_W_Y <- sort(W_Y)
W_hat_Y <- sorted_W_Y[m]
sorted_Y <- sort(Y)
i1_Y <- sum(((sorted_Y - median_Y) / W_hat_Y) < -1)
i2_Y <- sum(((sorted_Y - median_Y) / W_hat_Y) > 1)
S_Y <- sum(sorted_Y[(i1_Y + 1):(n - i2_Y)])
phi_hat_Y <- (W_hat_Y * (i2_Y - i1_Y) + S_Y) / (n - i1_Y - i2_Y)
V_Y <- (sorted_Y - phi_hat_Y) / W_hat_Y
# Paso 7
gamma_X <- function(x) mapply(function(xi) max(-1, min(1, xi)), x)
gamma_Y <- function(y) mapply(function(yi) max(-1, min(1, yi)), y)
# Paso 8
A_X <- gamma_X(U_X)
B_X <- gamma_X(V_Y)
A_Y <- gamma_Y(U_X)
B_Y <- gamma_Y(V_Y)
# Paso 9
numerator <- sum(A_X * B_Y)
denominator <- sqrt(sum(A_X^2) * sum(B_Y^2))
pb_correlation <- numerator / denominator
return(pb_correlation)
}
correlation_value <- percentage_bend_correlation(iris$Petal.Length, iris$Petal.Width, beta = 0.2)
correlation_value## [1] 0.9920275
# Paquete correlation
library(correlation)
print(cor_test(iris, "Petal.Length", "Petal.Width", method = "percentage"))## Parameter1 | Parameter2 | r | 95% CI | t(148) | p
## ---------------------------------------------------------------------
## Petal.Length | Petal.Width | 0.97 | [0.95, 0.98] | 45.34 | < .001***
##
## Observations: 150
Shepherd’s Pi correlation es una medida de correlación robusta que es equivalente a la correlación de Spearman después de la eliminación de valores atípicos mediante la distancia de Mahalanobis con bootstrap1. Esta medida se puede aplicar a variables continuas y ordinales, y es útil para detectar relaciones monótonas entre dos variables, incluso en presencia de valores atípicos.
La fórmula para calcular la distancia de Mahalanobis es la siguiente:
\[D^2 = (\mathbf{x} - \mathbf{m})^T \cdot \mathbf{C}^{-1} \cdot (\mathbf{x} - \mathbf{m})\]
dónde,
\(D ^ 2\) es el cuadrado de la distancia de Mahalanobis.
\(x\) es el vector de la observación (fila en un conjunto de datos).
\(m\) es el vector de valores medios de variables independientes (media de cada columna).
\(C\) ^ (- 1) es la matriz de covarianza inversa de variables independientes.
# Cargamos el conjunto de datos iris
data(iris)
# Apedal
mahalanobis_boot <- function(x, y, B = 1000) {
n <- length(x)
d <- numeric(n)
for (i in seq_len(n)) {
boot_dist <- numeric(B)
for (b in seq_len(B)) {
boot_idx <- sample(seq_len(n), n, replace = TRUE)
x_boot <- x[boot_idx]
y_boot <- y[boot_idx]
cov_boot <- cov(cbind(x_boot, y_boot))
center_boot <- c(mean(x_boot), mean(y_boot))
boot_dist[b] <- mahalanobis(cbind(x[i], y[i]), center_boot, cov_boot)
}
d[i] <- mean(boot_dist)
}
return(d)
}
d <- mahalanobis_boot(iris$Petal.Length, iris$Petal.Width)
# Eliminamos los valores atípicos utilizando un umbral arbitrario
threshold <- quantile(d, 0.95)
x_no_outliers <- iris$Petal.Length[d <= threshold]
y_no_outliers <- iris$Petal.Width[d <= threshold]
# Por defecto
cor(x_no_outliers, y_no_outliers, method = "spearman")## [1] 0.9476296
# Paquete correlation
library(correlation)
cor_test(iris, "Petal.Length", "Petal.Width", method = "shepherd")Quitting from lines 1601-1640 [unnamed-chunk-25] (Apuntes.Rmd) Error
in dimnames(x) <- dn: ! length of ‘dimnames’ [2] not
equal to array extent Backtrace: 1. rmarkdown::render(…) 2.
knitr::knit(knit_input, knit_output, envir = envir, quiet = quiet) 3.
knitr:::process_file(text, output) 8. knitr:::process_group.block(group)
9. knitr:::call_block(x) … 24. rmarkdown:::knit_print.data.frame(x, …)
26. pander:::pander.data.frame(x) 27. pander::pandoc.table(x, caption =
caption, …) 29. pander::pandoc.table.return(…) 30.
base::colnames<-(*tmp*, value = cln)
El coeficiente de Blomqvist, también conocido como el coeficiente de correlación de Blomqvist, es una medida de correlación no paramétrica utilizada para evaluar la relación entre dos variables. Evalúa si hay una relación monótona (cualquier tipo de relación creciente o decreciente) entre las variables, sin suponer ningún tipo específico de relación funcional. Es particularmente útil cuando se sospecha una relación no lineal entre las variables. A diferencia de las correlaciones lineales como la correlación de Pearson, el coeficiente de Blomqvist se enfoca en la relación basada en el rango de los datos y no asume una relación lineal, es uno de los otros coeficientes no paramétricos basados en la mediana.
\[ \hat{\beta}_n = \frac{2n_1}{n_1 + n_2} - 1 \]
El coeficiente de Blomqvist se aplica a variables cuantitativas, preferiblemente continuas o discretas, y es adecuado para evaluar relaciones monótonas entre ellas. Para un par de variables continuas \(X\) e \(Y\), el \(β\) de Blomqvist puede calcularse como
$$ = { (X - {x}) (Y - {y}) > 0 } - { (X - {x}) (Y - {y}) < 0 }
$$
Donde \(\bar{x}\) y \(\bar{y}\) son la mediana de \(X\) e \(Y\), respectivamente.
data(iris)
# A pedal
blomqvist_beta <- function(X, Y) {
n1 <- median(X)
n2 <- median(Y)
return ((2 * n1) / (n1 + n2)) - 1
}
blomqvist_beta(iris$Petal.Length, iris$Petal.Width)## [1] 1.539823
## [1] 1.183673
## [1] 1.633803
## [1] 1.318182
blomqvist_beta <- function(X, Y) {
n <- length(X)
median_X <- median(X)
median_Y <- median(Y)
positive_count <- sum(((X - median_X) * (Y - median_Y)) > 0)
negative_count <- sum(((X - median_X) * (Y - median_Y)) < 0)
return (positive_count - negative_count)
}
blomqvist_beta(iris$Petal.Length, iris$Petal.Width)## [1] 129
## [1] -26
## [1] 114
## [1] -23
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Sepal.Length 0.6856935 -0.0424340 1.2743154 0.5162707
## Sepal.Width -0.0424340 0.1899794 -0.3296564 -0.1216394
## Petal.Length 1.2743154 -0.3296564 3.1162779 1.2956094
## Petal.Width 0.5162707 -0.1216394 1.2956094 0.5810063
# Por la librería correlation
library(correlation)
print(cor_test(iris, "Petal.Length", "Petal.Width", method = "blomqvist"))## Parameter1 | Parameter2 | r | 95% CI | t(148) | p
## ---------------------------------------------------------------------
## Petal.Length | Petal.Width | 0.91 | [0.87, 0.93] | 26.15 | < .001***
##
## Observations: 150
La medida de dependencia de Hoeffding (Hoeffding’s D) es una medida no paramétrica de la dependencia entre dos variables. Esta medida se basa en la diferencia entre las probabilidades conjuntas y las probabilidades marginales de las dos variables.
\[ D = \frac{30(n-2)(n-3)D_1 - 2(n-2)D_3}{n(n-1)(n-2)(n-3)(n-4)} \]
Donde:
\[ \begin{equation} \begin{aligned} D_1 &= \sum_i (Q_i - 1)(Q_i - 2) \\ D_2 &= \sum_i (R_{ix} - 1)(R_{ix} - 2)(R_{iy} - 1)(R_{iy} - 2) \\ D_3 &= L_i(R_{ix} - 1)(R_{iy} - 2)(Q_i - 1) \end{aligned} \end{equation} \]
Donde \(𝑅𝑖𝑥\) y \(𝑅𝑖𝑦\) son los rangos de los i-ésimos valores \(X\) e \(Y\). \(𝑄𝑖\) también se conoce como rango bivariante y representa el número de puntos cuyos valores \(X\) e \(Y\) son inferiores al punto i-ésimo. Un punto que está empatado sólo en el valor \(X\) o en el valor \(Y\) contribuye \(1/2\) a \(𝑄𝑖\) si el otro valor es menor que el valor correspondiente del punto ith. Un punto que tanto en el valor \(X\) como en el valor \(Y\) contribuye \(1/4\) a \(𝑄𝑖\).
Los valores del estadístico D se sitúan entre -0,5 y 1 (1 indica dependencia completa) cuando no hay ningún empate en el conjunto de datos. Sin embargo, cuando se producen empates, el estadístico D puede dar como resultado un valor menor. Es decir, para un par de variables con valores idénticos, el estadístico D de Hoeffding puede ser inferior a 1. Con un gran número de empates en un conjunto de datos pequeño, el estadístico D puede ser inferior a -0,5.
# A pedal
bivariate_rank <- function(x, y) {
n <- length(x)
Q <- numeric(n)
for (i in seq_len(n)) {
for (j in seq_len(n)) {
if (x[j] < x[i] && y[j] < y[i]) {
Q[i] <- Q[i] + 1
} else if (x[j] < x[i] && y[j] == y[i]) {
Q[i] <- Q[i] + 0.5
} else if (x[j] == x[i] && y[j] < y[i]) {
Q[i] <- Q[i] + 0.5
} else if (x[j] == x[i] && y[j] == y[i]) {
Q[i] <- Q[i] + 0.25
}
}
}
return(Q)
}
hoeffding_d <- function(X, Y) {
n <- length(X)
rank_X <- rank(X)
rank_Y <- rank(Y)
Q <- bivariate_rank(X, Y)
D1 <- sum((Q - 1) * (Q - 2))
D3 <- sum((rank_X - 1) * (rank_Y - 2) * (Q - 1))
hoeffding_d_value <- 30 * (((n-2)*(n-3)*D1-2*(n-2)*D3)/(n*(n-1)*(n-2)*(n-3)*(n-4)))
return(hoeffding_d_value)
}
d_result <- hoeffding_d(iris$Petal.Length, iris$Petal.Width)
d_result## [1] -5.553554
# Por el paquete correlation
print(cor_test(iris, "Petal.Length", "Petal.Width", method = "hoeffding"))## Parameter1 | Parameter2 | r | 95% CI | t(148) | p
## ---------------------------------------------------------------
## Petal.Length | Petal.Width | 0.56 | | | < .001***
##
## Observations: 150
La correlación policórica es un tipo específico de correlación que se utiliza cuando se trabaja con variables ordinales, es decir, variables que tienen un orden pero cuyos intervalos entre categorías no son necesariamente iguales. Esta medida de correlación se adapta a la naturaleza ordinal de las variables y puede ser una opción más adecuada que las correlaciones tradicionales cuando se trata con datos ordinales.
En términos más técnicos, la correlación policórica se basa en un modelo de respuesta al ítem (IRT, por sus siglas en inglés) y es particularmente útil cuando estás trabajando con datos provenientes de pruebas psicométricas u otros instrumentos de medición en los que las respuestas están en una escala ordinal.
En resumen, la correlación policórica es una medida de asociación entre variables ordinales que tiene en cuenta la naturaleza específica de los datos ordinales y puede ser útil en contextos en los que las correlaciones tradicionales podrían no ser apropiadas.
Supongamos entonces que tenemos un data con tres variables (aunque se puede tratar de más variables), en cada una, los valores pueden ser tres: alto, medio o bajo. Si intentamos usar la función cor(), no encontraríamos un valor.
En R, existe una librería, “polycor” que puede ayudar a sacar la matriz de correlaciones de este tipo de variables.
# Carga el paquete
library(polycor)
# Creamos un dataframe de ejemplo con datos categóricos
data1 <- data.frame(
variable1 = c("alto", "medio", "bajo", "medio", "alto"),
variable2 = c("medio", "bajo", "alto", "alto", "alto"),
variable3 = c("alto", "medio", "medio", "medio", "bajo")
)
# Convierte las variables a factores ordenados
data1[] <- lapply(data1, ordered, levels = c("bajo", "medio", "alto"))
# Calcula la matriz de correlaciones policóricas
cor_matrix <- hetcor(data1, method = "polychor")
# Muestra la matriz de correlaciones policóricas
print(cor_matrix, digits = 2)##
## Two-Step Estimates
##
## Correlations/Type of Correlation:
## variable1 variable2 variable3
## variable1 1 Polychoric Polychoric
## variable2 -0.21 1 Polychoric
## variable3 0 -0.57 1
##
## Standard Errors:
## variable1 variable2
## variable1
## variable2 0.57
## variable3 0.61 0.46
##
## n = 5
##
## P-values for Tests of Bivariate Normality:
## variable1 variable2
## variable1
## variable2 0.28
## variable3 0.081 0.2
La correlación biserial es un coeficiente de correlación utilizado cuando se tiene una variable continua y una variable dicotómica (binaria). Es especialmente útil cuando una de las variables es latente y no directamente observable, y la otra es una medida observable relacionada con la presencia o ausencia de algún evento.
El coeficiente de correlación biserial se encuentra en el rango de -1 a 1, donde -1 indica una relación perfecta negativa, 1 indica una relación perfecta positiva, y 0 indica ausencia de correlación.
La correlación gamma es un coeficiente de correlación no paramétrico que se utiliza para medir la asociación entre dos variables ordinales. Las variables ordinales son aquellas que tienen un orden inherente, pero las distancias entre las categorías no están definidas. La correlación gamma mide la concordancia o discordancia en las clasificaciones relativas de las observaciones en ambas variables.
# Cargar el paquete MASS
library(MASS)
# Crear dos variables ordinales (ejemplo)
variable1 <- c(1, 2, 3, 2, 1, 1, 1, 1, 2 ,3 , 2, 2, 3, 3, 1, 3, 1, 2)
variable2 <- c(3, 2, 1, 2, 3, 2, 3, 2, 2, 1, 1, 1 , 2, 3, 1, 3, 2, 2)
# Calcular la correlación gamma
resultado_cor <- cor.smooth(table(variable1, variable2))
# Imprimir el resultado
print(resultado_cor)## 1 2 3
## 1 1.0000000 -0.1889822 -0.7559289
## 2 -0.1889822 1.0000000 -0.5000000
## 3 -0.7559289 -0.5000000 1.0000000
La correlación de Winsorizada (Winsorized correlation) es una medida de la asociación entre dos variables que se calcula después de ajustar o “Winsorizar” los valores extremos (outliers) en ambos conjuntos de datos. La Winsorización implica reemplazar los valores extremos con valores más cercanos dentro de un rango específico.
# Instalar y cargar el paquete "robustbase" si aún no está instalado
# install.packages("robustbase")
library(robustbase)
# Crear dos vectores de ejemplo
x <- c(1, 2, 3, 4, 50, 7, 6, 1, 3, 9, 0, 65, 3, 45, 66, 22, 1, 4, 5, 56, 3, 4, 5, 2)
y <- c(6, 7, 8, 9, 10, 1, 2, 3, 42, 4, 23, 1, 9, 76, 1, 2, 1, 1, 3, 3, 1, 1, 3, 4)
# Crear una función para calcular la correlación de Pearson Winsorizado
pearson_winsorized_cor <- function(x, y, tr = 0.2) {
x_winsorized <- pmax(pmin(x, quantile(x, 1 - tr)), quantile(x, tr))
y_winsorized <- pmax(pmin(y, quantile(y, 1 - tr)), quantile(y, tr))
cor(x_winsorized, y_winsorized, method = "pearson")
}
# Calcular la correlación de Pearson Winsorizado
correlation_winsorized <- pearson_winsorized_cor(x, y)
# Imprimir el resultado
print(correlation_winsorized)## [1] -0.06184961
Sí, conozco la función de correlación de Gauss. La correlación de Gauss se refiere a la función de densidad de probabilidad de la distribución normal, también conocida como distribución gaussiana o campana de Gauss. Esta función es fundamental en estadísticas y probabilidad.
# Función para calcular la correlación de Gauss
correlacion.gauss <- function(x, y) {
# Calcular las medias y varianzas de x e y
mu_x <- mean(x)
mu_y <- mean(y)
sigma_x <- sd(x)
sigma_y <- sd(y)
# Calcular el producto de las densidades de probabilidad de x e y
f_xy <- dnorm(x, mu_x, sigma_x) * dnorm(y, mu_y, sigma_y)
# Calcular la correlación de Pearson
r <- sum(f_xy) / sum(dnorm(x, mu_x, sigma_x))
return(r)
}
# Ejemplo
x <- rnorm(100)
y <- rnorm(100)
# Calcular la correlación de Gauss
r <- correlacion.gauss(x, y)
# Imprimir la correlación de Gauss
print(r)## [1] 0.2668612
data(ma2)
model <- newModel(fnSimVec = ma2_sim_vec, fnSum = ma2_sum, simArgs = list(TT = 10),
theta0 = ma2$start, fnLogPrior = ma2_prior)## *** initialize "MODEL" ***
## has simulation function: TRUE
## has summary statistics function: TRUE
## has initial guess / point estimate of the parameter: TRUE
## running a short simulation test ... success
## *** end initialize ***
set.seed(100)
# generate 1000 simualtions from the ma2 model
x <- simulation(model, n = 1000, theta = c(0.6, 0.2))$x
corr1 <- cor(x) # traditional correlation matrix
corr2 <- gaussianRankCorr(x) # Gaussian rank correlation matrix
corr2## [,1] [,2] [,3] [,4] [,5]
## [1,] 1.000000000 0.42600938 0.03870499 0.03424222 -0.0396452238
## [2,] 0.426009384 1.00000000 0.44846726 0.04990689 0.0201894824
## [3,] 0.038704993 0.44846726 1.00000000 0.48163491 0.0115319089
## [4,] 0.034242222 0.04990689 0.48163491 1.00000000 0.4002057363
## [5,] -0.039645224 0.02018948 0.01153191 0.40020574 1.0000000000
## [6,] 0.002882574 -0.02089921 -0.03691458 -0.02891649 0.4534677387
## [7,] 0.007922864 -0.01751489 0.01900479 0.03134935 0.0239635505
## [8,] 0.011035519 0.01195403 0.03004580 0.02793279 0.0302654027
## [9,] 0.030975602 0.03857345 0.02089465 -0.01218517 -0.0002651987
## [10,] 0.010981881 0.04434087 0.01858765 -0.04909949 -0.0288985880
## [,6] [,7] [,8] [,9] [,10]
## [1,] 0.002882574 0.007922864 0.01103552 0.0309756019 0.01098188
## [2,] -0.020899207 -0.017514888 0.01195403 0.0385734485 0.04434087
## [3,] -0.036914576 0.019004789 0.03004580 0.0208946503 0.01858765
## [4,] -0.028916489 0.031349354 0.02793279 -0.0121851696 -0.04909949
## [5,] 0.453467739 0.023963550 0.03026540 -0.0002651987 -0.02889859
## [6,] 1.000000000 0.473223067 0.04177045 0.0215829759 -0.02005148
## [7,] 0.473223067 1.000000000 0.44782550 0.0365443458 -0.01942464
## [8,] 0.041770450 0.447825498 1.00000000 0.4705331503 -0.01598315
## [9,] 0.021582976 0.036544346 0.47053315 1.0000000000 0.43647959
## [10,] -0.020051485 -0.019424640 -0.01598315 0.4364795933 1.00000000
oldpar <- par()
par(mfrow = c(1, 2))
image(corr1, main = 'traditional correlation matrix')
image(corr2, main = 'Gaussian rank correlation matrix')par(mfrow = oldpar$mfrow)
std <- apply(x, MARGIN = 2, FUN = sd) # standard deviations
cor2cov(gaussianRankCorr(x), std) # convert to covariance matrix## [,1] [,2] [,3] [,4] [,5]
## [1,] 1.347267841 0.56631206 0.05036298 0.04626651 -0.0521399306
## [2,] 0.566312062 1.31165418 0.57578171 0.06653467 0.0261991658
## [3,] 0.050362979 0.57578171 1.25670952 0.62851147 0.0146477615
## [4,] 0.046266506 0.06653467 0.62851147 1.35505087 0.5278538739
## [5,] -0.052139931 0.02619917 0.01464776 0.52785387 1.2838231647
## [6,] 0.003863001 -0.02763483 -0.04777852 -0.03886339 0.5932207246
## [7,] 0.010936180 -0.02385468 0.02533594 0.04339732 0.0322894228
## [8,] 0.014898881 0.01592421 0.03917736 0.03782039 0.0398871462
## [9,] 0.041528002 0.05102611 0.02705496 -0.01638339 -0.0003470709
## [10,] 0.015501646 0.06175725 0.02534055 -0.06950705 -0.0398201886
## [,6] [,7] [,8] [,9] [,10]
## [1,] 0.003863001 0.01093618 0.01489888 0.0415280017 0.01550165
## [2,] -0.027634831 -0.02385468 0.01592421 0.0510261086 0.06175725
## [3,] -0.047778515 0.02533594 0.03917736 0.0270549582 0.02534055
## [4,] -0.038863389 0.04339732 0.03782039 -0.0163833869 -0.06950705
## [5,] 0.593220725 0.03228942 0.03988715 -0.0003470709 -0.03982019
## [6,] 1.333013759 0.64974020 0.05609451 0.0287821313 -0.02815386
## [7,] 0.649740197 1.41420715 0.61943999 0.0501962200 -0.02809206
## [8,] 0.056094512 0.61943999 1.35290658 0.6321475205 -0.02260843
## [9,] 0.028782131 0.05019622 0.63214752 1.3341007124 0.61310144
## [10,] -0.028153859 -0.02809206 -0.02260843 0.6131014419 1.47893188
Canal de YouTube: DATAtab. (2023, marzo). Spearman Rank Correlation [Simply explained]. YouTube. https://www.youtube.com/watch?v=XV_W1w4Nwoc
Spearman’s rank correlation coefficient is a nonparametric measure of statistical dependence between two variables. For more details, you can refer to the Wikipedia page: Spearman’s Rank Correlation Coefficient.
Encyclopedia of Mathematics. (sin fecha). Kendall coefficient of rank correlation. Recuperado de https://encyclopediaofmath.org/wiki/Kendall_coefficient_of_rank_correlation.
Berkeley Department of Statistics. (s.f.). Correlation.pdf. Recuperado de https://www.stat.berkeley.edu/~rabbee/correlation.pdf
Horvath, S. (2011). Weighted Network Analysis: Applications in Genomics and Systems Biology. Springer New York Dordrecht Heidelberg London. DOI: 10.1007/978-1-4419-8819-5
Statology. (2021, August 16). Tetrachoric Correlation: Definition & Example1 Recuperado el 14 de diciembre de 2023, de https://www.statology.org/tetrachoric-correlation/
Simpson’s paradox. (2023, December 14). In Wikipedia. Retrieved 09:58, December 14, 2023, from https://en.wikipedia.org/wiki/Simpson%27s_paradox
R Core Team. (2021). correlation: A Lightweight Package for Calculating Correlations. Retrieved December 14, 2023, from https://cran.r-project.org/web/packages/correlation/correlation.pdf