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

带重复样本的z-score计算及基因表达热图绘制技术咨询

解决基因表达重复样本的z-score计算与热图绘制问题

核心思路

你的需求是把每个基因-条件组合的5次重复值浓缩为1个z-score,用于热图比较不同细胞培养条件下的基因表达模式。由于数据存在异常值,优先选择**中位数+中位数绝对偏差(MAD)**计算稳健z-score,比均值+标准差的传统方法抗干扰能力更强;NA值直接忽略(不参与统计量计算,因代表无检测信号而非数值0)。

步骤1:数据预处理(R代码)

先将表格整理为tidy格式,方便后续分组计算:

# 加载必要工具包
library(tidyverse)
library(pheatmap)

# 模拟你的实验数据(替换为真实数据导入,比如用read.csv()读取本地文件)
df <- tibble(
  基因 = c(rep("基因1",5), rep("基因2",5)),
  条件1 = c(0.22,0.34,0.45,0.33,0.55,12,19.3,23.4,11.7,12.4),
  条件2 = c(120,122,119,34,90,0.1,0.45,NA,0.89,0.1)
)

# 拆分基因列中的基因ID与重复标记,转换为长格式
df_long <- df %>%
  separate(基因, into = c("基因ID", "重复"), sep = " ") %>%
  pivot_longer(cols = starts_with("条件"), names_to = "条件", values_to = "表达量")

步骤2:计算z-score(两种方案可选)

方案A:稳健z-score(推荐,适配异常值场景)

稳健z-score公式:z = (x - 基因全局中位数) / (1.4826 * 基因全局MAD),其中1.4826是校准系数,让MAD与正态分布下的标准差等价。

# 按基因ID计算全局统计量(所有条件+重复的中位数和MAD)
gene_stats <- df_long %>%
  group_by(基因ID) %>%
  summarise(
    基因中位数 = median(表达量, na.rm = TRUE),
    基因MAD = mad(表达量, na.rm = TRUE)
  )

# 合并统计量,计算每个重复的稳健z-score,再按基因+条件取中位数浓缩为单值
z_score_robust <- df_long %>%
  left_join(gene_stats, by = "基因ID") %>%
  mutate(稳健z_score = (表达量 - 基因中位数) / (1.4826 * 基因MAD)) %>%
  group_by(基因ID, 条件) %>%
  summarise(最终z_score = median(稳健z_score, na.rm = TRUE)) %>%
  pivot_wider(names_from = 条件, values_from = 最终z_score) %>%
  column_to_rownames("基因ID")

方案B:传统z-score(无异常值时可用)

如果数据异常值极少,可选用均值+标准差的传统方法:

# 按基因ID计算全局均值和标准差
gene_stats_mean <- df_long %>%
  group_by(基因ID) %>%
  summarise(
    基因均值 = mean(表达量, na.rm = TRUE),
    基因标准差 = sd(表达量, na.rm = TRUE)
  )

# 计算传统z-score并浓缩重复样本
z_score_traditional <- df_long %>%
  left_join(gene_stats_mean, by = "基因ID") %>%
  mutate(传统z_score = (表达量 - 基因均值) / 基因标准差) %>%
  group_by(基因ID, 条件) %>%
  summarise(最终z_score = mean(传统z_score, na.rm = TRUE)) %>%
  pivot_wider(names_from = 条件, values_from = 最终z_score) %>%
  column_to_rownames("基因ID")

步骤3:绘制热图

使用pheatmap包绘制标准化后的热图:

# 基于稳健z-score结果绘图
pheatmap(z_score_robust,
         cluster_rows = TRUE,
         cluster_cols = TRUE,
         na_col = "gray", # 标记残留的NA值
         main = "基因表达稳健z-score热图",
         show_rownames = TRUE,
         show_colnames = TRUE)

关键说明

  • 重复样本浓缩逻辑:用中位数而非均值浓缩重复样本的z值,避免异常值(如基因1条件2的34)拉偏结果,更符合你数据的异常值场景。
  • 标准化维度:按基因自身全局分布标准化,热图能直观展示每个基因在不同条件下的表达相对变化趋势。
  • NA处理:所有计算均通过na.rm=TRUE忽略NA,符合“无检测信号”的实验定义。

内容的提问来源于stack exchange,提问作者Marta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:05:17