Hiển thị dữ liệu theo chiều dọc với kết quả nhị phân


8

Đối với dữ liệu theo chiều dọc với kết quả bằng số, tôi có thể sử dụng các lô spaghetti để trực quan hóa dữ liệu. Ví dụ: một cái gì đó như thế này (lấy từ trang thống kê UCLA):

tolerance<-read.table("http://www.ats.ucla.edu/stat/r/faq/tolpp.csv",sep=",", header=T)
head(tolerance, n=10)
interaction.plot(tolerance$time, tolerance$id, tolerance$tolerance, 
                 xlab="time", ylab="Tolerance",  legend=F)

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

Nhưng nếu kết quả của tôi là nhị phân 0 hoặc 1 thì sao? Ví dụ: trong dữ liệu "ohio" trong R, biến "resp" nhị phân chỉ ra sự hiện diện của bệnh hô hấp:

library(geepack)
ohio2 <- ohio[2049:2148,]
head(ohio2, n=12)
      resp  id age smoke
 2049    1 512  -2     1
 2050    0 512  -1     1
 2051    0 512   0     1
 2052    0 512   1     1
 2053    1 513  -2     1
 2054    0 513  -1     1
 2055    0 513   0     1
 2056    1 513   1     1
 2057    1 514  -2     1
 2058    0 514  -1     1
 2059    0 514   0     1
 2060    1 514   1     1

interaction.plot(ohio2$age+9, ohio2$id, ohio2$resp, 
                 xlab="age", ylab="Wheeze status", legend=F)

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

Cốt truyện spaghetti cho một con số đẹp, nhưng không nhiều thông tin và không cho tôi biết nhiều. Điều gì sẽ là một cách phù hợp để hình dung loại dữ liệu này? Có lẽ một cái gì đó bao gồm một giá trị xác suất trên trục y?


1
Vẽ sơ đồ trung bình của phản ứng so với tuổi là nơi tôi bắt đầu. Cấp độ tiếp theo có thể hiển thị các phân số chuyển tiếp 00, 01, 10, 11 ở mỗi độ tuổi.
Nick Cox

Phiên bản R hiện tại của tôi không có ohiodữ liệu (2.15) (ít nhất không phải là một phần của cơ sở). Có phải trong một phiên bản mới hơn hoặc thông qua một số thư viện khác? Đây sẽ là một ứng dụng thú vị cho bản đồ nhiệt với các cá nhân trên trục Y và kết quả trên trục X, sau đó vẽ 1 phản hồi là đen và 0 phản hồi là trắng. Sắp xếp ma trận sau đó sẽ cung cấp một cái nhìn tổng quan về mức độ phổ biến của các mẫu khác nhau.
Andy W

@Andy Tôi đã phải do thám xung quanh ... hóa ra nó nằm trong geepackgói hàng.
Penguin_Knight 13/11/13

Vâng, xin lỗi về điều đó. Tôi đã sửa đổi bài viết của tôi ở trên.
Emilia

vui lòng xem bài viết "Động lực từ dữ liệu theo chiều dọc đa biến" (cụ thể cho dữ liệu nhị phân) doi: 10.1155 / 2014/901838.

Câu trả lời:


14

Có khá nhiều cách để làm việc xung quanh nó.

Xáo trộn các biến nhẹ để làm mờ các dòng

Đầu tiên, vì cả tuổi tác và kết quả đều rời rạc, chúng ta có thể đủ khả năng để làm xáo trộn chúng để thể hiện một số xu hướng. Mẹo nhỏ là sử dụng độ trong suốt của màu đường kẻ để dễ dàng nhận ra mức độ chồng chéo.

library(geepack)
set.seed(6277)

ohio2 <- ohio[2049:2148,]
head(ohio2, n=12)

jitteredResp <- ohio2$resp + rnorm(100,0,0.02)   # $
jitteredAge  <- ohio2$age+9 + rnorm(100,0,0.02)  # $
age          <- ohio2$age+9                      # $
id           <- ohio2$id                         # $
wheeze       <- ohio2$resp                       # $

#### Variation 1 ####
plot(jitteredAge, jitteredResp, type="n", axes=F,
     xlab="Age to the nearest year, jittered",
     ylab="Wheeze status, jittered")
for (i in id){
  par(new=T)
  lines(age[id==i], jitteredResp[id==i], col="#FF000008", lwd=2)
}
axis(side=1, at=seq(7,10))
axis(side=2, at=c(0,1),  label=c("No", "Yes"))

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

Bắt mắt

Cũng có thể sử dụng loại đường cong này để hiển thị dòng chảy của các đối tượng. Nó giống như một sửa đổi của biểu đồ trên, nhưng sử dụng chiều rộng của đường để biểu thị tần số thay vì sử dụng chồng lấp.

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

Hiển thị số phận của từng trường hợp

Điều này nghe có vẻ phản trực giác, nhưng nếu bạn đặt các trường hợp ra một cách có hệ thống, nó sẽ hoạt động tốt như vậy để kể câu chuyện tổng hợp. Ở đây kết quả của mỗi trường hợp được hiển thị dọc theo một đường tham chiếu màu xám. Tôi đã không thêm một huyền thoại ở đó nhưng sử dụng legendlệnh nó có thể được thêm vào khá dễ dàng. Màu xanh là "resp = 0" và màu đỏ là "resp = 1". Thời gian (tuổi) được trải đều trên trục x. Dữ liệu của bạn được sắp xếp thuận tiện theo mẫu kết quả, vì vậy tôi không phải làm gì cả. Nếu chúng không được cài đặt trước, bạn sẽ phải sử dụng lệnh như dcasttrong gói reshape2để xoa bóp dữ liệu một chút.

#### Variation 2 ####
my.col             <- vector()
my.col[wheeze ==1] <- "#D7191C"
my.col[wheeze ==0] <- "#2C7BB6"

plot(age, id, type="n", frame=F, xlab="Age, year", ylab="", axes=F, xlim=c(7,10))
abline(h=id, col="#CCCCCC")
axis(side=1, at=seq(7,10))
mtext(side=2, line=1, "Individual cases")
points(age, id, col=my.col, pch=16)

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

Lập bảng

Hình dung không phải là lối thoát duy nhất. Vì sẽ chỉ có tối đa 16 mẫu khác nhau, bạn cũng có thể lập bảng cho chúng. Sử dụng +-để tạo các mẫu như + + + ++ - - -, sau đó cho mỗi mẫu này, đính kèm số lượng và tỷ lệ phần trăm. Điều này có thể hiển thị thông tin hiệu quả như nhau.

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.