我正在查看下面给出的代码:
### forward sampling
ForwardSimulation <- function(start_state,Rate_matrix,length_time){
## Size of state space
nSt <- nrow(Rate_matrix)
## State space
StSp <- 1:nSt
## Choose state at time=0 from initial distribution
## X holds states of path
X <- vector(mode="numeric")
## beginning state is start_state
X[1]<- start_state
## T holds times of path (Note: more sensible would be to find T from some exponential distribution(maybe))
T <- vector(mode="numeric")
## In the beginning time is 0
T[1] <- 0
T[2] <- 1
X[2] <- sample(StSp[-X[1]],1,prob=Rate_matrix[X[1],-X[1]])
print(X[2])
print(-X[2])
print(Rate_matrix)
print(Rate_matrix[X[2],-X[2]])
## Simulate states and waiting times similarly as above
## until time is larger than length_time
cnt <- 2 ## counter
while (T[cnt] < length_time) {
T[cnt+1] <- cnt
X[cnt+1] <- sample(StSp[-X[cnt]],1,prob=Rate_matrix[X[cnt],-X[cnt]])
cnt <- cnt+1
}
## Output state changes and corresponding times
Path <- list()
Path$length_time <- c(T[1:(cnt-1)],length_time)
Path$St <- c(X[1:(cnt-1)],X[cnt-1])
return(Path)
}
###Setting up the matrix
r1 <- 1 # 1->2
r2 <- 0.75 # 2->3
r3 <- 0.5 # 3->1
r4 <- 0.5 # 3-> 2
Rate_matrix <- matrix(c(-r1, r1, 0, 0, -r2, r2, r3, r4, -(r3+r4)), nrow = 3, byrow = TRUE)
path_forward <- ForwardSimulation(1,Rate_matrix,5)
plot(path_forward$length_time,path_forward$St,type = 's',ylab = 'State',xlab = 'Time')
上面提到的代码只是使用给定一些矩阵的CTMC来建立路径。 为什么我不明白,是示例函数中的Rate_matrix [X [cnt],-X [cnt]]和StSp [-X [cnt]]。我的意思是在这些情况下“ -X [cnt]”是什么意思。 帮助将不胜感激。
答案 0 :(得分:2)
它们的作用与-X[1]
中的作用相同
X[2] <- sample(StSp[-X[1]], 1, prob = Rate_matrix[X[1], -X[1]])
如果问题总体上是关于负指标,请注意
1:3
# [1] 1 2 3
(1:3)[-1]
# [1] 2 3
也就是说,我们返回没有某些元素的原始对象。在代码中,矩阵也是如此。因此,X[cnt]
是上一个时间段的状态。那么StSp[-X[cnt]]
是不具有此先前状态的状态空间,而Rate_matrix[X[cnt], -X[cnt]]
是第X[cnt]
行以及除X[cnt]
之外的所有元素。也就是说,Rate_matrix[X[cnt], -X[cnt]]
包含从X[cnt]
到所有其他状态的转换率。