Como encontrar agrupamentos (trajetórias) entre dados longitudinais?

11

Contexto

Quero definir o cenário antes de expandir um pouco a questão.

Tenho dados longitudinais, medições feitas em indivíduos aproximadamente a cada 3 meses, o resultado primário é numérico (como em contínuo a 1dp) no intervalo de 5 a 14, com o volume (de todos os pontos de dados) entre 7 e 10. Se eu fizer uma gráfico de espaguete (com a idade no eixo x e uma linha para cada pessoa) é obviamente uma bagunça, já que tenho mais de 1.500 indivíduos, mas há um caminho claro em direção a valores mais altos com o aumento da idade (e isso é conhecido).

A questão mais ampla: O que gostaríamos de fazer é primeiro identificar grupos de tendências (aqueles que começam alto e permanecem altos, aqueles que começam baixos e permanecem baixos, aqueles que começam baixos e aumentam para altos etc.) e então podemos observe os fatores individuais associados à associação ao 'grupo de tendências'.

Minha pergunta aqui é especificamente referente à primeira parte, o agrupamento por tendência.

Questão

  • Como podemos agrupar trajetórias longitudinais individuais?
  • Que software seria adequado para implementar isso?

Examinei o Proc Traj no SAS e M-Plus sugerido por um colega, no qual estou analisando, mas gostaria de saber o que os outros pensam sobre isso.

nzcoops
fonte
1
É apenas um ponto de partida, mas talvez veja algumas das respostas para esta pergunta: stats.stackexchange.com/questions/2777/…
Jeromy Anglim
Obrigado Jeromy, a opção kml é interessante, eu gosto da ideia dada em R, mas não tenho certeza de que posso usar a estrutura deles com meus dados, dado que os sujeitos vêm em idades diferentes para suas visitas, em vez de 'visitar 1' '' visite 2' etc e alguns têm 10 visitas, enquanto outros têm 50 + ...
nzcoops
Verifique o kml pacote - que parece fornecer a funcionalidade necessária. O artigo no JoSS descreve em detalhes. Também kml3d& kmlShapepossam ser de interesse.
Radek

Respostas:

11

Eu usei o Mfuzz no R para agrupar conjuntos de dados de microarrays de curso temporal. O Mfuzz usa "soft-clustering". Basicamente, os indivíduos podem aparecer em mais de um grupo.

Como @Andy aponta no comentário, o documento original usa dados da CTN. No entanto, suspeito que funcione bem para seus dados discretos. Especialmente porque você está apenas explorando o conjunto de dados. Aqui está um exemplo rápido em R:

##It's a bioconductor package
library(Mfuzz)
library(Biobase)

## Simulate some data
## 6 time points and 90 individuals
tps = 6;cases = 90
d = rpois(tps*cases, 1)  ##Poisson distribution with mean 1
m = matrix(d, ncol=tps, nrow=cases)

##First 30 individuals have increasing trends
m[1:30,] = t(apply(m[1:30,], 1, cumsum))

##Next 30 have decreasing trends
##A bit hacky, sorry
m[31:60,] = t(apply(t(apply(m[31:60,], 1, cumsum)), 1, rev))

##Last 30 individuals have random numbers from a Po(1)

##Create an expressionSet object
tmp_expr = new('ExpressionSet', exprs=m)

##Specify c=3 clusters
cl = mfuzz(tmp_expr, c=3, m=1.25)
mfuzz.plot(tmp_expr,cl=cl, mfrow=c(2, 2))

Dá a seguinte plotagem:

Cluster Mfuzz

csgillespie
fonte
Obrigado pela referência, eu nunca tinha visto isso antes. Esse algoritmo de agrupamento seria apropriado com dados distribuídos de baixa contagem, como o OP havia mencionado (ou dados dicotômicos)? O documento de referência (Futschik & Carlisle 2005) utilizou dados que foram transformados para serem contínuos.
22711 Andy As
@ Andy: Bom ponto. Eu incluí uma simulação rápida. Tudo parece bom, mas pode haver uma solução mais ideal.
csgillespie
Obrigado @csgillespie, tentará tentar isso. A propósito, meus dados são contínuos, não discretos, não têm certeza se a pergunta não foi clara o suficiente ou se houve um erro de digitação na sua resposta? Tenho que reverter meu R para instalar o Mfuzz, vamos começar a diversão.
Nzcoops
@csgillespie - isso é muito legal. Estou brincando com isso agora em alguns dados reais. Você sabe se existe uma maneira de estimar o número de grupos?
Macro
4

Eu esperaria que haja um pacote MPLUS para fazer o que você precisa. Há um artigo na Psychometrika sobre quase exatamente esse assunto

springerlink.com/content/25r110007g417187

exceto que os dados são binários e as trajetórias são trajetórias de probabilidade. Os autores usam a análise de classe latente (implementada usando um modelo de mistura finita penalizada) para agrupar trajetórias. Também sei que o primeiro autor escreveu alguns outros artigos há cerca de 10 anos com Bengt Muthen (criador do MPLUS) sobre análise de classes latentes em ambientes semelhantes (com trajetórias). Por exemplo,

http://onlinelibrary.wiley.com/doi/10.1111/j.0006-341X.1999.00463.x/abstract

soa muito semelhante ao que você está falando, exceto que o resultado é binário. O caso contínuo é muito mais simples, portanto, eu faria uma pesquisa de literatura ao contrário (por exemplo, observe os artigos que esses artigos fazem referência) para encontrar algo que corresponda ao que você descreveu com mais precisão.

Para saber mais, você pode perguntar diretamente aos proprietários do MPLUS qual pacote você precisa usar para fazer o que você precisa. Eles geralmente são muito rápidos em responder e são muito úteis:

http://www.statmodel.com/cgi-bin/discus/discus.cgi

Macro
fonte