2016-07-17 16 views
-2

Haben Sie keine Angst vor meinem langen Code. Was ich mich wundere, ist über den letzten Teil, die Handlung (Schritt Spaß ... Teil. Wenn ich dies in Rstudio eingeben, bekomme ich "stepfun" x "muss zunehmend bestellt werden"Stepfun Funktion markov

Gibt es any1 hier wer weiß was ich tun müssen, um diese korrekt zu beenden?

bd_process <- function(lambda, mu, initial_state = 0, steps = 100) { 
    time_now <- 0 
    state_now <- initial_state 

    time <- 0 
    state <- initial_state 
    for (i in 1:steps) { 

if (state_now == 3) { 
    lambda_now <- 0 
} else { 
    lambda_now <- lambda 
} 

if (state_now == 0) { 
    mu_now <- 0 
} else { 
    mu_now <- mu 
} 

time_to_transition <- rexp(mu, rate = 1) + rexp(lambda, rate = 1) 

X <- rexp(mu, rate = 1) 
Y <- rexp(lambda, rate = 1) 

if (X < Y) { 
    state_now <- state_now - 1 
} else { 
    state_now <- state_now + 1 
} 
time_now <- time_now + time_to_transition 
time <- c(time, time_now) 
state <- c(state, state_now) 
} 

list(time = time, state = state) } 

set.seed(19930628) 

proposal1 <- bd_process(lambda = 2, mu = 10) 
proposal2 <- bd_process(lambda = 6, mu = 10) 
proposal3 <- bd_process(lambda = 10, mu = 10) 


time1 <- proposal1$time 
state1 <- proposal1$state 

plot(stepfun(time1[-1], state1), 
do.points = FALSE, 
xlab = "Tid", 
ylab = "Tillstånd", 
main = "", 
yaxt = "n") 
axis(2, at = c(0, 1, 2, 3), las = 2) 
+0

Nun, die Fehlermeldung klingt wie die 'stepfun' -Funktion erwartet Ihre Daten sortiert werden. Hast du das probiert? Vielleicht lies die Hilfeseite zu '? Stpfun'. Es ist ein bisschen schwierig zu helfen, wenn Sie nicht beschreiben, was das gewünschte Ergebnis überhaupt ist. Keine Ahnung, was "richtig" für dich bedeutet. – MrFlick

+0

Die Frage ist wirklich lang und wurde beim letzten Mal abgelehnt, als ich versuchte es zu erklären. – PeterNiklas

+0

Ich möchte nur wissen, was ich ändern muss, damit ich stricken kann. Zum Beispiel habe ich time1 [-1], state1 und time1 [100], state1 [100] und so weiter probiert. – PeterNiklas

Antwort

0

ich weiß nicht, was Ihr Code tut, aber Sie haben uns gebeten nicht darüber Sorgen zu machen. im Moment scheint es, dass Sie nur „Zeitintervalle konstruiert "aber jetzt müssen sie" stapeln sie zusammen "oder" integrieren "sie entlang einer richtigen Zeitachse. Um eine Simulation einer Schrittfunktion zu plotten, sollten Sie cumsum verwenden, um einen steigenden time1 Vektor zu konstruieren. Weil die" Zeit "und" Staat "variabl es sind so unterschiedliche Längen eine schnelle Lösung, um die Funktionsargumente ist Trimmen der time1 Vektor, so dass es die richtige Länge für die state1 Variable ist, und Sie erhalten keine Fehler mit:

plot(stepfun(cumsum(time1[2:101]), state1), 
do.points = FALSE, 
xlab = "Tid", 
ylab = "Tillstånd", 
main = "", 
yaxt = "n") 
axis(2, at = c(0, 1, 2, 3), las = 2) 

Vielleicht, wenn Sie „Marsch Schritt- Schritt-für Schritt "durch den Code und erklären Sie den Code (für Sie und den Rest von uns) mit Hilfe von Kommentaren werden Sie herausfinden, warum Sie 10 mal so viele time1 haben, wie Sie state1 haben. Ich vermute, dass es etwas mit der Verwendung von "mu" als erstes Argument zu rexp(mu, rate = 1) zu tun hat. Das erste Argument für Zufallszahlengeneratoren in R ist normalerweise eine positive Ganzzahl, die die Länge (die Anzahl der Zufallszahlen) aus der Verteilung bestimmt.

+0

Ich weiß, dass dies mit begrenzten Informationen schwer zu beantworten ist, aber ist es möglich, das time1 vektorn zu definieren mit aufsteigender Reihenfolge? – PeterNiklas

+0

Wenn die "Zeiten" nicht aufeinanderfolgend sind und es zu keiner späteren "Zeit" eine Zensierung oder Dominanz von Zwischenzeiten gibt, dann gibt es sowohl eine "Sortier" - als auch eine "Ordnungs" -Funktion. Im Allgemeinen wird die "Ordnung" -Funktion bevorzugt, da es bei Simulationen wahrscheinlicher ist, dass mehrere Vektoren die gleiche Umordnungsoperation haben müssen. Wenn Sie nur einen Vektor und nicht die anderen "sortieren", ist jede zeitliche Assoziation verloren. –