Cómo predecir las probabilidades de estado o estados para nuevos datos con el paquete DepmixS4, para modelos ocultos de Markov


8

Parece que puedo aprender los parámetros perfectamente y encontrar las probabilidades posteriores para los datos de entrenamiento, pero no tengo idea de cómo hacer nuevas predicciones sobre los nuevos datos. El problema en particular proviene de las probabilidades de transición que cambian en las covariables, por lo que no es trivial escribir código para predecir nuevos datos.

El enfoque estándar es definir la mezcla (dependiente) y ajustar el modelo:

mod <- depmix(EventTime ~ 1, data = data[1:40320,], nstates = 2, family
=multinomial("identity"), transition = ~ Count, instart = runif(2))

fm <- fit(mod, emcontrol=em.control(classification="soft", maxit = 60))

Lo que tenemos arriba debería funcionar de manera similar a un HMM binario, ya que está tratando de clasificar si un evento ocurrió como una variable dependiente 1/0 que se mueve a través de la secuencia. La covariable de transición es una variable de recuento de frecuencia que debería afectar directamente las probabilidades de transición de los estados que posteriormente deberían controlar las probabilidades de emisión de la variable dependiente 1/0.

Es posible obtener los parámetros del modelo y establecer los parámetros en otro modelo nuevo. Sin embargo, no existe un método claro de predicción, aunque debería haber algún lugar en las entrañas de la biblioteca.

modNew <- depmix(EventTime~1,data=data2,transition=~Count,nstates=2,
family=multinomial("identity"))

modNew <- setpars(modNew,getpars(fm))

Tenga en cuenta que en la documentación dice que es posible ejecutar el algoritmo viterbi para generar estados para nuevos datos. Sin embargo, esto no es particularmente útil para mí y parece encajar perfectamente con los datos, lo que sugiere que todavía aprende a encajar con los nuevos datos.

probs2 <- viterbi(modNew)

Tenga en cuenta que soy nuevo en este tema. Esta etapa de implementación es difícil para mí, pero de alguna manera parece una parte básica de un análisis.


Después de setpars, aplique viterbi (modNew) Generará una tabla con las probabilidades del estado
Andrey Boarão

Respuestas:


0

Ajuste el nuevo modelo y luego llame posterior().

modNew <- depmix(EventTime~1,data=data2,transition=~Count,nstates=2,
family=multinomial("identity"))

modNew <- setpars(modNew,getpars(fm))

modNew <- fit(modNew)

predStates <- posterior(modNew)

predStates$state

3
No entiendo por qué deberíamos reajustar el modelo ya que los parámetros se "aprendieron" la primera vez, ¿me equivoco?
Patrick

0

¿Has resuelto esto? Si no, tal vez podrías probar:

sum(forwardbackward(setpars(depmix(list(var~1), data=newData, nstates=3,family=list(gaussian())), getpars(originalModel)))[["alpha"]][nrow(data),])

Esta línea única obtiene la probabilidad de nuevos datos al ejecutar el algoritmo de avance en su modelo original. Avíseme si llegó a una solución mejor, ya que estoy abordando este problema yo mismo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.