我有一个包含三个分类变量的数据集,我想在一张图中直观地显示所有三个变量之间的关系。有任何想法吗?
目前,我正在使用以下三个图形:
每张图都针对基线抑郁水平(轻度,中度,严重)。然后,在每个图表中,我查看治疗(0,1)与抑郁改善之间的关系(无,中等,严重)。
这3个图可以查看三向关系,但是有一种已知的方法可以处理一个图吗?
我有一个包含三个分类变量的数据集,我想在一张图中直观地显示所有三个变量之间的关系。有任何想法吗?
目前,我正在使用以下三个图形:
每张图都针对基线抑郁水平(轻度,中度,严重)。然后,在每个图表中,我查看治疗(0,1)与抑郁改善之间的关系(无,中等,严重)。
这3个图可以查看三向关系,但是有一种已知的方法可以处理一个图吗?
Answers:
这是一个有趣的数据集,试图以图形方式表示,部分原因是它并不是真正的分类。这三个三级因素都是有序的,它们之间可能存在相互作用(想必,这比较难mild
baseline
拥有substantial
improvement
-或可能substantial
improvement
意味着每个因素都不相同baseline
)。
具有多个变量,通常没有一个视图可以显示您可能关心的所有功能。有些因素将比其他因素更容易比较。我认为您的原始视图很好,并且可以参考Nick Cox的建议:删除重复的图例并使用有序的色阶。
如果您最感兴趣的是看到处理之间的差异,则可以通过使用堆积面积图而不是堆积条来强调变化。
通常,我通常对堆栈很谨慎,因为很难读取中间值,但是它确实加强了此数据的固定和性质。如果相关的话,它很容易读取和moderate
+ substantial
。我已经翻转了improvement
级别的顺序,以便频率越高越好。
如果不叠加,则等效为斜率图。
阅读每个级别都比较容易,但是却很难理解它们之间的相互作用。您必须记住,第三行直接取决于其他两个。
考虑到数据的序数性质,将improvement
值转换为数字分数可能会有所帮助,就像使用Likert数据所做的那样。例如,none=0
,moderate=1
,substantial=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 ) )
);
首先,这是我从提供的图表中读取的数据,这些数据适用于希望玩的人(如果愿意,可以进行实验)。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
这是原始设计的重做。原始数据的一个细节使事情变得简单:每种预测变量组合中的人数是相同的,因此绘制频率和绘制百分比是相同的。在这里,我们用双向条形图或表图设计分离条形图,而不是堆叠的(细分的,分段的)条形图。
图形中的许多细节就是细节。图形中的几个小弱点可能会破坏其有效性,而几个小改进也可能会有所帮助。
要说明:
这里不需要三个面板,它们具有重复的轴,图例和文本。
传奇总是诅咒和祝福,它迫使读者在思想上“来回走动”(或记住这个传奇,虽然没有那么吸引人,但无论多么容易)。条形旁边的内容翔实的文字更易于理解。
水果沙拉的颜色编码是可有可无的。似乎也很武断:“显着”的改进很重要,但我发现即使是强烈的黄色也还是柔和的颜色。但是当我们有文字可以解释时,我们不需要颜色。
尽管有些人会惊吓于违反Figure和Table之间的区别,但我们也可以显示频率。能够思考“此类别中的4个人”很有帮助。
像在原始图中一样,这里对垂直轴上的传统响应图表示敬意。
综上所述,很难在这些数据中看到很多结构。在这种情况下,也很难在(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))
我喜欢对这样的数据使用2级x轴。因此,单个图表的x轴类别可能是:
...按类别[无/中/实质]直方图条计数相同。
是不是 马赛克图专门为此目的设计的吗?
在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中的相应因子变量有序并调整其级别来更改标签的顺序(例如,这样,在右边缘该顺序“没有中等程度的实质性”)。
我建议使用马赛克图
mosaicplot(table(moz), sort = c(3,1,2), color = T)
我考虑的一种选择是使用并行集。某些比较将比其他比较容易,但是您仍然可以看到三个类别变量之间的关系。
这是泰坦尼克号生存数据的示例:
在R(给定您的标签)中,我使用了ggparallel来实现它。一些人在这里讨论了CV如何以其他方式实现它。
类似于nazareno上面发布的并行集,您可以使用冲积R包中可用的冲积图。http://www.r-bloggers.com/alluvial-diagrams/