r - 绘制因子(分类数据)的相关矩阵的等价物?和混合类型?
问题描述
实际上有两个问题,一个比另一个更高级。
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)
解决方案
如果您想获得因子或混合类型的真正相关图,您还可以使用model.matrix
one-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)
推荐阅读
- android - 更改 Android 中活动或非活动选项卡的文本大小
- sql - 如何在两个值之间生成数字
- python - 双线性插值的错误图像
- java - Spring Webflux Mockito - 模拟 Webclient 调用的响应
- firebase - 如何在 Flutter Web 中启用 Firebase 电话验证?我尝试了很多方法,但似乎不起作用,需要将短信代码发送给用户
- python - 如何解决 CPU 随机数生成器似乎失败,禁用硬件随机数生成错误
- c# - getEventListeners 未在 PuppeteerSharp 中定义
- sql-server - 从格式化的 TSQL 语句中生成 0 或 0.00 NULL 的货币值
- pandas - 根据列名在seaborn中制作颜色
- node.js - 有条件地更新多个嵌套元素 mongodb