Várias instruções para a análise de dados longitudinais foram discutidas no link fornecido pelo @Jeromy, por isso sugiro que você os leia com atenção, especialmente aqueles em análise de dados funcionais. Tente pesquisar no "Clustering funcional de dados longitudinais" ou na caixa de ferramentas PACE Matlab, que se preocupa especificamente com o agrupamento baseado em modelo de trajetórias de amostragem irregular (Peng e Müller, agrupamento baseado em distância de processos estocásticos escassamente observados, com aplicativos para leilões on-line , Annals of Applied Statistics 2008 2: 1056). Posso imaginar que possa haver uma boa estrutura estatística para séries temporais financeiras, mas não sei disso.
O kml
pacote basicamente se baseia em k-means, trabalhando (por padrão) em distâncias euclidianas entre as medidas observadas em indivíduos. O que é chamado de trajetória é apenas a série de valores observados para indivíduo , , etniyi=(yi1,yi2,…,yit)d(yi,yj)=t−1∑tk=1(yik−yjk)2−−−−−−−−−−−−−−−−√. Os dados ausentes são tratados através de uma ligeira modificação da medida de distância anterior (ajuste de Gower) associada a um esquema de imputação semelhante ao vizinho mais próximo (para calcular o critério de Calinski). Como não me represento como seriam seus dados reais, não sei dizer se eles funcionarão. Pelo menos, ele trabalha com curvas de crescimento longitudinais, forma "polinomial", mas duvido que permita detectar padrões muito específicos (como mínimos / máximos locais em momentos específicos com momentos diferentes entre os clusters, por uma tradução para exemplo). Se você estiver interessado em agrupar curvas possivelmente desalinhadas, precisará definitivamente procurar outras soluções; O agrupamento e alinhamento funcionais , de Sangalli et al., E suas referências, podem fornecer um bom ponto de partida.
Abaixo, mostro alguns códigos que podem ajudar a fazer experiências com ele (minha semente geralmente é definida em 101, se você deseja reproduzir os resultados). Basicamente, para usar, kml
basta construir um clusterizLongData
objeto (um id
número para a primeira coluna e as medidas nas próximas colunas).t
library(lattice)
xyplot(var0 ~ date, data=test.data, groups=store, type=c("l","g"))
tw <- reshape(test.data, timevar="date", idvar="store", direction="wide")
parallel(tw[,-1], horizontal.axis=F,
scales=list(x=list(rot=45,
at=seq(1,ncol(tw)-1,by=2),
labels=substr(names(tw[,-1])[seq(1,ncol(tw)-1,by=2)],6,100),
cex=.5)))
library(kml)
names(tw) <- c("id", paste("t", 1:(ncol(tw)-1)))
tw.cld <- as.cld(tw)
cld.res <- kml(tw.cld,nbRedrawing=5)
plot(tw.cld)
As próximas duas figuras são os dados simulados brutos e a solução de cinco clusters (de acordo com o critério Calinski, também usado no pacote fpc ). Eu não mostro a versão em escala .