2016-11-24 4 views
0

Ich versuche, eine Variable mit Wert zwischen 1 bis 100.000 in zehn Gruppen von 10.000 bin. Ich verwende den folgenden Code und erhalte einen Fehler.Fehler beim Binning von Daten mit `cut` in R

cut(x, breaks = quantile(x, probs=seq(0, 100000, 10000)), include.lowest = TRUE) 

Was mache ich falsch?

+0

Ich kann den Datensatz nicht teilen. Wir können annehmen, dass der Betrag eine numerische Variable mit einem Wert zwischen 1 und 100.000 ist. Jedes Beispiel, wie man richtig stopft, hilft – goutam

+0

@ZheyuanLi Irgendeine Idee, wie und warum sie unterschiedlich sind? Irgendwelche Links dazu lesen? – goutam

Antwort

1

Nun, zuerst sah ich dies als Tippfehler, aber nach ein paar Diskussionen in den Kommentaren beschloss ich, eine Antwort zu schreiben.

Der Fehler tritt bei quantile auf, da probs zwischen 0 und 1 liegen sollte (lesen Sie ?quantile).


Es sieht aus wie Sie mit den folgenden beiden verwechselt wurden:

cut(x, breaks = seq(0, 100000, 10000), include.lowest = TRUE) 
cut(x, breaks = quantile(x, prob = seq(0, 1, 0.1)), include.lowest = TRUE) 

Wie gesagt, werden sie anderes Ergebnis geben, vor allem, wenn die Daten nicht gleichmäßig verteilt.

Als repräsentatives Beispiel, ungleichmäßig verteilten Daten betrachten, sagen Beta verteilt:

set.seed(0) 
x <- rbeta(10000, 3, 5) 

b1 <- seq(0, 1, 0.1) 

b2 <- quantile(x, prob = seq(0, 1, 0.1), names = FALSE) 
round(b2, 2) 
# [1] 0.01 0.17 0.23 0.28 0.32 0.37 0.41 0.46 0.52 0.60 0.94 

Hinweis, der Unterschied zwischen b2 und b1 signifikant sind. Sie können die (empirische) Quantil-Quantil Grundstück inspizieren:

plot(b1, b2); abline(0, 1) 

Sie werden die Punkte sehen stark von der Linie abweicht.

In oben gibt b1 einheitliche bin-Zellen, während b2 zackige bin-Zellen gibt. Betrachten Sie jetzt die Anzahl der Behälter:

table(cut(x, breaks = b1, include.lowest = TRUE)) 
# [0,0.1] (0.1,0.2] (0.2,0.3] (0.3,0.4] (0.4,0.5] (0.5,0.6] (0.6,0.7] (0.7,0.8] 
#  256  1239  2011  2242  1948  1323  685  245 
#(0.8,0.9] (0.9,1] 
#  48   3 

table(cut(x, breaks = b2, include.lowest = TRUE)) 
#[0.0101,0.169] (0.169,0.228] (0.228,0.276] (0.276,0.321] (0.321,0.365] 
#   1000   1000   1000   1000   1000 
# (0.365,0.412] (0.412,0.463] (0.463,0.519] (0.519,0.598] (0.598,0.935] 
#   1000   1000   1000   1000   1000 

Haben Sie den Unterschied gesehen? Wenn wir Bruchpunkte nach Quantil setzen, haben wir einheitliche Zählungen über den Bins.