R计算因子变量相关性时cor函数报'x' must be numeric错误求助
报错原因
cor()是R基础包中用于计算相关性的函数,仅支持数值型输入。你当前数据集的所有变量都是因子类型,没有转换为数值直接传入函数,就会触发'x' must be numeric的报错。
解决方案1:变量为有序分类时,计算Kendall秩相关
如果你的因子存在明确的等级顺序(比如age的child < youngadult < adult、IMD的Q1到Q5是从低到高的分位),可以先将因子转换为对应的秩次数值,再计算Kendall相关:
# 批量将所有因子转换为数值 data_num <- as.data.frame(lapply(data, function(col) as.integer(col))) # 计算Kendall相关矩阵 cor_res <- cor(data_num, use = "complete.obs", method = "kendall") print(cor_res)
解决方案2:变量为无序分类时,计算Cramer's V关联度
如果你的因子没有等级顺序(比如gender的f/m、mutation的a/b/c/d/e),Kendall相关不适用,应该使用针对无序分类变量的Cramer's V指标衡量关联强度:
# 先安装依赖包(仅第一次运行需要) install.packages("rcompanion") library(rcompanion) # 批量生成所有变量两两的Cramer's V矩阵 vars <- colnames(data) cramer_mat <- matrix(1, nrow = length(vars), ncol = length(vars), dimnames = list(vars, vars)) for (i in seq_along(vars)) { for (j in seq_along(vars)) { if (i < j) { cv <- cramerV(data[[vars[i]]], data[[vars[j]]], verbose = FALSE) cramer_mat[i, j] <- cramer_mat[j, i] <- cv } } } print(cramer_mat)
内容的提问来源于stack exchange,提问作者skpak
相关产品推荐
相关产品推荐

