Vorhersagen von Zustandswahrscheinlichkeiten oder Zuständen für neue Daten mit dem DepmixS4-Paket für Hidden Markov-Modelle


8

Es scheint, als könnte ich die Parameter gut lernen und die hinteren Wahrscheinlichkeiten für die Trainingsdaten finden, aber ich habe keine Ahnung, wie ich neue Vorhersagen für neue Daten treffen kann. Das Problem liegt insbesondere in den Übergangswahrscheinlichkeiten, die sich bei Kovariaten ändern. Daher ist es nicht trivial, Code zu schreiben, um neue Daten vorherzusagen.

Der Standardansatz besteht darin, die (abhängige) Mischung zu definieren und das Modell anzupassen:

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

Was wir oben haben, sollte ähnlich wie ein binäres HMM funktionieren, da es versucht zu klassifizieren, ob ein Ereignis als eine 1/0 abhängige Variable aufgetreten ist, die sich durch die Sequenz bewegt. Die Übergangskovariate ist eine Frequenzzählvariable, die die Übergangswahrscheinlichkeiten der Zustände direkt beeinflussen sollte, die danach die Emissionswahrscheinlichkeiten der 1/0 abhängigen Variablen steuern sollten.

Es ist möglich, die Parameter des Modells abzurufen und die Parameter auf ein anderes neues Modell festzulegen. Es gibt jedoch keine klare Vorhersagemethode, obwohl es irgendwo in den Eingeweiden der Bibliothek sein sollte.

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

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

Beachten Sie, dass in der Dokumentation angegeben ist, dass der viterbi-Algorithmus ausgeführt werden kann, um Zustände für neue Daten zu generieren. Dies ist jedoch für mich nicht besonders nützlich und scheint perfekt zu den Daten zu passen, was darauf hindeutet, dass es immer noch lernt, zu den neuen Daten zu passen.

probs2 <- viterbi(modNew)

Beachten Sie, dass ich neu in diesem Thema bin. Diese Phase der Implementierung ist für mich schwierig, scheint aber irgendwie ein grundlegender Teil einer Analyse zu sein.


Wenden Sie nach setpars viterbi (modNew) an. Es wird eine Tabelle mit den Zustandswahrscheinlichkeiten erstellt
Andrey Boarão

Antworten:


0

Passen Sie das neue Modell an und rufen Sie an 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
Ich verstehe nicht, warum wir das Modell umrüsten sollten, da die Parameter beim ersten Mal "gelernt" wurden. Liege ich falsch?
Patrick

0

Hast du das gelöst? Wenn nicht, könnten Sie vielleicht versuchen:

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

Dieser Einzeiler ermittelt die Wahrscheinlichkeit neuer Daten, indem er den Vorwärtsalgorithmus für Ihr ursprüngliches Modell ausführt. Bitte lassen Sie mich wissen, ob Sie zu einer besseren Lösung gekommen sind, da ich dieses Problem selbst anpacke.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.