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,

ibex_kmlshape.R