2017-10-13 7 views
1

Ich versuche, ein Diagramm in R zu erstellen, das die Wahrscheinlichkeit aufzeichnet, den ersten Zustand vor dem Endzustand in einer Markov-Kette für verschiedene Werte von k zu treffen. Aber beim Plotten, wenn ich nur den Endwert von k erhalten und nicht für all k für 1 bis 17Markov-Kettenwahrscheinlichkeit mit Simulationen Abfrage

Das ist die Frage:

Für p = 0,5 und q = 0,1, produziert Code, um die Wahrscheinlichkeit zu schätzen des Schlagens des Zustandes 1 vor dem Endzustand, für k = 1, ..., 15. Erstelle eine Handlung der Schätzungen gegen k. wo k = Dimension des Übergangs

Kann jemand meinen Fehler erkennen?

for(k in 1:17) 
{ p <- 0.5 
    q <- 0.1 
    P <- matrix (0, nrow = k, ncol = k, byrow = TRUE) 
for (i in 1:k) 
{ for (j in 1:k) 
    { if (i == 1 && i == j) 
     { P[i,j] <- 1 
     } 
     else if (i == k && i == j) 
     { P[i,j] <- 1 
     } 
     else if (i == j) 
     { P[i,j] <- p*(1-q) 
     } 
     else if (j == k && i != 1) 
     { P[i,j] <- q 
     } 
     else if (i == j+1 && i != k) 
     { P[i,j] <- (1-p)*(1-q) 
     } 
    } 
} 
P 

trials <- 1000 
hits <- 0 #counter for no. of hits 
for (i in 1:trials) 
{ i <- 1 #no. of steps 
    while(X[i] > 1 && X[i] < k) 
    { Y <- runif(1) #uniform samples 
     p1 <- P[X[i],] #calculating the p-value 
     p1 <- cumsum(p1) 
     # changes in the chain 
     if(Y <= p1[1]) 
      { X[i+1] = 1} 
     else if(Y <= p1[2]) 
      { X[i+1] = 2} 
     else if(Y <= p1[3]) 
      { X[i+1] = 3} 
     else if(Y <= p1[4]) 
      { X[i+1] = 4} 
     else if(Y <= p1[5]) 
      { X[i+1] = 5} 
     else if(Y <= p1[6]) 
      { X[i+1] = 6} 
     else if(Y <= p1[7]) 
      { X[i+1] = 7} 
     else if(Y <= p1[8]) 
      { X[i+1] = 8} 
     else if(Y <= p1[9]) 
      { X[i+1] = 9} 
     else if(Y <= p1[10]) 
      { X[i+1] = 10} 
     else if(Y <= p1[11]) 
      { X[i+1] = 11} 
     else if(Y <= p1[12]) 
      { X[i+1] = 12} 
     else if(Y <= p1[13]) 
      { X[i+1] = 13} 
     else if(Y <= p1[14]) 
      { X[i+1] = 14} 
     else if(Y <= p1[15]) 
      { X[i+1] = 15} 
     else if(Y <= p1[16]) 
      { X[i+1] = 16} 
     else if(Y <= p1[17]) 
      { X[i+1] = 17} 
     i <- i+1 
    } 
    if(X[i]==1) 
    { hits <- hits+1} 
    else 
    { hits <- hits+0} 
} 
Probability <- hits/trials 

}

+0

ist ein echter Sprachcode. es ist ein R-Code. Entschuldigung, für vergessen, es zu sagen –

Antwort

0

Ich denke, Ihre primäre Fehler die Aussage sein kann

i <- 1 #no. of steps 

, in dem Sie den Wert von i auf 1 gesetzt, auch wenn Sie es in einer Schleife über 1 gesagt: Versuche in der vorhergehenden Zeile.

Außerdem ist dieser Code unvollständig, da Sie X [i] verwenden, bevor Sie X auf irgendetwas setzen, was einen Fehler verursacht.

Gibt es außerdem einen Fehler in der P-Matrix? Ich glaube nicht, dass deine letzte Zeile zu 1 addiert wird - du musst einen separaten "else if" -Fall für i == k und j == k-1 machen.

Verwandte Themen