You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:06:08