Comment prédire les probabilités ou les états des nouvelles données avec le package DepmixS4, pour les modèles de Markov cachés

8

Il semble que je puisse très bien apprendre les paramètres et trouver les probabilités postérieures pour les données d'entraînement, mais je n'ai aucune idée de comment faire de nouvelles prédictions sur de nouvelles données. Le problème vient en particulier des probabilités de transition changeant sur les covariables, il n'est donc pas trivial d'écrire du code pour prédire de nouvelles données.

L'approche standard consiste à définir le mélange (dépendant) et à ajuster le modèle:

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))

Ce que nous avons ci-dessus devrait fonctionner de manière similaire à un HMM binaire car il essaie de classer si un événement s'est produit en tant que variable dépendante 1/0 se déplaçant dans la séquence. La covariable de transition est une variable de comptage de fréquence qui devrait affecter directement les probabilités de transition des états qui devraient ensuite contrôler les probabilités d'émission de la variable dépendante 1/0.

Il est possible d'obtenir les paramètres du modèle et de définir les paramètres sur un autre nouveau modèle. Cependant, il n'y a pas de méthode claire de prédiction, même s'il devrait y avoir quelque part dans les tripes de la bibliothèque.

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

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

Remarque, dans la documentation, il est possible d'exécuter l'algorithme viterbi pour générer des états pour les nouvelles données. Cependant, cela ne m'est pas particulièrement utile et cela semble correspondre parfaitement aux données, ce qui suggère qu'il apprend toujours à s'adapter aux nouvelles données.

probs2 <- viterbi(modNew)

Remarque, je suis nouveau sur ce sujet. Cette étape de la mise en œuvre est difficile pour moi, mais elle semble en quelque sorte comme une partie fondamentale d'une analyse.

iuppiter
la source
Après setpars, appliquez viterbi (modNew) Il générera une table avec les probabilités d'état
Andrey Boarão

Réponses:

0

Montez le nouveau modèle puis appelez 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
Alejandro Andrade
la source
3
Je ne comprends pas pourquoi nous devrions remonter le modèle car les paramètres ont été "appris" la première fois, je me trompe?
Patrick
0

Avez-vous résolu cela? Sinon, vous pourriez peut-être essayer:

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

Ce one-liner obtient la probabilité de nouvelles données en exécutant l'algorithme avancé sur votre modèle d'origine. Veuillez me faire savoir si vous êtes parvenu à une meilleure solution, car je m'attaque moi-même à ce problème.

Michael
la source