13 votos

¿Cómo agrupar las variables longitudinales?

Tengo un montón de variables que contienen datos longitudinales desde el día 0 hasta el día 7. Estoy buscando un enfoque de agrupación apropiado que pueda agrupar estas variables longitudinales (no casos) en diferentes grupos. Intenté analizar este conjunto de datos por separado por tiempo, pero el resultado fue bastante difícil de explicar razonablemente.

He investigado la disponibilidad de un procedimiento SAS PROC SIMILARITY porque hay un ejemplo en su sitio web Sin embargo, creo que no es un camino correcto. Algunos estudios anteriores utilizaron el análisis factorial exploratorio en cada punto de tiempo, pero esto no es una opción en mi estudio también debido a los resultados poco razonables.

Esperemos que aquí se puedan aportar algunas ideas y se pueda disponer de un programa compilado, como SAS o R, para procesar. ¡¡Se agradece cualquier sugerencia!!


He aquí un breve ejemplo (perdón por la posición incoherente entre los datos y los nombres de las variables):

id time   V1  V2   V3   V4   V5   V6   V7   V8   V9   V10
2    0    8    7    3    7    6    6    0    0    5    2
2    1    3    5    2    6    5    5    1    1    4    2
2    2    2    3    2    4    4    2    0    0    2    2
2    3    6    4    2    5    3    2    1    2    3    3
2    4    5    3    4    4    3    3    4    3    3    3   
2    5    6    4    5    5    6    3    3    2    2    2
2    6    7    5    2    4    4    3    3    4    4    5
2    7    7    7    2    6    4    4    0    0    4    3
4    0   10    7    0    2    2    6    7    7    0    9
4    1    8    7    0    0    0    9    3    3    7    8
4    2    8    7    0    0    0    9    3    3    7    8
4    3    8    7    0    0    0    9    3    3    7    8
4    4    5    7    0    0    0    9    3    3    7    8
4    5    5    7    0    0    0    9    3    3    7    8
4    6    5    7    0    0    0    9    3    3    7    8
4    7    5    7    0    0    0    9    3    3    7    8
5    0    9    6    1    3    2    2    2    3    3    5
5    1    7    3    1    3    1    3    2    2    1    3
5    2    6    4    0    4    2    4    2    1    2    4
5    3    6    3    2    3    2    3    3    1    3    4
5    4    8    6    0    5    3    3    2    2    3    4
5    5    9    6    0    4    3    3    2    3    2    5
5    6    8    6    0    4    3    3    2    3    2    5
5    7    8    6    0    4    3    3    2    3    2    5

0 votos

¿Podría explicar los datos un poco más o tal vez proporcionar una muestra abreviada? Cuando dices que las "variables contienen datos longitudinales", ¿quieres decir que todas son mediciones repetidas sobre la misma persona o cosa durante 7 días (y por lo tanto es probable que estén correlacionadas).

0 votos

A rosser: He adjuntado una parte de los datos. Como has mencionado, son mediciones repetidas: cada paciente (ID) tiene 10 mediciones (V1~V10) de varios días (día0~día7).

6voto

Uri Puntos 111

Por lo tanto, usted tiene p variables medidas cada t veces en el mismo n individuos. Una forma de proceder es calcular t pXp matrices de (des)similitud y aplicar el modelo INDSCAL de escalado multidimensional. Esto le dará dos mapas de baja dimensión (digamos, de 2 dimensiones). El primer mapa muestra la coordenadas de p variables en el espacio de las dimensiones y refleja las agrupaciones entre ellas, si las hay. El segundo mapa muestra pesos (es decir, la importancia o saliencia) de las dimensiones en cada matriz de t .

enter image description here

0 votos

También tengo la idea de convertir n-dimensiones a 2-dimensiones, pero no tengo ninguna idea de un método específico que puede lograr esto. Ahora he encontrado que SAS puede tener un procedimiento que puede implementarlo. Lo aprenderé para ver su disponibilidad al usar mis datos.

0 votos

¿Cuál es la mejor manera de interpretar los pesos?

0 votos

El peso muestra hasta qué punto una dimensión es relevante, o discriminativa, para esta fuente concreta (las fuentes son individuos o, como en este ejemplo, tiempos). En la imagen del tiempo1, por ejemplo, la dimensión II es fuerte o relevante y la dimensión I es débil.

6voto

ℳ  . Puntos 133

No estoy seguro de que sea lo que buscas, pero el paquete kml en R utiliza k-means para agrupar secuencias de medidas repetidas. Aquí hay un enlace al paquete página y al papel (por desgracia, está cerrado). Sólo funciona bien si tienes un conjunto de datos bastante pequeño (unos cientos de secuencias).

aquí hay una versión no cerrada del documento (sin problemas de referencia): http://christophe.genolini.free.fr/recherche/aTelecharger/genolini2011.pdf

0 votos

De hecho, he revisado este método antes de publicar esta pregunta. Supuse que el método kml es una forma de agrupar individuos a partir de algunos ejemplos de su documento original. Voy a echar un vistazo a él de nuevo. ¡¡¡Gracias!!!

0 votos

@ccchien sí, lo utilizan para agrupar trayectorias individuales, pero podrías suponer que tienes diez trayectorias por individuo (una por cada una de tus variables). Probablemente tendrías que normalizar tus variables para que el procedimiento kml funcione correctamente. El problema es que, hasta donde yo sé, no hay forma de decirle a kml que tus trayectorias están anidadas en individuos. Así que podría acabar no ajustándose exactamente a lo que intentas conseguir.

0 votos

@greg121, gracias por el enlace a la versión de libre acceso del artículo. Parece que las referencias en el texto se han eliminado, tal vez el archivo Latex debe ser recompilado una vez más (la lista de referencias está allí sin embargo).

5voto

dan90266 Puntos 609

En la R Hmisc consulte el archivo de ayuda del paquete curveRep que significa "curvas representativas". curveRep grupos en las formas de las curvas, las ubicaciones y los patrones de los puntos de tiempo perdidos.

0 votos

Gracias por tus consejos. Parece que se puede hacer. Voy a leer su manual de inmediato.

0 votos

Frank. El ejemplo del manual no parece funcionar. ¿Hay algún error tipográfico? Quería ejecutar el ejemplo para tener una idea. Aquí está el código:set.seed(1) N <- 200 nc <- sample(1:10, N, TRUE) id <- rep(1:N, nc) x <- y <- id for(i in 1:N) { x[id==i] <- if(i y[id==i] <- i + 10*(x[id==i] - .5) + runif(nc[i], -10, 10) }

1 votos

Ups. Olvidé que el signo de porcentaje en un archivo de ayuda de R debe ser escapado. Esto provocó que una línea del ejemplo quedara truncada. Reemplace la línea incompleta con: x[id==i] <- if(i %% 2) runif(nc[i]) else runif(nc[i], c(.25, .75))

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X