如何在RStudio中对基因表达数据框执行Wilcox检验比较两类组织表达差异
R语言实现基因差异表达Wilcox检验操作步骤
默认你已经将表达量数据框导入R环境,命名为gene_exp,行对应基因名,列对应样本名,单元格值为基因表达量。
步骤1:划分两组样本
根据列名结尾的标识自动拆分TissueA和TissueB组:
# 识别所有属于TissueA组的样本列,返回逻辑值向量 groupA <- endsWith(colnames(gene_exp), "TissueA") # 识别所有属于TissueB组的样本列 groupB <- endsWith(colnames(gene_exp), "TissueB")
解释:运行后groupA里为TRUE的位置对应就是TissueA组的列,直接用这个索引就能提取对应组的表达值。
步骤2:逐基因做Wilcox秩和检验
不用写复杂循环,用apply函数对每一行(每个基因)批量做检验:
wilcox_result <- apply(gene_exp, 1, function(gene_exp_vals){ # 提取当前基因在两组的表达量 exp_A <- gene_exp_vals[groupA] exp_B <- gene_exp_vals[groupB] # 执行Wilcox检验,exact=FALSE可避免数据有重复值时的警告,新手直接用即可 test_res <- wilcox.test(exp_A, exp_B, exact = FALSE) # 返回检验p值、两组中位表达量、两组表达差异倍数(对数转换后) return(c( pvalue = test_res$p.value, median_tissueA = median(exp_A), median_tissueB = median(exp_B), log2FC = log2((median(exp_A)+0.001)/(median(exp_B)+0.001)) )) })
解释:加0.001是为了避免表达量为0时出现除以0或者取对数报错的问题,你也可以根据自己的数据量级调整这个小数值。如果你的表达量已经做过对数标准化,直接用median(exp_A) - median(exp_B)算log2FC即可。
步骤3:整理结果+多重检验校正
批量检验后必须做p值校正,避免假阳性:
# 转置结果转为数据框格式,方便后续筛选 result_df <- as.data.frame(t(wilcox_result)) # 用行业常用的FDR方法校正p值,校正后的值存在padj列 result_df$padj <- p.adjust(result_df$pvalue, method = "fdr")
步骤4:筛选显著差异基因+导出结果
用常规阈值筛选即可,你也可以自己调整阈值:
# 筛选规则:校正后p值<0.05,差异倍数绝对值>1(即两组表达量差2倍以上) diff_gene <- result_df[result_df$padj < 0.05 & abs(result_df$log2FC) > 1, ] # 导出结果为csv文件,可直接用Excel打开查看 write.csv(diff_gene, file = "差异基因分析结果.csv", row.names = TRUE)
常见问题小提示
- 要是运行时提示样本量太少,检查下前面分组的步骤是不是正确,运行
sum(groupA)和sum(groupB)可以看两组分别有多少个样本,两组都至少要有3个样本才能做统计检验 - 输出的结果里log2FC为正代表该基因在TissueA组表达上调,为负代表在TissueB组表达上调
内容的提问来源于stack exchange,提问作者Lilfreckles
相关产品推荐
相关产品推荐

