Cargando libreria y datos a utilizar:
library(ggplot2)
observacion_a <- c(4, 4.5, 4, 7.5, 7, 6, 5, 5.5, 5, 6)
observacion_b <- c(4, 4.5, 4, 7.5, 7, 6, 5, 5.5, 5, 6) + 4
df <- data.frame(observacion = rep(c("a", "b"), each = 10),
valor = c(observacion_a, observacion_b),
predictor = 1:10)
df
Cargamos el grafico para observar la distancia euclidea, recordando , esta definida por : \[d_{euc}(p,q) = \sqrt{\sum_{i=1}^{n}(P_i - q_i)^{2}}\]
El siguiente grafico muestra el perfil de dos observaciones definidas por 10 variables:
ggplot(data = df, aes(x = as.factor(predictor), y = valor,
colour = observacion)) +
geom_path(aes(group = observacion)) +
geom_point() +
geom_line(aes(group = predictor), colour = "grey50", linetype = "dotted") +
labs(x = "predictor") +
theme_bw() +
theme(legend.position = "none")
La distancia de Manhattan, también conocida como taxicab metric, rectilinear distance o L1 distance, define la distancia entre dos puntos p y q como el sumatorio de las diferencias absolutas entre cada dimensión. Recordando que la distancia de manhattan esta definida por :
\[d_{man}(p,q) = \sum_{i=1}^{n} |(p_i - q_i)|\]
df <- data.frame(observacion = c("a", "b"), x = c(2,7), y = c(2,7))
manhattan <- data.frame(
x = rep(2:6, each = 2),
y = rep(2:6, each = 2) + rep(c(0,1), 5),
xend = rep(2:6, each = 2) + rep(c(0,1), 5),
yend = rep(3:7, each = 2))
manhattan_2 <- data.frame(
x = c(2, 5, 5, 7),
y = c(2, 2, 4, 4),
xend = c(5, 5, 7, 7),
yend = c(2, 4, 4, 7))
Comparamos la distancia de manhattan con la euclidana mediante:
ggplot(data = df, aes(x = x, y = y)) +
geom_segment(aes(x = 2, y = 2, xend = 7, yend = 7), color = "cyan3", size = 1.2)+
geom_segment(data = manhattan, aes(x = x, y = y, xend = xend, yend = yend),
color = "red2", size = 1.2) +
geom_segment(data = manhattan_2, aes(x = x, y = y, xend = xend, yend = yend),
color = "green", size = 1.2) +
geom_point(size = 3) +
theme(panel.grid.minor = element_blank(),
panel.grid.major = element_line(size = 2),
panel.background = element_rect(fill = "grey50",
colour = "white",
size = 0.2, linetype = "solid"))
La correlación es una medida de distancia muy útil para hallar similitudes en terminos de patron o forma:
\[d_{cor}(p,q) = 1 - corr(p,q) \] En la siguiente imagen se muestra el perfil de 3 observaciones:
library(ggplot2)
observacion_c <- c(5, 5.5, 4.8, 5.4, 4.7, 5.6, 5.3, 5.5, 5.2, 4.8)
datos <- data.frame(observacion = rep(c("a", "b", "c"), each = 10),
valor = c(observacion_a, observacion_b, observacion_c),
predictor = 1:10)
ggplot(data = datos, aes(x = as.factor(predictor), y = valor,
colour = observacion)) +
geom_path(aes(group = observacion)) +
geom_point() +
labs(x = "predictor") +
theme_bw() +
theme(legend.position = "bottom")
Calculando correlacion entre observaciones
table_1 = dist(x = rbind(observacion_a, observacion_b, observacion_c), method = "euclidean")
table_1
## observacion_a observacion_b
## observacion_b 12.64911
## observacion_c 3.75100 13.98821
1 - cor(x = cbind(observacion_a, observacion_b, observacion_c), method = "pearson")
## observacion_a observacion_b observacion_c
## observacion_a 0.0000000 0.0000000 0.9466303
## observacion_b 0.0000000 0.0000000 0.9466303
## observacion_c 0.9466303 0.9466303 0.0000000