Clústers de trayectorias con la distancia de Fréchet
Los viejos del lugar recordarán esto, donde agrupo trayectorias usando k-medias a pelo.
El paquete kmlShape
usa la distancia de Fréchet para hacer algo parecido: buscar trayectorias geométricamente similares.
El código es
library(kmlShape)
library(tseries)
library(zoo)
library(XML)
library(reshape)
library(ggplot2)
foo <- function(
simbolo, final = Sys.time(),
profundidad = 30 * 24 * 3600) {
precios <- get.hist.quote(
instrument= simbolo,
start = final - profundidad,
end = final, quote=c("AdjClose"),
provider="yahoo", origin="1970-01-01",
compression="d", retclass="zoo")
colnames(precios) <- simbolo
return(precios)
}
# lista de símbolos del ibex
tmp <- readHTMLTable("http://finance.yahoo.com/q/cp?s=%5EIBEX+Components")[[5]]
tmp <- as.character(tmp$V1[-(1:6)])
ibex <- do.call(merge,
sapply(simbolos, foo, simplify = F))
ibex.scaled <- data.frame(t(scale(ibex)))
tmp <- cldsWide(ibex.scaled)
res <- kmlShape(tmp, 4, toPlot = "none")
tmp <- data.frame(
id = rownames(ibex.scaled),
cluster = res@clusters, ibex.scaled)
tmp <- melt(tmp, id.vars = c("id", "cluster"))
tmp$fecha <- as.Date(tmp$variable, "X%Y.%m.%d")
ggplot(tmp, aes(x=fecha, y=value, group=id)) +
geom_line() + facet_wrap(~cluster)
y el resultado,