Ich versuche eine kontinuierliche Variable zu diskretisieren, indem ich sie in drei Ebenen zerschneide. Ich möchte dasselbe für den Logarithmus der positiven kontinuierlichen Variablen (in diesem Fall Einkommen) tun.Diskretisieren des Logs einer kontinuierlichen Variablen
require(dplyr)
set.seed(3)
mydata = data.frame(realinc = rexp(10000))
summary(mydata)
new = mydata %>%
select(realinc) %>%
mutate(logrealinc = log(realinc),
realincTercile = cut(realinc, 3),
logrealincTercile = cut(logrealinc, 3),
realincTercileNum = as.numeric(realincTercile),
logrealincTercileNum = as.numeric(logrealincTercile))
new[sample(1:nrow(new), 10),]
Ich hätte gedacht, dass cut()
mit identischen Ebenen für die diskretisierten Faktoren jeder dieser Variablen (Einkommen und log Einkommen) erzeugen würde, da log eine Funktion monoton ist. Also sollten die zwei Spalten auf der rechten Seite gleich sein, aber das scheint nicht zu passieren. Was ist los?
> new[sample(1:nrow(new), 10),]
realinc logrealinc realincTercile logrealincTercile realincTercileNum logrealincTercileNum
7931 0.2967813 -1.21475972 (-0.00805,2.83] (-4.43,-1.15] 1 2
9036 0.9511824 -0.05004944 (-0.00805,2.83] (-1.15,2.15] 1 3
8204 4.5365676 1.51217069 (2.83,5.66] (-1.15,2.15] 2 3
3136 2.0610693 0.72322490 (-0.00805,2.83] (-1.15,2.15] 1 3
9708 0.9655805 -0.03502581 (-0.00805,2.83] (-1.15,2.15] 1 3
5942 0.9149351 -0.08890215 (-0.00805,2.83] (-1.15,2.15] 1 3
4631 0.6987581 -0.35845064 (-0.00805,2.83] (-1.15,2.15] 1 3
7309 1.9532566 0.66949804 (-0.00805,2.83] (-1.15,2.15] 1 3
7708 0.4220254 -0.86268973 (-0.00805,2.83] (-1.15,2.15] 1 3
2965 1.3690976 0.31415186 (-0.00805,2.83] (-1.15,2.15] 1 3
Edit: @ Kommentar Nicolas erklärt die Quelle des Problems. Es scheint, dass in der Dokumentation von "gleich lange Intervalle" auf die Länge des Intervalls im Raum des kontinuierlichen Arguments verweist. Ich hatte ursprünglich "Intervalle mit gleicher Länge" so interpretiert, dass die Anzahl der jedem Schnitt (am Ausgang) zugewiesenen Elemente gleich wäre (anstelle der Eingabe).
Gibt es eine Funktion, die das tut, was ich beschreibe? - Wo ist die Anzahl der Elemente in jedem Ausgangspegel gleich? Gleichwertig, wo die Niveaus newfunc(realinc)
und newfunc(logrealinc)
gleich sind?
'log' ist keine lineare Transformation. Nehmen wir an, dass "x" gleichmäßig zwischen 1 und 5 verteilt ist. Erwarten Sie, dass "log (x)" gleichmäßig zwischen "log (1)" und "log (5)" verteilt ist? In Ihrem Beispiel versuchen Sie 'hist (new $ realinc)' und 'hist (new $ logrealinc)', um zu sehen, wie sie sich unterscheiden. 'cut' schneidet nur den gesamten Bereich in im Wesentlichen konstanten Intervallen; Ein Element kann durchaus in ein Intervall fallen und sich in ein anderes einreihen. – nicola
@nicola Danke, das ist hilfreich. Ich habe die Frage in diesem Sinne aktualisiert. – Hatshepsut
Sie können nach Split-Vektor in gleiche Stücke – chinsoon12