4 votos

TraMineR seqLLCS y seqdist la secuencia de referencia del problema

Al comparar la misma cadena de secuencias en el ejemplo de abajo, ¿por qué la primera llamada de retorno 0 en lugar de 7? LCS.ex1[3,] es "S-U-M-S-SC-UC-MC" y de la LCS.ex2[1,] es también "S-U-M-S-SC-UC-MC".

Hace uno siempre tiene que pasar en un tipo de secuencia con un único valor para esta función (y seqdist) para trabajar? ¿Cómo puedo citar sólo una fila de una secuencia de objetos sin que el resto de los objetos todavía se hace referencia? es decir, yo no quiero tener que crear un nuevo objeto de secuencia para cada cadena de valor de la LCS.ex2 para poder comparar cada uno de LCS.ex1.

LCS.ex1 <- c("S-U-S", "U-S-SC-MC", "S-U-M-S-SC-UC-MC")
LCS.ex2 <- c("S-U-M-S-SC-UC-MC", "1-2-3", "A-B-C-D-E-F-G-H-I-J-K")
LCS.ex3 <- c("S-U-M-S-SC-UC-MC")

LCS.ex1 <- seqdef(LCS.ex1)
LCS.ex2 <- seqdef(LCS.ex2)
LCS.ex3 <- seqdef(LCS.ex3)

seqLLCS(LCS.ex1[3,],LCS.ex2[1,])
R> 0
seqLLCS(LCS.ex1[3,],LCS.ex3[1,])
R> 7

2voto

serhio Puntos 101

Tienes razón; la primera debe ser el resultado de 7. Esto es debido al uso de dos diferentes secuencias del estado de los objetos, que no tienen la misma definición. La lista de los estados que pueden ser recuperados con el "alfabeto" de comandos.

alphabet(LCS.ex1)
alphabet(LCS.ex2)

La función seqLLCS debe comprobar que el alfabeto de seq1 y seq2 son iguales y genera un error si no es el caso.

Ahora, usted puede utilizar un único estado de la secuencia de objetos, con el siguiente código.

LCS.ex1 <- c("S-U-S", "U-S-SC-MC", "S-U-M-S-SC-UC-MC")
LCS.ex2 <- c("S-U-M-S-SC-UC-MC", "1-2-3", "A-B-C-D-E-F-G-H-I-J-K")
LCS.ex3 <- c("S-U-M-S-SC-UC-MC")

LCS.ex <- seqdef(c(LCS.ex1, LCS.ex2, LCS.ex3))

Ahora tendrá que adaptar su código para calcular distancias.

seqLLCS(LCS.ex[3,], LCS.ex[4,])
seqLLCS(LCS.ex[3,], LCS.ex[7,])

Si utiliza seqdist, entonces usted directamente pasar el objeto entero (no es necesario especificar cada dos por dos comparaciones). Tenga en cuenta que este calcula distancias en lugar de la longitud de la más larga prefijo común. seqdist(LCS.ex, method="CL")

Así que la respuesta es que se puede pasar sólo una fila, pero las filas tienen que venir desde el mismo estado objeto de secuencia.

2voto

Thomas Bartelmess Puntos 151

Los argumentos de la seqLLCS debería ser la función de las secuencias de estado de la secuencia de objetos con un mismo alfabeto. En su caso, el LCS.ex2 objeto tiene un tamaño mucho mayor del alfabeto, que se puede pasar en la definición de los otros dos objetos.

LCS.ex2 <- seqdef(LCS.ex2)
LCS.ex1 <- seqdef(LCS.ex1, alphabet=alphabet(LCS.ex2))
LCS.ex3 <- seqdef(LCS.ex3, alphabet=alphabet(LCS.ex2))

El siguiente comando genera entonces el resultado esperado

seqLLCS(LCS.ex1[3,],LCS.ex2[1,])

[1] 7

Espero que esto ayude.

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