[英]Plot a decision tree with R
我有一個440 * 2矩陣,看起來像:
1 144
1 152
1 135
2 3
2 12
2 107
2 31
3 4
3 147
3 0
4 end
4 0
4 0
5 6
5 7
5 10
5 9
左列是起點,例如,在應用程序中,左側的所有1都位於同一頁面上。 他們導致三個選擇,第144,152,135頁。 然后,這些頁面可以各自通向另一頁面,依此類推,直到右列顯示“結束”為止。 我想要的是一種可視化這棵樹的比例的方法。 我意識到在行數為nb的情況下它會很大,因此可能不是圖形友好的,所以為了清楚起見,我想知道總共有多少條可能的路線(從每個起點開始,一直到給出的每個選項,以及每個終點的終點我意識到會有重疊,但這就是為什么我發現這個很難計算)。
其次,每個數字都有一個相關的標題。 我希望有一個函數,如果您輸入給定的標題,它將繪制所有可能的起點及其相關的路徑,並以此為起點。 這應該小很多,因此圖形友好。
例如
dta <- "
14 12 as
186 187 Frac
187 154 Low
23 52 Med
52 11 Lip
15 55 asd
11 42 AAA
42 154 BBB
154 end Coll"
編輯的示例數據顯示某些分支未連接到所需樹
dta <- "
14 12 as
186 187 Frac
187 154 Low
23 52 Med
52 11 Lip
11 42 AAA
42 154 BBB
154 end Coll"
dta <- gsub(" ", ",", dta, fixed = TRUE)
dta <- gsub(" ", ",", dta, fixed = TRUE)
df <- read.csv(textConnection(dta), stringsAsFactors = FALSE, header = FALSE)
names(df) <- c("from", "to", "nme")
library(data.tree)
Warning message:
package ‘data.tree’ was built under R version 3.2.5
tree <- FromDataFrameNetwork(df)
**Error in FromDataFrameNetwork(df) :**
**Cannot find root name. network is not a tree!**
我制作了這個示例,以顯示第1列如何導致第2列中的值,該值然后引用第1列中的值直到到達結尾。 不同的起點最終可能導致到達同一目的地的長度不同的路徑。 所以看起來像:
所以在這里,我想看看如何從所有起點轉到“ Coll”
非常感謝任何幫助
如果確實有樹(例如沒有循環),則可以使用data.tree:
首先轉換為data.frame:
dta <- "
14 12 as
186 187 Frac
187 154 Low
23 52 Med
52 11 Lip
15 55 asd
11 42 AAA
42 154 BBB
154 end Coll
55 end efg
12 end hij"
dta <- gsub(" ", ",", dta, fixed = TRUE)
dta <- gsub(" ", ",", dta, fixed = TRUE)
df <- read.csv(textConnection(dta), stringsAsFactors = FALSE, header = FALSE)
names(df) <- c("from", "to", "nme")
現在,轉換為data.tree:
library(data.tree)
tree <- FromDataFrameNetwork(df)
tree$leafCount
現在,您可以導航到任何子樹,以進行分析和繪圖。 例如,使用以下任意一種可能性:
subTree <- tree$FindNode(187)
subTree <- Climb(tree, nme = "Coll", nme = "Low")
subTree <- tree$`154`$`187`
subTree <- Clone(tree$`154`)
也許您只需要打印:
print(subTree , "nme")
它將像這樣打印:
levelName nme
1 154 Coll
2 ¦--187 Low
3 ¦ °--186 Frac
4 °--42 BBB
5 °--11 AAA
6 °--52 Lip
7 °--23 Med
否則,請使用花式繪圖:
SetNodeStyle(subTree , style = "filled,rounded", shape = "box", fontname = "helvetica", label = function(node) node$nme, tooltip = "name")
plot(subTree , direction = "descend")
看起來像這樣:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.