无法理解示例函数在做什么

时间:2018-11-22 11:11:11

标签: r

我正在查看下面给出的代码:

### 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]”是什么意思。 帮助将不胜感激。

1 个答案:

答案 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]到所有其他状态的转换率。