2017-05-08 78 views
-1

我試圖修改此代碼,以模擬1000個人超過100天。這裏的代碼只適用於一個人。我如何修改1000行和100列的矩陣?馬爾可夫鏈矩陣

days<-100 
CURstate<-1 
state<-numeric(days) 
for(i in 1:days){ 
    randomNum<-runif(1) 
    if(CURstate==0){ 
    if(randomNum < .04){ 
     CURstate <- 1 
    }else{ 
     CURstate <- 0 
    } 
    }else{ 
    if(randomNum < .11){ 
     CURstate<-0 
    }else{ 
     CURstate<-1 
    } 
    } 
    state[i]<-CURstate 
} 

我試過這樣做,但我不斷收到一個空矩陣,我不知道爲什麼。

days<-100 
PopMat<- matrix(0,nrow = 1000,ncol = days) 
for(j in 1:nrow(PopMat)){ 
    state<- PopMat 
    CURstate<-0 
    for (i in 1:days) 
     randomNum<-runif(1) 
     if(CURstate==0){ 
     if(randomNum < .04){ 
      CURstate <- 1 
     }else{ 
     CURstate <- 0 
     } 
     }else{ 
     if(randomNum < .11){ 
      CURstate<-0 
     }else{ 
      CURstate<-1 
     } 
     } 
     state[j, i]<-CURstate 
    } 
state 

回答

-1

這是您的答案的一種解決方案。

set.seed(1121) 
gen_state <- function() { 
    days <- 100 
    CURstate <- 1 
    state <- numeric(days) 
    for (i in 1:days) { 
    randomNum <- runif(1) 
    if (CURstate == 0) { 
     if (randomNum < .04) { 
     CURstate <- 1 
     } else{ 
     CURstate <- 0 
     } 
    } else{ 
     if (randomNum < .11) { 
     CURstate <- 0 
     } else{ 
     CURstate <- 1 
     } 
    } 
    state[i] <- CURstate 
    } 
    return(state) 
} 

state_matrix <- t(replicate(1000,gen_state()))