问题描述
我想在R中显示多个二元分布,而不是完整的多元分布。 vignette of the alluvial package中提供的以下代码使用冲积图显示了泰坦尼克号数据集的完整多变量分布(类别,性别,年龄,幸存者)。
require(dplyr)
require(alluvial)
tit <- as.data.frame(Titanic,stringsAsFactors = FALSE)
head(tit)
alluvial(tit[,1:4],freq=tit$Freq,col = ifelse(tit$Survived == "Yes","orange","grey"),border = ifelse(tit$Survived == "Yes",hide = tit$Freq == 0,cex = 0.7)
我想用单一的冲积图可视化双变量分布(分类,性别),(性别,年龄)和(年龄,存活率),而不是完整的多元分布。这三个二元分布的计数是
tit%>%group_by(Class,Sex)%>%summarize(Freq=sum(Freq))%>%ungroup()
tit%>%group_by(Sex,Age)%>%summarize(Freq=sum(Freq))%>%ungroup()
tit%>%group_by(Age,Survived)%>%summarize(Freq=sum(Freq))%>%ungroup()
您知道使用冲积软件包或替代软件包是否可行?
对于此特定示例,使用冲积图似乎令人怀疑。但是,当对变量进行排序时以及当我们要可视化(var1,var2),(var2,var3),...的双变量分布时,这完全有意义。
解决方法
可以一起设置三个冲积区,如下所示。
请注意,count
是dplyr
+ group_by
+ summarise
的{{1}}的紧凑版本。
ungroup
每当您修改library(dplyr)
library(alluvial)
tit <- as.data.frame(Titanic,stringsAsFactors = TRUE)
oldpar <- par(mfrow=c(1,3)) # set up alignment
with(count(tit,Class,Sex,wt = Freq),alluvial(Class,freq = n))
with(count(tit,Age,alluvial(Sex,Survived,alluvial(Age,freq = n))
par(oldpar) # reset par
时,这都是一个好习惯,因为这是一个通用选项,可能会影响代码的其他部分。