#' RateMAndStateSpace
#'
#' Rate Matrix with corresponding state space
#'
#' @usage RateMAndStateSpace(n)
#'
#' @param n integer larger than 1.
#'
#' @import partitions
RateMAndStateSpace <- function(n){
##----------------------------------------------------
## Possible states
##----------------------------------------------------
## Size of the state space (number of states)
nSt <- partitions::P(n)
## Definition of the state space
StSpM <- matrix(ncol=n,nrow=nSt)
## Set of partitions of [n]
x <- parts(n)
## Rewriting the partitions as (a1,...,an)
for (i in 1:nSt) {
st <- x[,i]
StSpM[i,] <- tabulate(x[,i],nbins=n)
}
## Reordering
StSpM <- StSpM[order(rowSums(StSpM),decreasing=TRUE),]
## Because of this ordering we can't 'go back', i.e.
## below the diagonal the entries are always zero
##----------------------------------------------------
## Intensity matrix
##----------------------------------------------------
RateM <- matrix(0,ncol=nSt,nrow=nSt)
## Algorithm for finding rates between states
for (i in 1:(nSt-1)){
for (j in (i+1):nSt){
cvec <- StSpM[i,]-StSpM[j,]
check1 <- sum(cvec[cvec>0])==2
check2 <- sum(cvec[cvec<0])==-1
if (check1 & check2){
## Size(s) of the block(s) and the corresponding rates
tmp <- StSpM[i,which(cvec>0)]
RateM[i,j] <- ifelse(length(tmp)==1,tmp*(tmp-1)/2,prod(tmp))
}
}
}
## Diagonal part of the rate matrix
for (i in 1:nSt){
RateM[i,i] <- -sum(RateM[i,])
}
list(RateM=RateM,StSpM=StSpM)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.