首页 > 解决方案 > 绘制因子(分类数据)的相关矩阵的等价物?和混合类型?

问题描述

实际上有两个问题,一个比另一个更高级。

Q1:我正在寻找一种类似corrplot()但可以处理因素的方法。

我最初尝试使用chisq.test()then 计算p 值Cramer's V作为相关性,但有太多列无法计算。所以谁能告诉我是否有一种快速的方法来创建一个“corrplot”,每个单元格都包含Cramer's V的值,而颜色由p-value呈现。或任何其他类似的情节。

关于Cramer's V,假设tbl是一个二维因子数据框。

chi2 <- chisq.test(tbl, correct=F)
Cramer_V <- sqrt(chi2$/nrow(tbl)) 

我准备了一个包含以下因素的测试数据框:

df <- data.frame(
group = c('A', 'A', 'A', 'A', 'A', 'B', 'C'),
student = c('01', '01', '01', '02', '02', '01', '02'),
exam_pass = c('Y', 'N', 'Y', 'N', 'Y', 'Y', 'N'),
subject = c('Math', 'Science', 'Japanese', 'Math', 'Science', 'Japanese', 'Math')
) 

Q2:然后我想计算混合类型数据帧上的相关/关联矩阵,例如:

df <- data.frame(
group = c('A', 'A', 'A', 'A', 'A', 'B', 'C'),
student = c('01', '01', '01', '02', '02', '01', '02'),
exam_pass = c('Y', 'N', 'Y', 'N', 'Y', 'Y', 'N'),
subject = c('Math', 'Science', 'Japanese', 'Math', 'Science', 'Japanese', 'Math')
) 
df$group <- factor(df$group, levels = c('A', 'B', 'C'), ordered = T)
df$student <- as.integer(df$student)

标签: rplotstatisticscorrelationchi-squared

解决方案


如果您想获得因子或混合类型的真正相关图,您还可以使用model.matrixone-hot 对所有非数字变量进行编码。这与计算 Cramér 的 V 完全不同,因为它会将您的因子视为单独的变量,就像许多回归模型一样。

然后,您可以使用您最喜欢的相关图库。我个人喜欢ggcorrplot它的ggplot2兼容性。

这是您的数据集的示例:

library(ggcorrplot)
model.matrix(~0+., data=df) %>% 
  cor(use="pairwise.complete.obs") %>% 
  ggcorrplot(show.diag = F, type="lower", lab=TRUE, lab_size=2)

在此处输入图像描述


推荐阅读