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

StringTie数据转DESeq2分析遇报错,求R语言解决方案

解决StringTie输出转DESeq2差异分析的两类报错及完整流程

报错1:DESeqDataSetFromMatrix提示"some values in assay are not integers"

  • 核心原因:DESeq2要求输入原始读段计数(整数),但你传入的是StringTie输出的FPKM/TPM(浮点数),或提取计数时误转成了浮点类型。
  • 解决步骤:
    1. 从StringTie输出中提取原始计数:StringTie加-e参数会生成包含raw_read_count的*.tsv文件,或从*.gtf的exon行read_count属性提取。
    2. 预处理计数矩阵:
      # 先替换NA为0
      count_matrix[is.na(count_matrix)] <- 0
      # 强制转换为整数类型(注意:必须用原始计数,FPKM转整数会失真)
      count_matrix <- apply(count_matrix, 2, as.integer)
      # 确保行名是基因/转录本ID,列名是样本名
      rownames(count_matrix) <- gene_ids
      colnames(count_matrix) <- sample_names
      
    3. 重新创建DESeq2对象:
      library(DESeq2)
      # 构建分组信息,行名必须与count_matrix列名完全一致
      colData <- data.frame(condition = factor(c(rep("parent", n_parent), rep("B10", n_B10))),
                            row.names = colnames(count_matrix))
      dds <- DESeqDataSetFromMatrix(countData = count_matrix,
                                    colData = colData,
                                    design = ~ condition)
      

报错2:DESeqDataSetFromTximport提示"is(txi, "list") is not TRUE"

  • 核心原因:你传入的txi不是tximport生成的标准列表对象,而是直接传了合并后的矩阵,或tximport调用方式错误。
  • 解决步骤:
    1. 整理所有样本的StringTie输出路径:每个样本对应一个abundance.tsv文件,将路径存为命名向量:
      # 示例:亲本样本3个,B10样本3个,文件存于stringtie_output目录
      parent_files <- list.files("stringtie_output", pattern = "parent.*abundance.tsv", full.names = TRUE)
      B10_files <- list.files("stringtie_output", pattern = "B10.*abundance.tsv", full.names = TRUE)
      files <- c(parent_files, B10_files)
      names(files) <- c("parent1", "parent2", "parent3", "B10_1", "B10_2", "B10_3")
      
    2. 用tximport正确导入StringTie数据:
      library(tximport)
      # txOut=TRUE保留转录本水平计数,若要汇总到基因水平需提供转录本-基因对应文件
      txi <- tximport(files, type = "stringtie", txOut = TRUE)
      # 此时txi是包含counts、abundance等元素的标准列表
      
    3. 创建DESeq2对象:
      colData <- data.frame(condition = factor(c(rep("parent", 3), rep("B10", 3))),
                            row.names = names(files))
      dds <- DESeqDataSetFromTximport(txi, colData = colData, design = ~ condition)
      

完整差异分析流程(针对StringTie输出)

  1. 获取原始计数:StringTie运行时必须加-e参数,输出包含原始读段计数的文件,禁止用FPKM/TPM做差异分析。
  2. 保证分组一致性:colData的行名必须与计数矩阵列名(或tximport的files命名)完全匹配,分组变量设为factor类型。
  3. DESeq2标准分析步骤:
    # 过滤低表达基因(可选,提升分析效率)
    dds <- dds[rowSums(counts(dds)) > 1, ]
    # 运行差异分析
    dds <- DESeq(dds)
    # 获取差异结果(指定KO组B10 vs 亲本)
    res <- results(dds, contrast = c("condition", "B10", "parent"))
    # 筛选显著差异基因(示例:校正后p值<0.05,折叠变化绝对值>2)
    res_sig <- subset(res, padj < 0.05 & abs(log2FoldChange) > 1)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:10:42