Datengenauigkeiten:
- Zitat ist eine Dummy-Variable
- Minuten zählen alle Minuten innerhalb eines Tages
- Temperatur ist die Temperatur
Hier ist mein Code:
ctree <- ctree(quotation ~ minute + temp, data = visitquot)
print(ctree)
Fitted party:
[1] root
| [2] minute <= 600
| | [3] minute <= 227
| | | [4] temp <= -0.4259
| | | | [5] temp <= -2.3174: 0.015 (n = 6254, err = 89.7)
| | | | [6] temp > -2.3174
| | | | | [7] minute <= 68: 0.028 (n = 4562, err = 126.3)
| | | | | [8] minute > 68: 0.046 (n = 7100, err = 312.8)
| | | [9] temp > -0.4259
| | | | [10] temp <= 6.0726: 0.015 (n = 56413, err = 860.5)
| | | | [11] temp > 6.0726: 0.019 (n = 39779, err = 758.9)
| | [12] minute > 227
| | | [13] minute <= 501
| | | | [14] minute <= 291: 0.013 (n = 30671, err = 388.0)
| | | | [15] minute > 291: 0.009 (n = 559646, err = 5009.3)
| | | [16] minute > 501
| | | | [17] temp <= 5.2105
| | | | | [18] temp <= -1.8393: 0.009 (n = 66326, err = 617.1)
| | | | | [19] temp > -1.8393: 0.012 (n = 355986, err = 4289.0)
| | | | [20] temp > 5.2105
| | | | | [21] temp <= 13.6927: 0.014 (n = 287909, err = 3900.7)
| | | | | [22] temp > 13.6927
| | | | | | [23] temp <= 14: 0.035 (n = 2769, err = 92.7)
| | | | | | [24] temp > 14: 0.007 (n = 2161, err = 15.9)
| [25] minute > 600
| | [26] temp <= 1.6418
| | | [27] temp <= -2.3366: 0.012 (n = 110810, err = 1268.1)
| | | [28] temp > -2.3366: 0.014 (n = 584457, err = 7973.2)
| | [29] temp > 1.6418: 0.016 (n = 3753208, err = 57864.3)
Dann habe ich den Baum geplottet:
plot(ctree, type = "simple")
Und hier ist ein Teil der Ausgabe:
Meine Fragen sind:
print(ctree)
Nehmen wir in der ersten Ausgabe von die letzte Zeile[29] temp > 1.6418: 0.016 (n = 3753208, err = 57864.3)
. Was bedeutet der Wert0.016
? ist das ein p-wert? Und was heißterr = 57864.3
das? Es kann keine Zählung von Zuordnungsfehlern sein, da es sich um eine Gleitkommazahl handelt.- Ich konnte nirgendwo eine ähnliche Ausgabe finden, die ich im grauen Quadrat habe. Wenn jemand weiß, wie man es interpretiert. Und wie kann ein p-Wert negativ sein?
r
data-visualization
cart
Yohan Obadia
quelle
quelle
party
package anstelle von zu versuchenpartykit
. Ich denke, dietype='simple'
Handlung funktioniert so besser. Was sind die Werte Ihrer Dummy-Variablen? Ist es binär, kategorisch? Ist dies ein Klassifikationsbaum oder ein Regressionsbaum? Wäre gut, eine Zusammenfassung Ihrer 3 Variablen zu sehen. Ich habe das Gefühl, dass Ihre Dummy-Variable (Ausgabevariable) numerisch ist, aber das Modell behandelt sie als Skalierungsvariable und nicht als kategorisch.as.character
, Faktoren anstelle von Faktoren zu verwenden. Sie müssen das Modell wissen lassen, dass diese Nullen und Einsen Beschriftungen und keine reellen Zahlen sind.numeric
undquotation
besteht aus0
und1
. Wie kann ich wissen, ob es sich um eine Regression oder einen kategorialen Baum handelt? Ich werde sofort mitquotation
als Faktor und dann mit demparty
Paket testen . Was ich jedoch aus Ihrer Antwort verstehe, ist, dass die aktuelle Ausgabe nicht normal ist, oder?err
Werten basieren . Wenn es sich um einen Klassifizierungsbaum handelt, handelt es sich um eine Fehlklassifizierung%.plot(..., type = "simple")
Problem. Ich muss noch überprüfen, warum dies derzeit nicht wie gewünscht funktioniertpartykit
, werde aber versuchen, dies bald zu beheben. Tun Sie in der Zwischenzeit einfach,plot(as.simpleparty(ctree))
was den gewünschten Plot erzeugt. (Dies ist besser als zur altenparty
Implementierung zurückzukehren ...)Antworten:
Das
0.016
, was Sie sehen, ist der Durchschnitt vonquotation
while,err
ist nur die SSE.Ich bin
partykit
altmodisch und weiß nicht, wie ich das mit dem neuen Paket genau zeigen soll (vielleicht könnte @Achim es veranschaulichen), aber ich kann Ihnen zeigen, wie das mit dem älterenparty
Paket gemacht wird.Erstellen wir also ein reproduzierbares Beispiel
Lassen Sie uns nun
dtach
daspartykit
Paket und den gleichen Baum mitparty
den gleichen Werten anpassen und berechnenIch denke, es ist leicht an der Ausgabe zu erkennen, welche welche ist
Der obige Code extrahiert im Grunde genommen die Informationsinformationen
Ozone
aus dem angepassten Baum für jeden inneren Knoten und berechnet die relevanten StatistikenLaut
P-value
s scheint dies eine Art Druckfehler zu sein. Hier ist ein Beispiel, wie Sie dasP-value
s in den inneren Knoten berechnen könnenAls Randnotiz: Wenn
quotation
es sich um eine Dummy-Variable handelt, sollten Sie wahrscheinlich einen Klassifizierungsbaum anpassen (dh in einen Faktor konvertieren), anstatt einen Regressionsbaum wie Siequelle
tapply()
die Antwort der entsprechenden Endknoten zu bearbeiten und jede gewünschte Funktion zu berechnen, ztapply(airq$Ozone, predict(airct, type = "node"), function(y) c("n" = length(y), "Avg." = mean(y), "Variance" = var(y), "SSE" = sum((y - mean(y))^2)))
. Sie können auch eine nachfolgendedo.call("rbind", ...)
oder eine andere Art der Aggregation verwenden ...partykit
Version einfach extrahieren . Um die p-Werte aus allen durchgeführten Tests zu erhalten, tun Sie dies einfachlibrary("strucchange")
und dannsctest(airct)
. Daraus können Sie leicht das Minimum oder eine andere Zusammenfassung erhalten, die Sie wünschen. Darüber hinaus können Sie auch nur den minimalen p-Wert extrahieren, der in jedem Knoten (falls vorhanden) gespeichert ist, durchnodeapply(airct, ids = nodeids(airct), FUN = function(n) info_node(n)$p.value)
.Wie von @DavidArenburg vorgeschlagen, sammle ich meine Kommentare hier in einer anderen Antwort, um die Referenz zu vereinfachen.
(1) Wenn Ihre Antwort binär ist, müssen Sie sie in einen Faktor umwandeln. Andernfalls ist die Schlussfolgerung, die beim Wachsen des Baums verwendet wird, nicht so, wie sie sein sollte, und auch die Vorhersagen, Visualisierungen und Fehlermaßnahmen sind nicht für die Klassifizierung vorgesehen. Weitere Beispiele finden Sie in den Antworten von @DavidArenburg und @AntoniosK. Im Allgemeinen: Außerdem müssen die erklärenden Variablen über geeignete Klassen (numerisch, Faktor, geordneter Faktor) verfügen, damit sie beim Wachsen des Baums korrekt verarbeitet werden können.
(2) Das
plot(..., type = "simple")
funktioniert derzeit nicht wie gewünscht - mit anderen Worten ist dies ein Fehler. Wir werden daspartykit
Paket zu gegebener Zeit reparieren . Im Moment können Sie es einfach umgehen, indem Sie es verwendenplot(as.simpleparty(...))
. Als reproduzierbares Beispiel:(3) Die
$criterion
derzeit imtype = "simple"
Diagramm fälschlicherweise gezeigte Tabelle enthält die Teststatistik und die entsprechenden log 1-p-Werte aus der in jedem Knoten durchgeführten bedingten Inferenz. Das Protokoll anstelle des p-Werts wird verwendet, da es numerisch viel stabiler ist, wenn es für Vergleiche, die Berechnung des Minimalwerts usw. verwendet wird. Beachten Sie, dass die p-Werte bei Signifikanz extrem klein werden können. Betrachten Sie als Beispiel die Testergebnisse, die dem ersten Knoten aus dem obigen Baum entsprechen:(4) Um die tatsächlichen p-Werte (ohne Protokoll) zu extrahieren, gibt es eine Extraktionsfunktion
sctest()
(für den Strukturänderungstest ), die vomstrucchange
Paket und auch für die Parameterinstabilitätstests in denmob()
Bäumen verwendet wird. Im obigen Beispiel:Beachten Sie, dass ein p-Wert (Glukose) Null wird, während sein log (1 - p) sehr nahe bei Null liegt, aber nicht ganz. Um nur die minimalen p-Werte aus der ausgewählten Partitionierungsvariablen (falls vorhanden) zu extrahieren, können Sie die
nodeapply()
Funktion erneut verwenden , um sie von jedem Knoten abzurufen$info
:(5) Wenn Sie die Antwort in jedem Endknoten zusammenfassen möchten, besteht die einfachste Lösung (IMHO) darin,
tapply()
die Antwortvariable durch die Knotengruppen einfach zu bearbeiten und eine beliebige Zusammenfassungsfunktion bereitzustellen. Für eine einfachere Übersicht können Sie auchrbind()
dies usw. Zum Beispiel:quelle
Als Ergänzung zu @DavidArenburgs großartiger Antwort zeige ich Ihnen den Unterschied in den Ausgaben zwischen Regressions- und Klassifizierungsbäumen
Beachten Sie, wie (a) sich die Werte der Bäume von einem Durchschnittswert von 0s und 1s (Regressionsbaum) zu der wahrscheinlichsten Klasse 0/1 (Klassifizierungsbaum) ändern und (b) die
err
Werte einer Zahl (Fehler) zu einem Prozentsatz werden (Fehlklassifizierung).quelle