2016-12-31 4 views
1

J'ai un texte dans une colonne et je voudrais construire une chaîne markov. Je me demandais s'il existait un moyen de construire une chaîne markov pour les états A, B, C, D et de générer une chaîne markov avec ces états. Des pensées?Création d'une chaîne markov en r

A<- c('A-B-C-D', 'A-B-C-A', 'A-B-A-B') 
+0

peut vous être un peu plus précis? Comment aimeriez-vous spécifier la matrice des probabilités de transition? –

+0

Cette question a l'air liée/comme vous pouvez trouver ses réponses utiles http://stackoverflow.com/questions/2754469/r-library-for-discrete-markov-chain-simulation?rq=1 – hodgenovice

+0

Qu'avez-vous essayé? Il y a beaucoup d'informations sur les chaînes R et Markov. Il y a aussi [ce paquet] (https://cran.r-project.org/web/packages/markovchain/index.html) –

Répondre

2

Puisque vous avez mentionné que vous savez comment travailler avec statetable.msm, voici un façon de traduire les données en une forme qu'il peut gérer:

dd <- c('A-B-C-D', 'A-B-C-A', 'A-B-A-B') 

Split tirets et organiser dans les colonnes:

d2 <- data.frame(do.call(cbind,strsplit(dd,"-"))) 

Disposez-les dans une trame de données, identifié par séquence:

d3 <- tidyr::gather(d2) 

Construct la matrice de transition:

statetable.msm(value,key,data=d3) 
2

Si vous voulez calculer la matrice de probabilité de transition (ligne stochastique) avec MLE à partir des données, essayez ceci:

A <- c('A-B-C-D', 'A-B-C-A', 'A-B-A-B', 'D-B-C-A') # the data: by modifying your example data little bit 
df <- as.data.frame(do.call(rbind, lapply(strsplit(A, split='-'), function(x) t(sapply(1:(length(x)-1), function(i) c(x[i], x[i+1])))))) 
tr.mat <- table(df[,1], df[,2]) 
tr.mat <- tr.mat/rowSums(tr.mat) # make the matrix row-stochastic 
tr.mat 

    #   A   B   C   D 
    # A 0.0000000 1.0000000 0.0000000 0.0000000 # P(A|A), P(B|A), P(C|A), P(D|A) with MLE from data 
    # B 0.2500000 0.0000000 0.7500000 0.0000000 
    # C 0.6666667 0.0000000 0.0000000 0.3333333 
    # D 0.0000000 1.0000000 0.0000000 0.0000000