2016-05-06 16 views
1

Zum Beispiel sagen, ich habe einen Befragten und fragen, ob er/sie eine Krankheit hat. Von dort frage ich, ob ihr Vater die Krankheit hat. Wenn ja zu letzterer Frage, dann frage ich, ob der Vater jetzt geheilt ist. Wenn der Vater die Krankheit nicht hatte, dann ist die Frage nicht anwendbar.Wie kann ich eine Kontingenztabelle mit mehreren Variablen als Entscheidungsbaum in R visuell darstellen?

Kann ich einen solchen "Entscheidungsbaum" in R erstellen oder wo? Hier

ist verwendbare Daten, wobei 0 bedeutet „nein“, und 1 bedeutet „ja“:

person_disease <- c(rep(1, 10), rep(0, 20)) 

father_disease <- c(rep(1, 7), rep(0,18), rep(1,5)) 

father_cured <- c(rep(0, 4), rep(1,3), rep(NA,18),rep(1,5) ) 

## 
df <- data.frame(person_disease, father_disease, father_cured) 

enter image description here

+0

vielleicht das Paket partykit (https://cran.r-project.org/web/packages/partykit/index.html) helfen. –

Antwort

1

Sie können die data.tree Paket dafür. Es gibt viele Möglichkeiten zu tun, was Sie wollen. Zum Beispiel:

person_disease <- c(rep(1, 10), rep(0, 20)) 
father_disease <- c(rep(1, 7), rep(0,18), rep(1,5)) 
father_cured <- c(rep(0, 4), rep(1,3), rep(NA,18),rep(1,5) ) 
df <- data.frame(person_disease, father_disease, father_cured) 

library(data.tree) 

#here, the tree is constructed "manually" 
#however, depending on your data and your needs, you might want to generate the tree directly from the data 
#many examples for this are available in the vignettes, see browseVignettes("data.tree") 
disease <- Node$new("Disease", data = df) 
father_disease_yes <- disease$AddChild("Father Disease Yes", label = "Father Disease", edge = "yes", condition = function(df) df[df$person_disease == 1,]) 
father_cured_yes <- father_disease_yes$AddChild("Father Cured Yes", label = "Father Cured", edge = "yes", condition = function(df) df[df$father_cured == 1,]) 
father_disease_no <- disease$AddChild("Father Disease No", label = "Father Disease", edge = "no", condition = function(df) df[df$person_disease == 0,]) 


#data filter (pre-order) 
#an alternative would be to do this recursively 
disease$Do(function(node) { 
    for (child in node$children) { 
    child$data <- child$condition(node$data) 
    } 
}) 

print(disease, total = function(node) nrow(node$data)) 


#plotting 
#(many more options are available, see ?plot.Node) 
SetEdgeStyle(disease, 
      fontname = "helvetica", 
      arrowhead = "none", 
      label = function(node) paste0(node$edge, "\n", "total = ", nrow(node$data))) 

SetNodeStyle(disease, 
      fontname = "helvetica", 
      label = function(node) node$label) 

plot(disease) 

enter image description here

1

der Tat gibt es ein Paket, das Sie verwenden können, diese Art von Grafik zu erstellen es heißt, bequemerweise, Diagramm.

Es ist kein automatisierter Grafikprozess wie barplot() oder qplot(), aber es ist etwas, das Sie verwenden können, um genau die Art von Diagramm zu machen, das Sie machen möchten.

Wenn Sie diszipliniert sind, könnten Sie Code schreiben, um den Prozess für Ihre speziellen Daten und Ihre Situation automatischer zu machen.

Das Paket heißt, Diagramm. und Sie können mehr darüber in diesem pdf erfahren.

diagram pdf.