您如何可视化3个类别变量之间的关系?


21

我有一个包含三个分类变量的数据集,我想在一张图中直观地显示所有三个变量之间的关系。有任何想法吗?

目前,我正在使用以下三个图形: 在此处输入图片说明

每张图都针对基线抑郁水平(轻度,中度,严重)。然后,在每个图表中,我查看治疗(0,1)与抑郁改善之间的关系(无,中等,严重)。

这3个图可以查看三向关系,但是有一种已知的方法可以处理一个图吗?


4
发布数据会让人们玩。
尼克·考克斯

1
您有3个基线类别,2个治疗类别和3个抑郁症结局。鉴于最后。每种凹陷类型的比例都可以在三角形(三线性,三元)图中以6个点显示。
Nick Cox

4
这些图有什么问题?
Aksakal,2015年

您可以按照@NickCox的要求提供数据吗?我收集的只有18个数字。
gung-恢复莫妮卡

Answers:


12

这是一个有趣的数据集,试图以图形方式表示,部分原因是它并不是真正的分类。这三个三级因素都是有序的,它们之间可能存在相互作用(想必,这比较难mild baseline拥有substantial improvement-或可能substantial improvement意味着每个因素都不相同baseline)。

具有多个变量,通常没有一个视图可以显示您可能关心的所有功能。有些因素将比其他因素更容易比较。我认为您的原始视图很好,并且可以参考Nick Cox的建议:删除重复的图例并使用有序的色阶。

如果您最感兴趣的是看到处理之间的差异,则可以通过使用堆积面积图而不是堆积条来强调变化。

在此处输入图片说明

通常,我通常对堆栈很谨慎,因为很难读取中间值,但是它确实加强了此数据的固定和性质。如果相关的话,它很容易读取和moderate+ substantial。我已经翻转了improvement级别的顺序,以便频率越高越好。

如果不叠加,则等效为斜率图。

在此处输入图片说明

阅读每个级别都比较容易,但是却很难理解它们之间的相互作用。您必须记住,第三行直接取决于其他两个。

考虑到数据的序数性质,将improvement值转换为数字分数可能会有所帮助,就像使用Likert数据所做的那样。例如,none=0moderate=1substantial=2。然后,您可以以连续比例绘制该变量的图形。缺点是您必须找到合理的评分(例如,0、1和5可能是更真实的表示)。

在此处输入图片说明

Colophon:这些图是使用JMP软件包(我帮助开发)中的Graph Builder功能绘制的。尽管是交互式创建的,但例如,没有颜色自定义的区域图脚本是:

Graph Builder(
    Graph Spacing( 15 ),
    Variables( X( :treatment ), Y( :frequency ),
        Group X( :baseline ), Overlay( :improvement )
    ),
    Elements( Area( X, Y ) )
);

2
+1。这里有一些很棒的主意。尽管我对堆栈很不满意,但我认为第一个图效果最好。它带来了有趣的交互作用:处理1总是产生更多的实质性改善实例,而没有更多的实质性改善实例!
Nick Cox

很棒的帖子。无论如何,有人可以构建您在R中显示的第一张图吗?我已经有一段时间没有使用JMP了。
亚历杭德罗·奥乔亚

1
@AlejandroOchoa ggplot具有区域几何。请参阅使用ggplot2绘制堆积面积图
xan 2015年

10

首先,这是我从提供的图表中读取的数据,这些数据适用于希望玩的人(如果愿意,可以进行实验)。NB一对一错误肯定是可能的,总错误也可能。

    improvement  treatment   baseline   frequency  
           none          0       mild          5  
       moderate          0       mild         41  
    substantial          0       mild          4  
           none          1       mild         19  
       moderate          1       mild         19  
    substantial          1       mild         12  
           none          0   moderate         19  
       moderate          0   moderate         24  
    substantial          0   moderate          7  
           none          1   moderate         20  
       moderate          1   moderate         14  
    substantial          1   moderate         16  
           none          0     severe          7  
       moderate          0     severe         21  
    substantial          0     severe         22  
           none          1     severe         12  
       moderate          1     severe         15  
    substantial          1     severe         23  

这是原始设计的重做。原始数据的一个细节使事情变得简单:每种预测变量组合中的人数是相同的,因此绘制频率和绘制百分比是相同的。在这里,我们用双向条形图或表图设计分离条形图,而不是堆叠的(细分的,分段的)条形图。

图形中的许多细节就是细节。图形中的几个小弱点可能会破坏其有效性,而几个小改进也可能会有所帮助。

在此处输入图片说明

要说明:

  1. 这里不需要三个面板,它们具有重复的轴,图例和文本。

  2. 传奇总是诅咒和祝福,它迫使读者在思想上“来回走动”(或记住这个传奇,虽然没有那么吸引人,但无论多么容易)。条形旁边的内容翔实的文字更易于理解。

  3. 水果沙拉的颜色编码是可有可无的。似乎也很武断:“显着”的改进很重要,但我发现即使是强烈的黄色也还是柔和的颜色。但是当我们有文字可以解释时,我们不需要颜色。

  4. 尽管有些人会惊吓于违反Figure和Table之间的区别,但我们也可以显示频率。能够思考“此类别中的4个人”很有帮助。

  5. 像在原始图中一样,这里对垂直轴上的传统响应图表示敬意。

综上所述,很难在这些数据中看到很多结构。在这种情况下,也很难在(a)没有太多结构的数据和(b)图形设计的弱点之间分担责任,这些缺点不仅用于选择预测变量,还可能用于交互。治疗似乎没有基线状态那么重要。但是,如果基准是“温和的”,那么“实质性”改进的范围有多大?当对心理健康数据的研究当然不是专长时,我就制止了自己的愚弄,尤其是如果这些数据被证明是假的。但是,如果它们是真实的,我们可以使用更大的样本量。(我们通常会这样说,但是您去了。)

编辑如果需要,图形自然可能会因序数配色方案而变得复杂:

在此处输入图片说明

记录:这些图形使用Stata代码,包括我自己的程序,tabplot可以使用下载ssc inst tabplot

tabplot improvement group [w=frequency] , showval ///
xmla(1.5 "mild" 3.5 "moderate" 5.5 "severe", noticks labgap(*4) labsize(medsmall)) ///
xla(1 "0" 2 "1" 3 "0" 4 "1" 5 "0" 6 "1") ///
xtitle(baseline and treatment) xsc(titlegap(*4)) bfcolor(emerald*0.2)

tabplot improvement group [w=frequency] , showval ///
xmla(1.5 "mild" 3.5 "moderate" 5.5 "severe", noticks labgap(*4) labsize(medsmall)) ///
xla(1 "0" 2 "1" 3 "0" 4 "1" 5 "0" 6 "1") ///
xtitle(baseline and treatment) xsc(titlegap(*2)) ///
sep(improvement2) bar3(bfcolor(emerald*0.2)) bar2(bfcolor(emerald*0.6)) ///
bar1(bfcolor(emerald)) barall(blcolor(green)) 

无论如何,您是否可以使用反映数据序数性质的配色方案上传图形?您还使用了什么软件来创建视觉效果?
亚历杭德罗·奥乔亚

这些都是非常漂亮的情节
Shadowtalker,2015年

4

我喜欢对这样的数据使用2级x轴。因此,单个图表的x轴类别可能是:

  • 治疗= 0,基线=轻度
  • 治疗= 0,基线=中度
  • 治疗= 0,基线=严重
  • 治疗= 1,基线=轻度
  • 处理= 1,基准=中度
  • 治疗= 1,基线=严重

...按类别[无/中/实质]直方图条计数相同。


+1。我同意我的回答中所体现的主要思想。我无法说出我的条形图设计与您想象的接近程度。
Nick Cox

谢谢,您的图表看起来很棒。您是否尝试将处理0/1作为外部类别,将Baseline = Mild / Moderate / Severe作为更接近x轴的类别进行查看?我认为,如果以这种方式提出,则会看到更清晰的模式-在治疗= 0内,随着基线从轻度/中度/重度上升,“显着”的改善标准稳定增长。而且您会在治疗= 1中看到相同的模式(程度较小)。通常,我将带有较少类别(例如此处的处理)的变量放在外面。但是也许您已经这样看过了。
Max Power

我没有尝试其他方法,但我确实想过,研究人员可能最想比较给定基线的治疗效果,这比我做起来更容易。
尼克·考克斯

这对我来说很有意义。
Max Power

4

是不是 马赛克图专门为此目的设计的吗?

在R中就像

library(vcd)
d = read.table("data.dat", header=TRUE)
tab = xtabs(frequency ~ treatment+baseline+improvement, data=d)
mosaic(data=tab,~ treatment+baseline+improvement, shade=TRUE, cex=2.5)

每个分类变量都移到正方形的一个边缘,该边缘由其标签细分。(因此,如果仅将每个边缘细分为一个级别,则最多可以表示4个类别变量。恕我直言,超过3个则变得混乱且难以解释)。矩形的大小与频率成正比。这是镶嵌图背后的主要思想,并且在此答案和PawełKleka的答案中是相同的。

区别在于用于此类绘图的特定R包提供的矩形和“精美”布局。从PawełKleka的答案中可以看出,该graphics包将上边缘细分为2个级别,而不是使用右边缘。我将vcd包与默认选项一起使用,以便颜色指示变量之间的关联程度。灰色表示数据与变量独立性一致(您不能拒绝其假设)。蓝色表示“ 0”和“ 1”治疗的“严重”基线与“显着”改善之间存在正相关。(惊讶,令人惊讶!我将其翻译为:如果您患有严重的抑郁症,则无论是否接受治疗,您都可能会好转很多。

人们可以根据自己的需要调整地块,例如,在这里。该软件包也有几个小插曲,例如Google的“ vcd马赛克示例”。开头引用的Wikipedia文章还解释了如何构建这种情节和其背后的直觉。

在此处输入图片说明

当你比较我的照片与帕维尔Kleka的答案画面,它不是物质,是“治疗”是对每一幅画面的左侧边缘。您可以通过更改代码的最后一行轻松更改边缘位置,并根据需要调整布局。常见的做法是,最重要的变量或标签数量最少的变量向左移动。您还可以通过使R中的相应因子变量有序并调整其级别来更改标签的顺序(例如,这样,在右边缘该顺序“没有中等程度的实质性”)。


在镶嵌图上写两个答案时。如果你们每个人都在情节上显示什么以及为什么有帮助,这会很有帮助,尤其是因为情节有很大不同。
Nick Cox

@NickCox这个人肯定看起来与其他人不同。它们的显示效果几乎不一样
Shadowtalker,2015年

它们都在y轴上进行了处理。他们的支持者将是金子,这是对每种展示方式的优缺点的评论。
尼克·考克斯

感谢您扩大答案。我认为这里的兴趣可能在于比较给定的治疗和基线的反应。我自然同意您可以修改哪个变量在哪里,但是您是否尝试了其他可能性,哪个效果最好?在这里查看响应时,读者必须同时比较两行块。
尼克·考克斯

@Nick Cox感谢您的评论。这是唯一促使我扩展的东西。我并没有尝试其他的可能性。实际上,我认为,如果问题的作者认为这种情节有用,应该尝试一切,然后为社区发布并解释结果。顺便说一句,我并不是说这种情节比其他情节要好。关键是:它是专门为分类变量设计的,用于可视化独立性和/或独立性。
2015年

3

我建议使用马赛克图

mosaicplot(table(moz), sort = c(3,1,2), color = T)

mosaicplot()


在镶嵌图上写两个答案时。如果你们每个人都在情节上显示什么以及为什么有帮助,这会很有帮助,尤其是因为情节有很大不同。
Nick Cox

2

我考虑的一种选择是使用并行集。某些比较将比其他比较容易,但是您仍然可以看到三个类别变量之间的关系。

这是泰坦尼克号生存数据的示例:

这是泰坦尼克号生存数据的示例。

在R(给定您的标签)中,我使用了ggparallel来实现它。一些人在这里讨论了CV如何以其他方式实现它。


我很难想象这个。您有机会模拟一个例子吗?
Shadowtalker,2015年

图中的一条线的宽度与两类共现的频率成正比。对于原始问题的绘图中使用的数据,将有三个水平轴:基线抑郁,治疗和抑郁改善。在每个类别中,每个级别都有单独的区域。同伴链接在一起,宽度代表它们的出现频率。
nazareno'5

2

也可以使用以下简单的折线图传达信息:

在此处输入图片说明

改进以不同的线型显示,而基线组以颜色显示。如果需要,这些参数和x轴参数(此处处理)也可以互换。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.