[英]Error when binning data using `cut` in R
我正在嘗試將值介於1到100,000之間的變量按10,000分為十組。 我正在使用以下代碼並出現錯誤。
cut(x, breaks = quantile(x, probs=seq(0, 100000, 10000)), include.lowest = TRUE)
我究竟做錯了什么?
好吧,起初我認為這是一個錯字,但經過評論中的一些討論后,我決定寫一個答案。
誤差發生在quantile
,因為probs
應該在0到1之間(讀量為?quantile
)。
您似乎對以下兩個感到困惑:
cut(x, breaks = seq(0, 100000, 10000), include.lowest = TRUE)
cut(x, breaks = quantile(x, prob = seq(0, 1, 0.1)), include.lowest = TRUE)
正如我所說,它們將給出不同的結果,尤其是當您的數據分布不均勻時。
作為一個代表性示例,請考慮非均勻分布的數據,例如Beta分布:
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
注意, b2
和b1
之間的差異很大。 您可以檢查(經驗)分位數圖:
plot(b1, b2); abline(0, 1)
您將看到點與線的偏離很大。
在上面, b1
給出統一的bin單元,而b2
給出參差不齊的bin單元。 現在考慮垃圾箱計數:
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
你看到區別了嗎? 如果我們按分位數放置斷點,則將對箱進行統一計數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.