6
我想離散化一個連續變量,將其切割成三個層次。我想爲積極連續變量的日誌(在這種情況下爲收入)做同樣的事情。離散化連續變量的日誌
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),]
我本來以爲使用cut()
會爲每個這些變量的離散係數相同的水平(收入和日誌收入),因爲日誌是一個單調函數。所以這裏右邊的兩列應該是平等的,但這似乎不會發生。這是怎麼回事?
> 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
編輯: @尼古拉的評論解釋了問題的根源。似乎在cut
的文檔中,「等長間隔」是指連續參數空間中間隔的長度。我最初解釋爲「等長間隔」意味着分配給每個剪輯(在輸出上)的元素數量是相等的(而不是輸入)。
是否有一個函數可以完成我所描述的功能? - 每個輸出級別的元素數量是否相等?等效地,newfunc(realinc)
和newfunc(logrealinc)
的等級是相等的?
'log'不是線性轉換。假設'x'在1和5之間是均勻分佈的。你是否期望'log(x)'在'log(1)'和'log(5)'之間均勻分佈?在你的例子中,嘗試'hist(new $ realinc)'和'hist(new $ logrealinc)'看看它們有什麼不同。 'cut'只是以基本不變的間隔切割整個範圍;一個元素可以很好地落入一個區間,並且它的日誌可以進入另一個區域 – nicola
@nicola謝謝,這是有幫助的。考慮到這一點,我已經更新了這個問題。 – Hatshepsut
您可以搜索拆分向量等分塊 – chinsoon12