2016-04-12 4 views
2

У меня есть следующий dataframe с такими состояниями: сердитый, спокойный и уставший. В приведенном ниже окне данных приводятся отдельные случаи перехода одного состояния в другое.Создание трехгосударственного участка цепи Маркова

pre<-cbind(c(rep("tired",100),rep("angry",100),rep("calm",100))) 
post<-cbind(c(rep("tired",50),rep("angry",70),rep("calm",100),rep("tired",80))) 
df<-cbind(pre,post) 
df<-as.data.frame(df) 
colnames(df)<-c("pre","post") 

То, что я хотел бы достичь в ПОСТРОЕНИЕ цепи Постройте Маркова для трех государств, которые также называют «площадка» и выглядит следующим образом:

enter image description here

Как бы я сделать это в R ?

Заранее благодарен!

ответ

1

Мы можем использовать пакет markovchain, используя метод plot в diagram. первый вычислительный

Давайте вероятность перехода матрицы из вашего df

states<-c("tired","angry","calm") 

probsCase<-function(i,j){ 
    sum(as.character(df$pre)==states[i] & as.character(df$post)==states[j])/sum(as.character(df$pre)==states[i]) 
} 

transitionMatrix<-outer(1:3,1:3,Vectorize(probsCase)) 
colnames(transitionMatrix)<-states 
rownames(transitionMatrix)<-states 

Теперь используйте markovchain для инициализации и построить матрицу

library(markovchain) 
markovChain <- new("markovchain", states=states, transitionMatrix=transitionMatrix) 
plot(markovChain,package="diagram") 

EDIT:

Если у вас возникли проблемы с установкой markovchain пакет, мы фактически не можем его использовать и использовать напрямую diagram пакет, который нужно просто transitionMatrix

library(diagram) 
plotmat(transitionMatrix,relsize=0.7) 

Вы можете настроить внешний вид по своему вкусу, используя параметры в plotmat

+0

спасибо за ваш ответ, я успешно добрался до transitionMatrix, но есть проблемы с установкой пакета ' markovchain', в частности его зависимость «RCurl». У меня есть версия R 3.2.3, работающая на Crunchbang Linux Waldorf. Как вы его установили? Могли бы вы хотя бы добавить свой ответ, чтобы опубликовать, как выглядит сюжет? Еще раз спасибо. – Oposum

+0

Отметьте новое редактирование – adaien

+0

спасибо! он работает, но по некоторым причинам правые и верхние поля графика находятся за пределами графического устройства R. Есть ли способ заменить цифры 1, 2 и 3 состояниями «усталыми», «сердитыми», «спокойными» в сюжете? – Oposum

Смежные вопросы