2017-05-08 97 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()))