2016-12-31 2 views
1

У меня есть текст в столбце, и я хотел бы построить цепочку марков. Мне было интересно, есть ли способ построить цепочку марков для состояний A, B, C, D и создать цепочку марков с этими состояниями. Есть предположения?Цепь построения марков в r

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

вы можете быть немного более конкретно? Как бы вы хотели указать матрицу вероятностей перехода? –

+0

Этот вопрос выглядит связанным/как вы можете найти его ответы полезным http://stackoverflow.com/questions/2754469/r-library-for-discrete-markov-chain-simulation?rq=1 – hodgenovice

+0

Что вы пробовали? Существует много информации о цепях R и Маркова. Существует также [этот пакет] (https://cran.r-project.org/web/packages/markovchain/index.html) –

ответ

2

Поскольку вы упомянули, что вы знаете, как работать с statetable.msm, вот способ перевести данные в форму, он может обрабатывать:

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

Split на тире и организовать в столбцах:

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

Разложить в кадре данных, которые были определены последовательности:

d3 <- tidyr::gather(d2) 

Построить матрицу перехода:

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

Если вы хотите, чтобы вычислить матрицу вероятностей перехода (строка стохастический) с ОМП из данных, попробуйте следующее:

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