Sto cercando di discretizzare una variabile continua, tagliandola in tre livelli. Voglio fare la stessa cosa per il log della variabile continua positiva (in questo caso, reddito).Discretizzando il registro di una variabile continua
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),]
avrei pensato che l'utilizzo cut()
produrrebbe livelli identici per i fattori discretizzati di ciascuna di queste variabili (reddito e log di reddito), a causa di registro è una funzione monotona. Quindi le due colonne qui a destra dovrebbero essere uguali, ma ciò non sembra accadere. Cosa sta succedendo?
> 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: @ commento di Nicola spiega la fonte del problema. Sembra che nella documentazione di , "intervalli di uguale lunghezza" si riferisca alla lunghezza dell'intervallo nello spazio dell'argomento continuo. Inizialmente avevo interpretato "intervalli di uguale lunghezza" nel senso che il numero di elementi assegnati a ciascun taglio (sull'output) sarebbe uguale (invece dell'input).
Esiste una funzione che fa ciò che sto descrivendo? - dove il numero di elementi in ciascun livello di uscita è uguale? Equivalentemente, dove i livelli di newfunc(realinc)
e newfunc(logrealinc)
sono uguali?
'log' non è una trasformazione lineare. Supponi che 'x' sia distribuito uniformemente tra 1 e 5. Ti aspetti che' log (x) 'sia distribuito uniformemente tra' log (1) 'e' log (5) '? Nel tuo esempio, prova 'hist (new $ realinc)' e 'hist (new $ logrealinc)' per vedere come si differenziano. 'cut' taglia semplicemente l'intero intervallo in intervalli sostanzialmente costanti; un elemento può facilmente cadere in un intervallo e il suo registro in un altro. – nicola
@nicola Grazie, è utile. Ho aggiornato la domanda con questo in mente. – Hatshepsut
È possibile cercare il vettore diviso in parti uguali – chinsoon12