2016-04-12 55 views
2

我有以下數據框與狀態:生氣,冷靜,並且很累。下面的數據框提供了一個狀態轉換到另一個狀態的個案。創建三狀態馬爾可夫鏈圖

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") 

我想達成什麼是buidling三個狀態的馬爾可夫鏈陰謀,它也被稱爲「遊樂場」,看起來像這樣:

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") 

編輯:

如果你有安裝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