2016-04-23 11 views
1

Ich habe versucht, das R markovchain-Paket zu verwenden.R Markovchain-Paket - Anpassen der Markov-Kette basierend auf der Statussequenzmatrix

Ich habe eine Frage bezüglich der Funktion markovchainFit und der Sequenzmatrix.

Standardmäßig wird die markovchainFit-Funktion mit der Sequenz von Zuständen als Parameter ausgeführt. Dann heißt es in der Dokumentation, dass diese Funktion diese Sequenz in die Sequenzmatrix ändert, die mit der Funktion createSequenceMatrix abgerufen werden kann.

Meine Frage ist - Kann die MarkovchainFit irgendwie mit der Sequenzmatrix als Parameter (oder zumindest mit dem Vektor von mehreren Datensequenzen) laufen?

Ich frage, weil ich in meinem Modell mehrere absorbierende Zustände habe. Das bedeutet, dass eine Beispielsequenz kurz sein kann, da sie mit dem absorbierenden Zustand endet. Ich habe mehrere Sequenzen in meinem Dataset und ich bin in der Lage, eine Sequenzmatrix basierend auf ihnen zu erstellen. Nichtsdestotrotz habe ich keine lange Sequenz, die als Parameter für das markovchainFit verwendet werden kann (da jede Sequenz nach einigen Zuständen absorbiert wird).


Terminologie in meiner Frage ist auf der folgende Dokumentation basiert: CRAN Einführung in markovchain Paket

Im Wetter Beispiel in diesem Artikel ein einfaches Szenario eingeführt wird. Es gibt 3 Zustände (sonnig, bewölkt, regen) und die Übergangsmatrix ist, wie in Eingabe gegeben:

 sunny cloudy rain 
sunny 0.7 0.20 0.10 
cloudy 0.3 0.40 0.30 
rain 0.2 0.45 0.35 

auf, die basierend Matrix eine Markow-Kette Objekt aufgebaut ist:

R> weatherMatrix <- matrix(data = c(0.70, 0.2, 0.1, 
+         0.3, 0.4, 0.3, 
+         0.2, 0.45, 0.35), byrow = byRow, nrow = 3, 
+ dimnames = list(weatherStates, weatherStates)) 
R> mcWeather <- new("markovchain", states = weatherStates, byrow = byRow, 
+ transitionMatrix = weatherMatrix, name = "Weather") 

dann eine Folge die Daten wird von der Markow-Kette erzeugt wird -, um zu demonstrieren, wie das Modell zurück zu passen aus diesem Beispiel:

R> weathersOfDays <- rmarkovchain(n = 365, object = mcWeather, t0 = "sunny") 

Dann wird eine neue Markov-Kette basierend auf den Daten ausgerüstet ist:

R> weatherFittedLAPLACE <- markovchainFit(data = weathersOfDays, 
+         method = "laplace", laplacian = 0.01, 
+         name = "Weather LAPLACE") 
R> weatherFittedLAPLACE$estimate 

Die geschätzten Ergebnisse sind unten, um zu zeigen, wie die Daten in der Nähe der ursprünglichen Übergangsmatrix gegeben:

 cloudy rain  sunny 
cloudy 0.3944786 0.32110428 0.2844171 
rain 0.4050361 0.37972922 0.2152347 
sunny 0.1932057 0.07958871 0.7272056 

Es wird gesagt, dass der Beschlag auf der ‚Sequenz-Matrix‘ basiert, die

R> createSequenceMatrix(stringchar = weathersOfDays) 

     cloudy rain sunny 
cloudy 43  35 31 
rain 32  30 17 
sunny 34  14 128 

Mein Problem ist, dass ich die Daten in Form von mehreren Sequenzen, da es viele absorbierende Zustände und die Ketten sind relativ kurz sind, haben: kann wie folgt abgerufen werden.

Ich möchte sie füttern und haben das Modell angepasst, aber das Paket ermöglicht eine einzige Sequenz der Daten zugeführt werden. Alternativ kann ich die Sequenzmatrix wie oben gezeigt konstruieren und sie dem Modell zuführen, aber ich sehe keine Funktion im Paket, die damit umgehen könnte.

Lange Rede, kurzer Sinn - Ich habe mehrere kurze Datensequenzen, auf denen ich ein Markov-Kettenmodell aufbauen möchte.

+0

Dies wäre einfacher, Vorschläge anzubieten, wenn Sie Ihre Frage so bearbeitet haben, dass sie ein bestimmtes Beispiel einer "Sequenzmatrix" enthält. Ich hätte von meinem Hintergrund erwartet, stattdessen erfahren zu haben, dass Sie Realisierungen basierend auf einer "Übergangsmatrix" wollten, aber vielleicht arbeiten wir mit einer anderen Terminologie. –

Antwort

0

Es gibt ein Beispiel, das Ihre Anfrage zumindest teilweise beantwortet. Die Holson ‚data.frame‘ ist tatsächlich eine Matrix, wo Zeilen und Spalten Lebens Trajektorien Zeitsequenzen und durch

singleMc<-markovchainFit(data=holson[,2:12],name="holson") 

eine Übergangsmatrix ausgeführt ist fit. Dies erfordert, dass die Sequenzlänge gerade ist. In Ihrem Beispiel könnte es sein, dass Sie eine ungleiche Länge haben könnten, wenn Sie die Aufnahme stoppen, wenn ein absorbierender Zustand erreicht ist. Sie müssen also den letzten Status für diese Zeile wiederholen, bis die maximale Länge des Lebensverlaufs erreicht ist.