在R语言中检验字符型变量与数值组的关系及数值变量对字符向量的影响
在R中检验字符型变量与数值变量的关联及数值变量对字符向量的影响
没问题,我来帮你搞定这两个R语言的统计检验任务!先从数据准备开始,一步步来~
1. 数据准备
先把你提供的样本数据转换成R可处理的数据框,我补了几个样本让示例更完整:
# 创建示例数据框 df <- data.frame( Sample_ID = c("TCGA.2J.AAB4.01", "TCGA.2J.AAB6.01", "TCGA.2J.AAB8.01", "TCGA.2J.AAB9.01", "TCGA.2J.AABF.01"), A = c(-0.2527, 1.2080, 0.7529, -0.3248, 0.1123), B = c(-1.2093, 0.4815, 0.7916, -0.7941, -0.5678), C = c(0.7556, -0.3242, 0.0596, -0.5940, 0.2345), D = c(-0.7071, -0.7088, -0.5287, 0.3325, -0.1234), E = c(-0.1310, 4.0856, 1.1315, -0.4385, 0.6789), F_PATHOLOGIC_TUMOR_STAGE = c("Stage IIB", "Stage IIA", "Stage IIB", "Stage IIB", "Stage III"), AJCC_TUMOR_PATHOLOGIC_PT = c("T2", "T3", "T3", "T3", "T4"), GRADE = c("G2", "G2", "G3", "G1", "G2"), PRIMARY_SITE = c("Other (please specify)", "Body of Pancreas", "Head of Pancreas", "Head of Pancreas", "Tail of Pancreas"), stringsAsFactors = FALSE ) # 查看数据结构,确认变量类型正确 str(df)
2. 任务一:检验字符型变量与数值组的关联关系
这里分两种常见场景处理:如果数值变量服从正态分布,用方差分析(ANOVA);如果不满足正态性,用Kruskal-Wallis秩和检验(非参数方法)。
2.1 单个字符型变量与所有数值变量的关联
比如我们先检验F_PATHOLOGIC_TUMOR_STAGE(肿瘤分期)和A-E这五个数值变量的关联:
方法1:方差分析(ANOVA)(正态分布场景)
# 循环检验每个数值变量与肿瘤分期的组间差异 for (num_var in c("A", "B", "C", "D", "E")) { # 构造公式 formula <- as.formula(paste(num_var, "~ F_PATHOLOGIC_TUMOR_STAGE")) # 运行ANOVA anova_result <- aov(formula, data = df) # 打印结果 cat("=== 检验", num_var, "与肿瘤分期的ANOVA结果 ===\n") print(summary(anova_result)) cat("\n") }
如果ANOVA的p值显著(通常以p<0.05为标准),说明该数值变量在不同肿瘤分期组间存在显著差异。
方法2:Kruskal-Wallis秩和检验(非正态分布场景)
如果数值变量不满足正态性,用非参数检验更稳妥:
for (num_var in c("A", "B", "C", "D", "E")) { kw_result <- kruskal.test(as.formula(paste(num_var, "~ F_PATHOLOGIC_TUMOR_STAGE")), data = df) cat("=== 检验", num_var, "与肿瘤分期的Kruskal-Wallis结果 ===\n") print(kw_result) cat("\n") }
2.2 所有字符型变量与单个数值变量的关联
如果你想反过来,比如检验所有字符型变量和数值变量E的关联,只需要调整循环对象:
# 定义所有字符型变量 char_vars <- c("F_PATHOLOGIC_TUMOR_STAGE", "AJCC_TUMOR_PATHOLOGIC_PT", "GRADE", "PRIMARY_SITE") target_num_var <- "E" for (char_var in char_vars) { formula <- as.formula(paste(target_num_var, "~", char_var)) anova_result <- aov(formula, data = df) cat("=== 检验", target_num_var, "与", char_var, "的ANOVA结果 ===\n") print(summary(anova_result)) cat("\n") }
3. 任务二:检验特定数值变量对字符向量的影响
字符向量属于分类变量,我们需要用逻辑回归(二分类场景)或多分类逻辑回归(多分类场景)来检验数值变量对分类结果的影响。
3.1 二分类字符变量的情况(示例:GRADE高低级分组)
先把GRADE转换成二分类变量(G1/G2为低级别,G3为高级别):
# 创建二分类Grade变量 df$GRADE_binary <- ifelse(df$GRADE == "G3", "High", "Low") # 检验数值变量E对二分类GRADE的影响 logit_model <- glm(GRADE_binary ~ E, data = df, family = binomial(link = "logit")) summary(logit_model)
看回归结果中E的p值,如果显著,说明数值变量E对GRADE的高低分组有显著影响。
3.2 多分类字符变量的情况(示例:PRIMARY_SITE多分类)
对于多分类的字符变量,我们需要用nnet包的multinom函数:
# 安装并加载nnet包(如果没安装的话) # install.packages("nnet") library(nnet) # 设置参考组(选"Head of Pancreas"作为基准组) df$PRIMARY_SITE <- relevel(factor(df$PRIMARY_SITE), ref = "Head of Pancreas") # 构建多分类逻辑回归模型,检验数值变量A对PRIMARY_SITE的影响 multinom_model <- multinom(PRIMARY_SITE ~ A, data = df) summary(multinom_model)
结果中每个分类相对于参考组的系数p值,会告诉你数值变量A是否对该分类的概率有显著影响。
内容的提问来源于stack exchange,提问作者Arman Sh
相关产品推荐
相关产品推荐

