从统计的角度来看,哪张是最好的图来显示列联表,通常通过卡方检验来分析列联表?它是躲避的条形图,堆叠的条形图,热图,轮廓图,抖动的散点图,多条线图还是其他东西?应该显示绝对值还是百分比?
编辑:或如@forecaster在评论中建议的那样,数字表本身就是一个简单的图,应该足够了。
从统计的角度来看,哪张是最好的图来显示列联表,通常通过卡方检验来分析列联表?它是躲避的条形图,堆叠的条形图,热图,轮廓图,抖动的散点图,多条线图还是其他东西?应该显示绝对值还是百分比?
编辑:或如@forecaster在评论中建议的那样,数字表本身就是一个简单的图,应该足够了。
Answers:
这里不会有一种千篇一律的解决方案。如果您有一个非常简单的表(例如),则最好仅显示该表。如果您想要一个实际的图形,那么马赛克图(如@xan所示)可能是一个不错的起点。还有其他一些与镶嵌图类似的选项,包括筛图,关联图和动态压力图(请参阅此处的问题:列联表的筛子/镶嵌图的替代品);Michael Friendly的书《可视化分类数据》将是该主题的一个很好的(基于SAS的)资源,而vcd包是一个在R中实现这些想法的很好的资源。
我认为,由于表具有更多的行和列,因此变得越来越难以使用。另一种可视化选项是执行/绘制对应关系分析。对应分析类似于在列联表的行和列上进行主成分分析。然后将两者与双图一起绘制。这是一个使用@xan答案的数据的基于R的示例:
library(ca)
tab = as.table(rbind(c(28, 4, 0, 56),
c(38, 5, 9, 10),
c( 6, 6, 14, 13) ))
names(dimnames(tab)) = c("activity", "period")
rownames(tab) = c("feed", "social", "travel")
colnames(tab) = c("morning", "noon", "afternoon", "evening")
tab
# period
# activity morning noon afternoon evening
# feed 28 4 0 56
# social 38 5 9 10
# travel 6 6 14 13
plot(ca(tab))
为了解释该图,相同类型的两个点越近,这两个行/列轮廓越相似。而且,不同类型的两个点越近,表示相交的像元中的概率质量就越大。
factor(vs)
)只有两个层次;您至少需要三个。尝试ttt = with(mtcars, table(factor(gear), factor(cyl))); plot(ca(ttt))
。
ca
对象中获取代码,因此我从头开始对其进行了编码。除非我弄错了,否则您将对行c(1,3,2)
和列进行重新排序c(4,1,3,2)
。完成此操作后,我不确定应该在这里看到什么。你有什么考虑?
不同的视觉效果会更好地突出显示不同的功能,但是马赛克图对于一般视图来说效果很好(检查是否突出)。也许这就是您所躲避的条形图的意思。像大多数选项一样,它们不是对称的,因为它们在一个维度上表示相对频率要好于另一个维度。一个不错的功能是边际频率也被表示出来。
我同意“最佳”情节并不独立于数据集,读者群和目的而存在。对于两个测得的变量,散点图可以说是一种设计,除了特定目的外,其他所有特征都没有改变,但是对于分类数据而言,没有这样的市场领导者是显而易见的。
我在这里的目的只是提及一种简单的方法,通常会对其进行重新发现或重新发明,但是即使在涉及统计图形的专着或教科书中,也经常会忽略它们。
首先是示例,涵盖与xan发布的数据相同的数据:
如果想要一个名称(通常如此),则这是一个双向条形图(在这种情况下)。我不会在这里列出其他术语,只是多重条形图是一种具有类似味道的常见替代方法。(我对“多个条形图”的反对是,“多个”并不排除非常常见的堆叠条形图或并排条形图,而对我而言,“双向”则更清楚地表示行和列的布局,尽管反过来,可能会举例说明。)
这种情节的利弊也很简单,但我会讲清楚。当我喜欢这种设计(至少可以追溯到1930年代)时,其他人可能想提出更尖锐的批评。
+1。即使是非技术人员也很容易理解这个想法。在此示例中,条高或条长编码频率。在其他示例中,他们可以对以任意方式计算的百分比,残差等进行编码。
+2。行和列的结构与表的结构匹配。您也可以添加数值。非常少量甚至隐含的零都是显而易见的,而其他设计(例如堆叠条形图,镶嵌图)并不总是如此。行和列标签通常比添加键或图例更有效,并带有所需的“来回”提示。因此,这种设计混合了图形和表格的想法,这似乎使某些读者感到困扰。相反,我认为数字与表格之间的强烈区别只是历史遗留,现在已经过时了,因为研究人员可以准备自己的文档,而不必依靠设计师,合成人和印刷商。
+3。原则上,对三向及更高设计的扩展很容易。将两个或多个变量作为复合变量放在任一轴或两个轴上,或给出此类图的数组。自然,设计越复杂,解释就越复杂。
+4。该设计显然允许在任一轴上使用序数变量。可以通过适当的阴影以及该轴上类别的顺序来表示顺序(例如)。轴上的类别顺序可以根据其含义确定,也可以根据频率更好地确定;根据文本标签的字母顺序可能是默认设置,但绝不应视为唯一的选择。
-1。通过一般性的设计,绘图在显示某些类型的关系时可能效率较低。特别是,马赛克图可以使对独立性的偏离非常清楚。相反,当分类变量之间的关系复杂或不清楚时,通常没有一个图形比该弱事实更能显示更多。
-2。在某些方面,该设计会为每个交叉组合留出空间,而无论其是否发生或频繁发生,都无法充分利用空间。这是被视为美德的同一原则的恶习。上面的特定设计在空间类别上均等,而与频率无关;牺牲常常牺牲可读的边际标签,我非常重视。在此示例中,文本标签都非常短,但这远非典型。
注意:xan的数据似乎只是被发明出来的,因此,我不会比其他答案尝试更多的解释了。但是,这里有一些家常便饭的智慧,这句话才是硬道理:对您而言,最好的设计是可以最好地传达给您和您的读者的,您所关心的一些真实数据的结构。
其他例子包括
tabplot
来自SSC。钢筋的高度必定是最高或最长钢筋的高度的一部分。可用空间取决于显示多少行。用户可以覆盖默认的间隙大小,但是会冒着相互接触或遮挡的风险。如果柱形既可以是负数也可以是正数,那么事情就变得不那么容易了。我想其他任何程序都会受到相同的约束。简而言之,不触摸的条表示空白!
为了补充@gung和@xan的答案,下面是vcd
在R中使用的镶嵌图和关联图的示例。
> tab
period
activity morning noon afternoon evening
feed 28 4 0 56
social 38 5 9 10
travel 6 6 14 13
要获取地块:
require(vcd)
mosaic(tab, shade=T, legend=T)
assoc(tab, shade=T, legend=T)
两者都直观地显示出与预期频率的偏离...默认值是相互独立的模型,但是可以通过参数将其更改(例如,如果有明确的响应变量,则可以更改为联合独立)expected
。
也可以看看: