Data-Visualization
用二進制結果可視化縱向數據
對於具有數值結果的縱向數據,我可以使用意大利麵條圖來可視化數據。例如這樣的事情(取自 UCLA Stats 網站):
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)
但是如果我的結果是二進制 0 或 1 怎麼辦?例如,在 R 中的“ohio”數據中,二進制“resp”變量表示存在呼吸道疾病:
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)
意大利麵條情節給出了一個不錯的數字,但信息量不是很大,也沒有告訴我太多。什麼是可視化此類數據的合適方法?也許在 y 軸上包含概率值的東西?
有很多方法可以解決它。
輕輕抖動變量以將線條分開
首先,由於年齡和結果都非常離散,我們可以稍微抖動它們以顯示一些趨勢。訣竅是在線條顏色中使用透明度,以便更容易辨別重疊的大小。
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"))
變得花哨
也可以使用這種曲線來顯示對象的流動。這就像對上圖的修改,但使用線的寬度來表示頻率,而不是使用重疊。
顯示每個案件的命運
這聽起來可能違反直覺,但是如果您以系統的方式列出案例,那麼講述匯總的故事同樣有效。在這裡,每個案例的結果都沿灰色參考線顯示。我沒有在那裡添加圖例,但是使用
legend
命令可以很容易地添加它。藍色是“resp = 0”,紅色是“resp = 1”。時間(年齡)分佈在 x 軸上。您的數據可以方便地按結果模式進行排序,所以我不需要做任何事情。如果它們沒有預先排序,則必須使用dcast
包reshape2
中的命令來稍微處理一下數據。#### 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)
製表
可視化並不是唯一的出路。由於最多只有 16 種不同的模式,因此您也可以將它們製成表格。使用
+
和-
創建類似+ + + +
和的模式+ - - -
,然後為這些模式中的每一個附加計數和百分比。這可以同樣有效地顯示信息。