2013-04-10 5 views
-1

j'ai données comme dans la forme de ceComment calculer la matrice de probabilité de transition d'un second ordre de Markov Chain

Broker.Position

IP BP SP IP IP ..

Je voudrais calculer la matrice de transition du second ordre comme dans cette forme

   BP IP SP 

BPBP

PAPS

IPIP

PSPB

SPBP

IPSP

SPIP

BPIP

IPBP

+0

Cela pourrait être utile lien: http://www.mathworks.com/matlabcentral/fileexchange/37322-multi-order-state-transition-matrix/content//getTransitionMatrix.m – dexterdev

Répondre

2

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) 
Questions connexes