Âm mưu tích lũy / tích lũy (hoặc trực quan hóa hình ảnh đường cong Lorenz)


11

Tôi không biết những âm mưu như vậy được gọi là gì và do đó tôi chỉ đặt cho câu hỏi này một tiêu đề ngu ngốc.

Hãy nói rằng tôi có một bộ dữ liệu theo thứ tự như sau

4253  4262  4270  4383  4394  4476  4635  ...

Mỗi số tương ứng với số lượng bài đăng mà một người dùng nhất định đã đóng góp cho một trang web. Tôi đang nghiên cứu thực nghiệm về hiện tượng "bất bình đẳng tham gia" như được định nghĩa ở đây .

Để dễ nắm bắt, tôi muốn tạo ra một cốt truyện cho phép người đọc nhanh chóng suy ra các câu như "10% người dùng đóng góp 50% dữ liệu". Nó có thể trông tương tự như bản phác thảo sơn khá tệ hại được thừa nhận này:

nhập mô tả hình ảnh ở đây

Tôi không biết nó được gọi như thế nào nên tôi không biết tìm ở đâu. Ngoài ra, nếu ai đó đã thực hiện R, điều đó thật tuyệt vời.


6
Câu hỏi được đặt rất tốt (và tôi thích bản phác thảo). Kiểm tra ecdftrong Rcho một sự khởi đầu. Thuật ngữ này là "hàm phân phối tích lũy theo kinh nghiệm." Bạn cũng có thể quan tâm đến "các ô xác suất" và "các ô QQ": chúng là các phiên bản của ECDF hiển thị dữ liệu trên các thang đo (phi tuyến) khác nhau.
whuber

7
Đường cong Lorenz: xem en.wikipedia.org/wiki/Lorenz_curve Dễ dàng tìm kiếm trong vòng tròn R.
Nick Cox

Tôi biết ecdfvà đã sử dụng nó trước đây, nhưng theo cách "cổ điển" mà trục x hiển thị số lượng bài đăng và trục y xác suất của chúng. Tôi không biết làm thế nào để làm một cái gì đó như trên.
wnstnsmth

3
@whuber Tôi nghĩ rằng "10% người dùng đóng góp 50% dữ liệu" là câu hỏi về đường cong Lorenz. Đường cong Lorenz là một ô PP.
Nick Cox

2
Có một cái nhìn vào gói ineq trong R cho điều đó.
Số liệu

Câu trả lời:


6

Nếu bạn muốn làm điều đó đơn giản với các Rlệnh cơ bản , thì các mã sau có thể giúp ích.

Lúc đầu bạn đọc dữ liệu.

person<-rep(1:7)
data<-c(4253, 4262, 4270, 4383, 4394, 4476, 4635)

Sau đó, bạn có thể thấy sự đóng góp của mỗi người dùng.

plot(person,data)
lines(person,data)

nhập mô tả hình ảnh ở đây

Bạn cũng có thể thấy hai, ba, bốn, ..., bảy người đầu tiên đóng góp bao nhiêu.

cdata<-cumsum(data)    
plot(person,cdata)
lines(person,cdata)

nhập mô tả hình ảnh ở đây

Cuối cùng, bạn có thể có được âm mưu mong muốn của mình (theo tỷ lệ theo cả hai trục) bằng các lệnh sau:

plot(person/max(person),cdata/max(cdata),xlab="Top-contributing users",ylab="Data",col="red")
lines(person/max(person),cdata/max(cdata),col="red")

nhập mô tả hình ảnh ở đây

Tôi đã dán nhãn các trục như bạn muốn. Nó có thể cung cấp cho bạn một cái nhìn rõ ràng về bao nhiêu phần trăm dữ liệu được đóng góp bởi một tỷ lệ nhất định của người.


3

Tôi tìm thấy một cách để nhanh chóng hình dung đường cong Lorenz ggplot2, dẫn đến một đồ họa thẩm mỹ hơn và dễ diễn giải hơn. Vì lý do sau này, tôi đã nhân đôi đường cong Lorenz trên đường chéo dẫn đến hình thức trực quan hơn, nếu bạn hỏi tôi. Nó cũng chứa các dòng chú thích sẽ tạo điều kiện thuận lợi cho việc giải thích cốt truyện (ví dụ: "5% người dùng đóng góp hàng đầu chiếm 50% dữ liệu"). Chú ý: Tìm vị trí phù hợp cho dòng chú thích sử dụng một heuristic khá ngu ngốc và có thể không hoạt động với một tập dữ liệu nhỏ hơn.

Đường cong Lorenz (đã sửa đổi)

Dữ liệu ví dụ:

data <- data.frame(lco = 
                     c(338L, 6317L, 79L, 36L, 3634L, 8633L, 3231L, 27L, 173L, 5934L, 
                       4476L, 1604L, 340L, 723L, 260L, 7008L, 7968L, 3854L, 4011L, 1596L, 
                       1428L, 587L, 1595L, 32L, 277L, 5201L, 133L, 407L, 676L, 1874L, 
                       1700L, 843L, 237L, 4270L, 2404L, 530L, 305L, 9344L, 720L, 1806L, 
                       35L, 790L, 1383L, 5522L, 178L, 75L, 6219L, 121L, 923L, 1123L, 
                       102L, 70L, 50L, 119L, 445L, 464L, 182L, 244L, 1358L, 7840L, 661L, 
                       70L, 132L, 634L, 4262L, 1872L, 345L, 11L, 28L, 284L, 626L, 1033L, 
                       26L, 798L, 13L, 480L, 44L, 339L, 259L, 312L, 262L, 67L, 1359L, 
                       1835L, 13L, 189L, 292L, 2152L, 215L, 39L, 1131L, 1323L, 700L, 
                       3271L, 1622L, 4669L, 125L, 281L, 277L, 232L, 1111L, 8669L, 7233L, 
                       9363L, 400L, 502L, 1425L, 904L, 2924L, 927L, 31L, 1132L, 200L, 
                       17L, 7602L, 12365L, 258L, 16L, 223L, 55L, 11L, 785L, 493L, 4L, 
                       1161L, 393L, 791L, 30L, 568L, 386L, 75L, 1882L, 674L, 29L, 4217L, 
                       332L, 103L, 332L, 30L, 168L, 277L, 176L, 49L, 19L, 76L, 144L, 
                       145L, 65L, 52L, 391L, 25L, 104L, 484L, 20L, 12L, 188L, 5677L, 
                       19L, 273L, 424L, 281L, 458L, 50L, 255L, 898L, 840L, 872L, 573L, 
                       874L, 8L, 35L, 235L, 22L, 229L, 158L, 59L, 147L, 544L, 24L, 325L, 
                       15L, 3L, 1531L, 1014L, 43L, 35L, 2176L, 934L, 253L, 69L, 784L, 
                       352L, 188L, 27L, 1516L, 322L, 1394L, 7686L, 13L, 812L, 349L, 
                       779L, 77L, 941L, 104L, 82L, 93L, 1206L, 24L, 6159L, 131L, 99L, 
                       1310L, 27L, 520L, 327L, 350L, 42L, 102L, 25L, 14L, 42L, 33L, 
                       469L, 177L, 119L, 64L, 75L, 190L, 82L, 82L, 473L, 51L, 9L, 49L, 
                       41L, 221L, 1778L, 4188L, 4L, 86L, 39L, 93L, 35L, 44L, 227L, 636L, 
                       589L, 332L, 22L, 15L, 50L, 147L, 32L, 134L, 133L, 629L, 168L, 
                       69L, 747L, 34L, 20L, 552L, 8L, 54L, 28L, 1437L, 83L, 3225L, 776L, 
                       784L, 247L, 33L, 40L, 368L, 104L, 420L, 357L, 9L, 164L, 7L, 227L, 
                       142L, 33L, 91L, 78L, 175L, 194L, 294L, 433L, 52L, 7L, 372L, 29L, 
                       220L, 371L, 375L, 233L, 12L, 35L, 795L, 35L, 43L, 50L, 57L, 32L, 
                       162L, 124L, 160L, 52L, 132L, 131L, 50L, 117L, 145L, 33L, 83L, 
                       33L, 123L, 43L, 27L, 91L, 25L, 2116L, 51L, 509L, 603L, 267L, 
                       10L, 10L, 51L, 6028L, 99L, 597L, 53L, 131L, 1084L, 1222L, 153L, 
                       70L, 746L, 437L, 82L, 299L, 1682L, 21L, 24L, 973L, 207L, 55L, 
                       116L, 47L, 48L, 149L, 100L, 690L, 129L, 80L, 1143L, 103L, 50L, 
                       242L, 708L, 316L, 83L, 61L, 15L, 203L, 435L, 474L, 47L, 718L, 
                       21L, 33L, 27L, 15L, 53L, 97L, 6L, 39L, 59L, 255L, 51L, 15L, 20L, 
                       514L, 74L, 20L, 319L, 14L, 14L, 45L, 36L, 625L, 5534L, 43L, 590L, 
                       43L, 29L, 233L, 135L, 174L, 20L, 335L, 106L, 230L, 64L, 3551L, 
                       524L, 72L, 44L, 16L, 98L, 37L, 62L, 390L, 83L, 28L, 3L, 63L, 
                       32L, 124L, 56L, 149L, 11L, 153L, 661L, 15L, 25L, 49L, 626L, 141L, 
                       38L, 23L, 123L, 530L, 47L, 6L, 18L, 222L, 391L, 71L, 75L, 234L, 
                       142L, 45L, 439L, 675L, 14L, 53L, 19L, 100L, 51L, 147L, 10L, 141L, 
                       979L, 97L, 330L, 112L, 71L, 4L, 9L, 124L, 141L, 145L, 302L, 122L, 
                       435L, 50L, 81L, 99L, 330L, 84L, 41L, 227L, 4L, 37L, 5L, 99L, 
                       210L, 7L, 183L, 67L, 98L, 157L, 96L, 150L, 22L, 288L, 391L, 188L, 
                       54L, 56L, 49L, 618L, 160L, 631L, 9L, 355L, 56L, 119L, 37L, 36L, 
                       153L, 110L, 126L, 335L, 121L, 80L, 113L, 62L, 97L, 22L, 72L, 
                       1742L, 1007L, 11L, 121L, 27L, 62L, 823L, 56L, 40L, 26L, 69L, 
                       120L, 516L, 11L, 146L, 245L, 174L, 1648L, 105L, 123L, 17L, 2565L, 
                       138L, 200L, 46L, 130L, 189L, 87L, 191L, 143L, 76L, 702L, 79L, 
                       67L, 166L, 3487L, 88L, 395L, 283L, 140L, 535L, 198L, 64L, 1033L, 
                       376L, 180L, 14L, 32L, 441L, 361L, 520L, 62L, 247L, 10L, 24L, 
                       721L, 176L, 164L, 33L, 44L, 12L, 30L, 13L, 157L, 122L, 161L, 
                       45L, 34L, 538L, 74L, 14L, 19L, 15L, 1714L, 437L, 16L, 12L, 130L, 
                       25L, 93L, 9L, 15L, 81L, 889L, 27L, 195L, 5L, 233L, 113L, 356L, 
                       51L, 146L, 6822L, 65L, 166L, 45L, 18L, 295L, 196L, 145L, 256L, 
                       14L, 8L, 89L, 32L, 20L, 239L, 68L, 63L, 21L, 102L, 158L, 1138L, 
                       48L, 113L, 144L, 83L, 93L, 3L, 1032L, 45L, 36L, 68L, 146L, 370L, 
                       25L, 10L, 290L, 858L, 19L, 17L, 64L, 42L, 38L, 711L, 144L, 58L, 
                       144L, 1736L, 188L, 38L, 58L, 91L, 255L, 58L, 307L, 4L, 9L, 60L, 
                       14L, 13L, 118L, 1549L, 108L, 483L, 34L, 1471L, 13L, 16L, 76L, 
                       163L, 147L, 75L, 520L, 4L, 59L, 73L, 32L, 24L, 656L, 16L, 2655L, 
                       38L, 20L, 1011L, 85L, 592L, 91L, 883L, 5174L, 42L, 17L, 88L, 
                       21L, 61L, 33L, 1726L, 46L, 387L, 920L, 120L, 134L, 72L, 144L, 
                       1603L, 646L, 45L, 282L, 56L, 19L, 41L, 69L, 151L, 632L, 47L, 
                       48L, 126L, 114L, 119L, 144L, 949L, 67L, 144L, 27L, 61L, 70L, 
                       287L, 64L, 323L, 27L, 149L, 1914L, 20L, 1077L, 21L, 70L, 59L, 
                       123L, 537L, 131L, 1226L, 2908L, 8L, 133L, 42L, 175L, 100L, 162L, 
                       494L, 414L, 2618L, 33L, 93L, 48L, 3676L, 553L, 705L, 58L, 268L, 
                       141L, 284L, 98L, 135L, 13L, 49L, 792L, 128L, 172L, 236L, 221L, 
                       596L, 35L, 241L, 10L, 193L, 189L, 26L, 27L, 47L, 100L, 398L, 
                       21L, 26L, 86L, 147L, 3639L, 161L, 60L, 106L, 111L, 42L, 11L, 
                       654L, 21L, 129L, 1152L, 224L, 49L, 12L, 22L, 73L, 207L, 165L, 
                       113L, 12L, 1224L, 177L, 6L, 390L, 2747L, 23L, 46L, 1166L, 805L, 
                       20L, 130L, 46L, 110L, 16L, 88L, 652L, 61L, 86L, 16L, 804L, 41L, 
                       4383L, 511L, 126L, 549L, 23L, 45L, 80L, 162L, 127L, 700L, 43L, 
                       147L, 102L, 84L, 67L, 57L, 30L, 55L, 274L, 314L, 847L, 203L, 
                       322L, 8350L, 101L, 10L, 122L, 54L, 120L, 10L, 22L, 327L, 234L, 
                       56L, 998L, 409L, 131L, 2163L, 81L, 19L, 6675L, 7L, 2182L, 1136L, 
                       71L, 15L, 286L, 133L, 132L, 37L, 144L, 28L, 392L, 870L, 312L, 
                       190L, 135L, 16L, 6L, 153L, 38L, 62L, 2710L, 36L, 61L, 37L, 88L, 
                       375L, 88L, 131L, 73L, 212L, 918L, 185L, 53L, 143L, 69L, 2231L, 
                       54L, 23L, 220L, 195L, 468L, 2009L, 364L, 54L, 277L, 1547L, 240L, 
                       1700L, 1533L, 374L, 363L, 35L, 97L, 19L, 87L, 67L, 22L, 267L, 
                       16L, 11L, 35L, 460L, 44L, 58L, 26L, 13L, 172L, 114L, 272L, 64L, 
                       254L, 49L, 440L, 329L, 48L, 93L, 10L, 70L, 17L, 120L, 5229L, 
                       118L, 133L, 43L, 2419L, 207L, 102L, 90L, 127L, 3939L, 14L, 5L, 
                       552L, 425L, 656L, 511L, 170L, 396L, 177L, 3680L, 111L, 21L, 320L, 
                       367L, 51L, 672L, 1675L, 59L, 91L, 281L, 113L, 19L, 37L, 65L, 
                       288L, 27L, 149L, 61L, 63L, 75L, 165L, 90L, 9L, 12L, 82L, 111L, 
                       157L))

Mã số:

# lorenz curve of user contribution
library(ineq)
library(ggplot2)
library(scales)
library(grid)
# compute lorenz curve
lcolc <- Lc(data$lco)
# bring lorenz curve in another format easily readable by ggplot2
# namely reverse the L column so that lorenz curve is mirrored on diagonal
# p stays p (the diagonal)
# Uprob contains the indices of the L's, but we need percentiles
lcdf <- data.frame(L = rev(1-lcolc$L), p = lcolc$p, Uprob = c(1:length(lcolc$L)/length(lcolc$L)))

# basic plot with the diagonal line and the L line
p <- ggplot(lcdf, aes(x = Uprob, y = L)) + geom_line(colour = hcl(h=15, l=65, c=100)) + geom_line(aes(x = p, y = p))
# compute annotation lines at 50 percent L (uses a heuristic)
index  <- which(lcdf$L >= 0.499 & lcdf$L <= 0.501)[1]

ypos <- lcdf$L[index]
yposs <- c(0,ypos)
xpos <- index/length(lcdf$L)
xposs <- c(0,xpos)
ypositions <- data.frame(x = xposs, y = c(ypos,ypos))
xpositions <- data.frame(x = c(xpos,xpos), y = yposs)
# add annotation line
p <- p + geom_line(data = ypositions, aes(x = x, y = y), 
                   linetype="dashed") + geom_line(data = xpositions, aes(x = x, y = y), 
                                                  linetype="dashed") 
# set axes and labels (namely insert custom breaks in scales)
p <- p + scale_x_continuous(breaks=c(0, xpos,0.25,0.5,0.75,1),
                            labels = percent_format()) + scale_y_continuous(
                                                                            labels = percent_format())
# add minimal theme
p <- p + theme_minimal() + xlab("Percentage of objects") + ylab("Percentage of events") 
# customize theme
p <- p + theme(plot.margin = unit(c(0.5,1,1,1), "cm"), 
               axis.title.x = element_text(vjust=-1),
               axis.title.y = element_text(angle=90, vjust=0),
               panel.grid.minor = element_blank(),
               plot.background = element_rect(fill = rgb(0.99,0.99,0.99), linetype=0)) 
# print plot
p

3
Trong văn học, tôi biết rằng quy ước đa số cho đến nay là mặt trái của điều đó ở đây, tức là để trao đổi các trục sao cho đường cong lồi xuống. Bất bình đẳng là một từ khóa ở đây đặc biệt là để tìm công việc chi tiết hơn, đặc biệt là tóm tắt đường cong này, ví dụ như trong nghiên cứu về thu nhập trong kinh tế.
Nick Cox

-2

Hai cách khác để làm điều này là gần đây tôi đã làm việc này cho các thử nghiệm lâm sàng vắc-xin:

1.Sử dụng tiếng Hy Lạp Ecdf. Điều này là thẳng về phía trước và vẽ nó ra mặc dù hơi khó để tìm ra chi tiết về việc thay đổi các yếu tố khác nhau của biểu đồ.

2. Phân phối tích lũy và sau đó tích lũy 1 là tích lũy ngược. Vẽ sơ đồ ngược bằng ggplot2 bằng geom_step nếu bạn thích một hàm bước trong biểu đồ. Hàm bên dưới sẽ sử dụng ecdf từ cơ sở r để cung cấp cho bạn phân phối tích lũy và sau đó tích lũy 1:

     rcdf <- function (x) {
     cdf <- ecdf(x)
     y <- cdf(x)
    xrcdf <- 1-y
      }

trong rcdf ở trên là một hàm do người dùng định nghĩa được xác định bằng ecdf.


Không phải vậy. Đường cong Lorenz không phải là ecdf hoặc bổ sung của nó. Hai trục cho đường cong Lorenz đều có xác suất tích lũy; trong trường hợp của ecdf chỉ có một.
Nick Cox

Câu trả lời của @wnstnsmth đưa ra một bộ dữ liệu và mã. Nếu bạn thử mã của mình trên dữ liệu của anh ấy, bạn sẽ nhận được các đối tượng khá khác nhau.
Nick Cox
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.