2016-04-21 16 views
0

Ich bin durch das Verhalten der varimp() Funktion von Party-Paket verwirrt.Varimp (R-Party) gibt nur Nullen zurück

Ich verwende bedingte zufällige Gesamtstruktur, um nach Strobl et al. 2009 Empfehlungen.

Es funktioniert gut für alle meine Datensätze außer einem. Ich muss meine Beobachtung für diesen Teil unterteilen. Aber selbst wenn die bedingte Zufallswaldstruktur normalerweise für das vollständige Dataset ausgeführt wird, gibt sie nur Nullen für die Teilmenge zurück ... und scheint überhaupt nicht zu laufen, aber es wird kein Fehler generiert.

Ich fragte mich, ob die Anzahl der Prädiktoren zu viel für nur wenige Beobachtungen ist und versuche mit nur einer begrenzten Anzahl von Prädiktoren, aber es gibt mir die gleichen Ergebnisse. Es scheint nicht, entweder Link zu Variablentyp zu sein, wie es in anderen Fällen wies darauf hin, ...

ich natürlich bin etwas fehlt, aber ich kann einfach nicht herausfinden, was ...

Wenn jemand Eine Einsicht in die Richtung, in die ich schauen sollte, wäre ich so dankbar.

Meine Daten here.

VarforCRF <- read.csv("Data.csv",sep=";",dec=",",row.names=1) 
library(party) 
set.seed(round(runif(1,0,1)*10000)) 

# Run just fine with the entire dataset 
cRF <- cforest(Syrph_pred~.,data = VarforCRF, control = cforest_unbiased(ntree=100)) 
varimp(object = cRF,conditional = T) 


CRF_West <- subset(VarforCRF,Sector == "West") 

# Does not seem to run at all with subset and return zeros 
cRF_W <- cforest(Syrph_pred~.,data = CRF_West, control = cforest_unbiased(ntree=100)) 
varimp(object = cRF_W,conditional = T) 
+0

Ihre Daten werden in einem seltsamen Format heruntergeladen. Haben Sie es als Semikolon getrennt gespeichert, weil das keine gute Methode zum Speichern von Daten ist. – Jason

+0

Ja. Sorry, französische Version von Excel speichert .csv standardmäßig mit Semikolon –

+0

Da sich Excel auf verschiedenen Systemen unterschiedlich verhält, stellt R 'read.csv()' (für das ursprüngliche kommagetrennte Format) und 'read.csv2()' bereit (für das Semikolon-getrennte Format). In Ihrem Fall verwenden Sie einfach: 'read.csv2 (" Data.csv ", row.names = 1)'. –

Antwort

0

Ihre Substichprobe CRF_West ist zu klein, um Spaltungen in den Bäumen des Waldes zu erhalten. Die Daten haben 23 Beobachtungen, aus denen Bootstrap-Proben von etwa 2/3 für jeden Baum gezeichnet werden. Die minimale Größe eines Knotens zum Aufteilen beträgt jedoch 20 Beobachtungen mit einer minimalen Knotengröße von 7 Beobachtungen, siehe ?ctree_control.

Um das Aufspalten der Bäume/Wälder zu erzwingen, können Sie kleinere Werte verwenden, z.

cRF_W <- cforest(Syrph_pred~.,data = CRF_West, 
    control = cforest_unbiased(ntree=100, minsplit = 15, minbucket = 5)) 

Für diese Gesamtstruktur erhalten Sie variable Variablen, die nicht Null sind. Ob dies zu besonders guten/verlässlichen Ergebnissen bei einer so kleinen Stichprobe führt oder nicht, ist eine andere Frage.

Ein letzter Kommentar: Der Versuch, Berechnungen durch Setzen eines Seeds reproduzierbar zu machen, ist gut und sehr nützlich. Die Verwendung einer (nicht reproduzierbaren) Zufallszahl für den Zufallssamen untergräbt jedoch das Ganze ...

+0

Vielen Dank! Ich fand heraus, dass die Stichprobengröße zu klein war, aber ich konnte nicht verstehen warum. Ich versuche, einen anderen Weg zu finden, um mit diesen Daten umzugehen, ohne sie zu verändern. Die Sache ist, Syrph_pred hat eine bimodale Verteilung, die Sektoren (Westen und Osten) entspricht ... Was den Samen betrifft, ich weiß. Ich setze zufällig Samen, um zu testen, ob verschiedene Samen zu unterschiedlichen Ergebnissen führen. Ein Lehrer rät mir, das einmal zu tun ... –