library(scatterplot3d)

Diagramas de dispersión

Este es un ejemplo de datos tomados en una zona en la que se está buscando la profundidad a la cual se encuentra agua subterránea. El primer gráfico es en $\mathbb{R}^3$ que se presenta tiene en cuenta las dos componentes de la ubicación espacial y la altura es la variable de interés. Posteriormente, se presentan dos diagramas de dispersión en $\mathbb{R}^2$ de la variable en cada una de las ubicaciones espaciales.

aquifer=read.table("aquifer.txt",dec=",",head=T)
scatterplot3d(aquifer$Este,aquifer$Norte,aquifer$Profundidad,xlab="Este",ylab="Norte",zlab="Profundidad", highlight.3d=TRUE,angle=55, scale.y=0.7, pch=16)

plot(aquifer$Este,aquifer$Profundidad,xlab="Este",ylab="Profundidad")

plot(aquifer$Norte,aquifer$Profundidad,xlab="Norte",ylab="Profundidad")

En ambas coordenadas se observa un patrón, el valor de la variable decrece a medida que el valor de las coordenadas aumenta.

Matrices de covarianza, correlación y de diagramas de dispersión

cov(aquifer)
##                    Este       Norte Profundidad
## Este          4217.1789    409.2267   -30922.11
## Norte          409.2267   3015.4414   -20816.83
## Profundidad -30922.1144 -20816.8319   373736.71
cor(aquifer)
##                   Este      Norte Profundidad
## Este         1.0000000  0.1147565  -0.7788885
## Norte        0.1147565  1.0000000  -0.6200923
## Profundidad -0.7788885 -0.6200923   1.0000000
panel.hist <- function(x, ...)
{
    usr <- par("usr")
    par(usr = c(usr[1:2], 0, 1.5) )
    h <- hist(x, plot = FALSE)
    breaks <- h$breaks; nB <- length(breaks)
    y <- h$counts; y <- y/max(y)
    rect(breaks[-nB], 0, breaks[-1], y, col = "orange")
}
pairs(aquifer,pch = 16, diag.panel = panel.hist,main = "Matriz de Dispersión - aquifer")

panel.boxplot <- function(x, ...)
{
    # Obtenemos los límites del panel actual
    usr <- par("usr")
    
    # Dibujamos el boxplot horizontal
    # 'add = TRUE' evita que se abra una nueva ventana gráfica
    # 'at' lo centra en la mitad del eje Y del panel actual
    # 'boxwex' controla el grosor del boxplot para que no ocupe todo el recuadro
    boxplot(x, horizontal = TRUE, add = TRUE, 
            at = mean(usr[3:4]), 
            boxwex = (usr[4] - usr[3]) * 0.4, 
            col = "lightblue", ...)
}

pairs(aquifer,pch = 16, diag.panel = panel.boxplot,main = "Matriz de Dispersión - aquifer")

Distancias entre individuos, variables numéricas

Dist_euc <- as.matrix(round(dist(aquifer[,1:2], method = "euclidean"),1))
Dist_max <- as.matrix(round(dist(aquifer[,1:2], method = "maximum"),1))
Dist_man <- as.matrix(round(dist(aquifer[,1:2], method = "manhattan"),1))
Dist_can <- as.matrix(round(dist(aquifer[,1:2], method = "canberra"),1))
Dist_min <- as.matrix(round(dist(aquifer[,1:2], method = "minkowski", p = 3),1)) # p=3 como ejemplo

A continuación se mencionan algunas distancias que pueden ser utilizadas para determinar cercanía entre dos individuos \(\boldsymbol x\), \(\boldsymbol y\) que han sido observados en \(P\) variables numéricas:

\[\boldsymbol x=(x_1,...,x_P)\] y \[\boldsymbol y=(y_1,...,y_P)\]

Distancia euclidiana

Es la longitud de la menor trayectoria entre dos puntos siempre y cuando el movimiento diagonal esté permitido y el fenómeno ocurra sobre el plano. Es muy sensible a los valores atípicos dado que eleva al cuadrado las diferencias.

\[d_{Euc}(\boldsymbol x,\boldsymbol y)=\sqrt{\sum_{i=1}^{P}(x_i-y_i)^2}\]

Dist_euc[1:5,1:5]
##      1     2    3     4     5
## 1  0.0  79.3 61.3  79.9  82.8
## 2 79.3   0.0 26.9  16.8 126.6
## 3 61.3  26.9  0.0  19.4  99.7
## 4 79.9  16.8 19.4   0.0 115.7
## 5 82.8 126.6 99.7 115.7   0.0

Completando el conjunto de las distancias geométricas fundamentales dentro del análisis de datos, se encuentra la \textbf{Distancia de la Norma del Supremo}, conocida formalmente en el ámbito de los espacios métricos como la \textbf{Distancia de } o métrica $L_\infty$ (L-infinito).

Mientras que la distancia de Manhattan suma todas las diferencias absolutas y la Euclidiana las combina mediante sus cuadrados, la norma del supremo se basa en una filosofía matemática distinta: \textbf{únicamente considera la diferencia absoluta más grande entre todas las dimensiones}, ignorando por completo el comportamiento de las demás.

Distancia de Chebyshev

para \(i=1,...,P\)

\[d_{sup}(\boldsymbol x,\boldsymbol y)=\max_{i}|x_i-y_i|\]

Dist_max[1:5,1:5]
##      1     2    3     4     5
## 1  0.0  70.2 43.9  61.4  63.0
## 2 70.2   0.0 26.2  14.3 123.9
## 3 43.9  26.2  0.0  17.5  97.6
## 4 61.4  14.3 17.5   0.0 115.1
## 5 63.0 123.9 97.6 115.1   0.0

Distancia de Manhattan

\[d_{Manhattan}(\boldsymbol x, \boldsymbol y)=\sum_{i=1}^{P}|x_i-y_i|\]

Dist_man[1:5,1:5]
##       1     2     3     4     5
## 1   0.0 107.0  86.7 112.6 116.7
## 2 107.0   0.0  32.1  23.1 150.1
## 3  86.7  32.1   0.0  25.9 117.9
## 4 112.6  23.1  25.9   0.0 127.0
## 5 116.7 150.1 117.9 127.0   0.0

Distancia de Canberra

Divide la distancia por \(P-Z\) donde \(Z\) es el número de atributos que son 0 para \(\boldsymbol x\) y \(\boldsymbol y\) y \(P\) es la dimensión de los vectores.\[d_{Canberra}(\boldsymbol x,\boldsymbol y)=\sum_{i=1}^{P}\frac{|x_i-y_i|}{|x_i|+|y_i|}\]

Dist_can[1:5,1:5]
##     1   2   3   4   5
## 1 0.0 1.2 1.2 1.3 0.7
## 2 1.2 0.0 1.0 0.3 1.2
## 3 1.2 1.0 0.0 0.9 1.1
## 4 1.3 0.3 0.9 0.0 1.1
## 5 0.7 1.2 1.1 1.1 0.0

Distancia de Minkowski

\[d(\boldsymbol x, \boldsymbol y)=\left(\sum_{i=1}^{P}|x_i-y_i|^k\right)^{\frac{1}{k}}\]

Dist_min[1:5,1:5]
##      1     2    3     4     5
## 1  0.0  73.4 54.6  71.5  74.0
## 2 73.4   0.0 26.3  15.4 124.3
## 3 54.6  26.3  0.0  18.1  97.9
## 4 71.5  15.4 18.1   0.0 115.1
## 5 74.0 124.3 97.9 115.1   0.0

Medidas de similaridad

Distancia binaria

\[d(\boldsymbol x, \boldsymbol y)=\frac{b+c}{a+b+c}\]

# Vectores de ejemplo con presencia (1) y ausencia (0)
x <- c(1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0)
y <- c(1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0)

# Extracción automática de las frecuencias a, b, c, d
a <- sum(x == 1 & y == 1)
b <- sum(x == 1 & y == 0)
c <- sum(x == 0 & y == 1)
d <- sum(x == 0 & y == 0)

# Mostramos los valores calculados
#cat("a (1,1) =", a, "\nb (1,0) =", b, "\nc (0,1) =", c, "\nd (0,0) =", d)

s_jaccard <-function(a,b,c,d){a/(a + b + c)}
s_smc <- function(a,b,c,d){(a + d) / (a + b + c + d)}
s_dice <- function(a,b,c,d){(2 * a) / ((2 * a) + b + c)}
s_ochiai <- function(a,b,c,d){a / sqrt((a + b) * (a + c))}
s_rr <- function(a,b,c,d){a / (a + b + c + d)}

s_jaccard(a,b,c,d)
## [1] 0.4545455
s_smc(a,b,c,d)
## [1] 0.6
s_dice(a,b,c,d)
## [1] 0.625
s_ochiai(a,b,c,d)
## [1] 0.6299408
s_rr(a,b,c,d)
## [1] 0.3333333

Para definir medidas de similaridad para datos binarios, siempre nos basamos en una tabla de contingencia entre dos vectores. Definimos primero los cuatro componentes fundamentales y el total (\(n\)):\(a\): Coincidencias positivas (\(1, 1\))\(b\): Presencia-Ausencia (\(1, 0\))\(c\): Ausencia-Presencia (\(0, 1\))\(d\): Coincidencias negativas (\(0, 0\))\(n\): Total de elementos (\(n = a + b + c + d\))Para las fórmulas complejas de Lambda y D de Anderberg, utilizaremos dos variables auxiliares intermedias para simplificar el código LaTeX y evitar que se desborde de la pantalla:

\[t_1 = \max(a,b) + \max(c,d) + \max(a,c) + \max(b,d)\]\[t_2 = \max(a+c, b+d) + \max(a+b, c+d)\]

\[S_{Russell-Rao} = \frac{a}{a + b + c + d}\]

Coincidencia Simple (SMC)

A diferencia de Jaccard, el SMC otorga el mismo peso tanto a las presencias mutuas como a las ausencias mutuas (\(d\)), asumiendo que el cero tiene el mismo valor informativo que el uno.

\[S_{smc} = \frac{a+d}{a + b + c + d}\]

Coeficiente de Jaccard

Esta medida ignora por completo las coincidencias negativas (\(d\)). Es muy útil cuando el estado \(0\) representa la ausencia de una característica común que no aporta información de similitud real.

\[S_{Jaccard} = \frac{a}{a + b + c}\] \[S_{Rogers-Tanimoto} = \frac{a + d}{a + 2(b + c) + d}\] \[S_{Sokal-Sneath1} = \frac{a}{a + 2(b + c)}\] \[S_{Sokal-Sneath2} = \frac{2(a + d)}{2(a + d) + b + c}\] \[S_{Sokal-Sneath3} = \frac{a + d}{b + c}\] \[S_{Kulczynski1} = \frac{a}{b + c}\] \[S_{Sokal-Sneath4} = \frac{1}{2} \left( \frac{a}{a + b} + \frac{a}{a + c} \right)\] \[S_{Hamann} = \frac{(a + d) - (b + c)}{a + b + c + d}\] \[S_{Lambda} = \frac{t_1 - t_2}{2n - t_2}\] \[S_{Anderberg} = \frac{t_1 - t_2}{2n}\] \[S_{Yule-Y} = \frac{\sqrt{ad} - \sqrt{bc}}{\sqrt{ad} + \sqrt{bc}}\] \[S_{Yule-Q} = \frac{ad - bc}{ad + bc}\] \[S_{Ochiai} = \frac{a}{\sqrt{(a + b)(a + c)}}\] \[S_{Sokal-Sneath5} = \frac{ad}{\sqrt{(a + b)(a + c)(b + d)(c + d)}}\] \[S_{Phi} = \frac{ad - bc}{\sqrt{(a + b)(a + c)(b + d)(c + d)}}\] \[S_{Dispersion} = \frac{ad - bc}{(a + b + c + d)^2}\]