如何更改马赛克图的调色板
How to change color palette of mosaic plot
我有以下数据和代码:
> mat <- matrix(c(120,230,84,70,130,83,13,26,18),3)
> dimnames(mat) <- list(c("good","fair","poor"),c("a","b","c"))
> mat
> mat
a b c
good 120 70 13
fair 230 130 26
poor 84 83 18
>
> chisq.test(mat)
Pearson's Chi-squared test
data: mat
X-squared = 11.411, df = 4, p-value = 0.02231
> library(vcd)
> mosaic(mat, shade=T)
卡方检验显示显着差异但看不到颜色,因为残差很小。残差较高时,可以看到颜色:
?mosaic 显示此信息:
highlighting_fill: color vector or palette function used for a highlighted variable, if any.
如何更改上图的填充颜色?
没有真正优雅的解决方案,但您可以使用 gpar
手动定义颜色
mosaic(mat, shade=T, colorize = T, gp = gpar(fill=matrix(c("red","blue","light green", "green", "black","red","brown","white","blue"), 3, 3)))
下一步是用合理的颜色填充 gpar 中的矩阵。关于如何根据值分配色带,这里有一个非常好的 post。
默认情况下,vcd
中马赛克图的阴影使用截止值 2 和 4 作为 Friendly(1994, 建议的与每个单元格相关的残差的绝对值美国统计协会杂志, 89, 190-200)。这背后的想法是,如果模型拟合良好(由于残差的近似正态性),这些截止值应该与大约 5% 和 0.01% 交叉。然而,这些截止值对应于细胞的 个体 显着性,而卡方检验评估 整体 显着性。
有两种策略可以解决这个问题:(1) 由于 Friendly (1994) 阴影旨在带出偏差的 模式 而不是直接对应 significance,可以简单地将截止值修改为适用于给定 table 的较低值(例如,此处的 1 和 1.8)。 (2) 切换到最大绝对残差(而不是它们的平方和)的检验,以便所有在特定显着性水平(例如 10% 和 1%)下显着的单元格都可以被遮蔽。这两种策略都在 vcd
中实现,并在 ?shading_hcl
的示例中进行了说明(使用与您的 mat
具有非常相似属性的示例)。 Zeileis、Meyer、Hornik (2007) 对基本思想进行了解释。 "Residual-Based Shadings for Visualizing (Conditional) Independence"、计算和图形统计杂志、16(3),507-525。 doi:10.1198/106186007X237856
可以通过以下方式将策略 (1) 应用于您的数据:
mosaic(mat, gp = shading_hcl, gp_args = list(interpolate = c(1, 1.8)))
策略(2)实现为:
set.seed(403)
mosaic(mat, gp = shading_max)
我有以下数据和代码:
> mat <- matrix(c(120,230,84,70,130,83,13,26,18),3)
> dimnames(mat) <- list(c("good","fair","poor"),c("a","b","c"))
> mat
> mat
a b c
good 120 70 13
fair 230 130 26
poor 84 83 18
>
> chisq.test(mat)
Pearson's Chi-squared test
data: mat
X-squared = 11.411, df = 4, p-value = 0.02231
> library(vcd)
> mosaic(mat, shade=T)
卡方检验显示显着差异但看不到颜色,因为残差很小。残差较高时,可以看到颜色:
?mosaic 显示此信息:
highlighting_fill: color vector or palette function used for a highlighted variable, if any.
如何更改上图的填充颜色?
没有真正优雅的解决方案,但您可以使用 gpar
手动定义颜色mosaic(mat, shade=T, colorize = T, gp = gpar(fill=matrix(c("red","blue","light green", "green", "black","red","brown","white","blue"), 3, 3)))
下一步是用合理的颜色填充 gpar 中的矩阵。关于如何根据值分配色带,这里有一个非常好的 post。
默认情况下,vcd
中马赛克图的阴影使用截止值 2 和 4 作为 Friendly(1994, 建议的与每个单元格相关的残差的绝对值美国统计协会杂志, 89, 190-200)。这背后的想法是,如果模型拟合良好(由于残差的近似正态性),这些截止值应该与大约 5% 和 0.01% 交叉。然而,这些截止值对应于细胞的 个体 显着性,而卡方检验评估 整体 显着性。
有两种策略可以解决这个问题:(1) 由于 Friendly (1994) 阴影旨在带出偏差的 模式 而不是直接对应 significance,可以简单地将截止值修改为适用于给定 table 的较低值(例如,此处的 1 和 1.8)。 (2) 切换到最大绝对残差(而不是它们的平方和)的检验,以便所有在特定显着性水平(例如 10% 和 1%)下显着的单元格都可以被遮蔽。这两种策略都在 vcd
中实现,并在 ?shading_hcl
的示例中进行了说明(使用与您的 mat
具有非常相似属性的示例)。 Zeileis、Meyer、Hornik (2007) 对基本思想进行了解释。 "Residual-Based Shadings for Visualizing (Conditional) Independence"、计算和图形统计杂志、16(3),507-525。 doi:10.1198/106186007X237856
可以通过以下方式将策略 (1) 应用于您的数据:
mosaic(mat, gp = shading_hcl, gp_args = list(interpolate = c(1, 1.8)))
set.seed(403)
mosaic(mat, gp = shading_max)