Vous pouvez utiliser embed
pour générer les paires de transitions consécutives, table
les compter, apply
pour calculer les totaux et convertir les comptes de probabilités, dcast
et melt
pour convertir le tableau à un ensemble de données .Cadre.
# Sample data
states <- sample(LETTERS[1:3], 1e5, replace=TRUE)
# Pairs of transitions
d <- embed(states, 3)
colnames(d) <- c("today", "yesterday", "day before yesterday")
head(d)
# Count the transitions
counts <- table(as.data.frame(d))
# Divide by the total number of transitions, to have probabilities
probabilities <- counts
probabilities[] <- as.vector(counts)/rep(as.vector(apply(counts, 2:3, sum)), each=dim(counts)[1])
# Check that the probabilities sum up to 1
apply(probabilities, 2:3, sum)
# Convert the 3-dimensional array to a data.frame
library(reshape2)
dcast(melt(probabilities), yesterday + `day before yesterday` ~ today)
Cela pourrait être utile lien: http://www.mathworks.com/matlabcentral/fileexchange/37322-multi-order-state-transition-matrix/content//getTransitionMatrix.m – dexterdev