R语言处理RNA等位基因不平衡(二)

简介: 该文档介绍了通过RNA测序数据检测和量化等位基因不平衡的R语言分析流程。首先,RNA测序技术用于研究基因表达的细微变化,包括等位基因特异性表达。接着,通过加载和预处理CSV文件中的计数数据,去除映射错误较多的位点,然后利用二项贝塔分布和优化统计模型(如L-BFGS-B方法)估计等位基因不平衡和分散参数。接下来,为每个基因整合位点信息,通过似然函数最小化计算等位基因不平衡程度,并进行似然比测试以确定显著性。最后,对P值进行FDR校正并输出结果到CSV文件。整个过程涉及数据过滤、建模和统计分析。

1.前言:

RNA测序技术允许研究人员在转录组水平上精细地检测基因表达,包括等位基因特异性表达的变异。通过比较来自同一基因的不同等位基因的表达量,可以揭示细胞内遗传和表观遗传调控机制的差异。本代码通过对RNA测序数据中的读数计数进行详细分析,旨在检测和量化等位基因不平衡。通过优化统计模型来估计等位基因表达的差异,研究人员可以识别出在特定生物学条件下受到调控的基因区域。

其实和DNA的处理是差不多的,只是测序到的数值水平不同,以及基因的表达有所差异

2.demo

2.1 加载包和读取数据

suppressMessages(library(data.table))
suppressMessages(library(plyr))
suppressMessages(library(dplyr))
suppressMessages(library(rmutil))
filename.count <- "rna_allele_count.csv"
filename.output <- "rna_result.csv"
# counts
cnt <- read.csv(filename.count)

2.2 数据预处理

从CSV文件中加载RNA测序计数数据,去除映射错误大于2的位点,以提高分析的准确性。

# filter sites with more than 2 read mapping to error allele
cnt<- subset(cnt, errors <= 2)
# optimize dispersion and error
mtmp <- function(par, x, n, ge){
  
  # likelihood, conditional on genotype error
  term1<- 0.5 * dbetabinom(x, n, m= par[1], s= par[2])
  
  term2<- 0.5 * dbetabinom(n - x, n, m= par[1], s= par[2])
  
  err.like <- (ge)*(term1 + term2)
  
  # likelihood, conditional on no genotype error
  het.like = (1-ge) * dbetabinom(x, n, m= 0.5, s= par[2])
  
  # log likelihood
  ll<- -sum(log(err.like + het.like))
  
  # return
  return(ll)
}
# optimize
m0<- optim(par= c(1e-05,1), mtmp, x= cnt$ref.matches, n= cnt$N, ge= cnt$genotype.error,
           method="L-BFGS-B", lower = c(1e-10, 1e-05), upper = c(0.999, 100))
# get parameter
err = m0$par[1]
d = m0$par[2]

2.3 统计建模和优化,提取基因

应用二项贝塔分布对每个位点的读数计数进行建模,考虑基因型误差。使用优化函数(如L-BFGS-B方法)来估计模型参数,包括等位基因不平衡比例和分散参数。

# likelihood function 
ll.fun <- function(par, x, n, ge, err, d) {
  
  # likelihood for first site
  allelic.imbalance <- par
  
  # likelihood, conditional on genotype error
  t1 = 0.5 * dbetabinom(x[1], n[1], m=err, s=d)
  t2 = 0.5 * dbetabinom(n[1]-x[1], n[1], m=err, s=d)
  er1 = ge[1] * (t1 + t2)
  
  # likelihood, conditional on no genotype error
  d1 = (1 - ge[1]) * dbetabinom(x[1], n[1], m =  0.5 + allelic.imbalance, s = d)
  
  # combined likelihood
  p1 = er1 + d1
  
  # for subsequent sites
  len = length(x)
  
  if(len > 1) {
    
    # likelihood given genotyping error
    ts1 <- 0.5 * dbetabinom(x[2:len], n[2:len], m=err , s=d)
    ts2 <- 0.5 * dbetabinom(n[2:len]- x[2:len], n[2:len], m=err, s=d)
    er2 <- (ge[2:len])*(ts1 + ts2)
    
    # consider all possible phasings with respect to the first SNP
    
    # precompute likelihoods of each subsequent SNP given 'in-phase' with first SNP
    snp.phase1.like <- (1-ge[2:len])*dbetabinom(x[2:len], n[2:len], m=0.5 + allelic.imbalance, s = d) + er2
    
    # precompute likelihoods of each subsequent SNP given 'out-of-phase' with first SNP
    snp.phase0.like <- (1-ge[2:len])*dbetabinom(x[2:len], n[2:len], m=0.5 - allelic.imbalance, s = d) + er2
    
    # create phase array
    phase1.like.array <- rep(NA, len)
    phase0.like.array <- rep(NA, len)
    
    # add likelihood for first site
    phase1.like.array[1] <- p1
    phase0.like.array[1] <- p1
    
    for(i in 2:len) {
      # prior SNP was either in-phase or out-of-phase with first SNP, consider
      # both mutually exclusive possibilities when computing combined likelihood of
      # all possible combinations of phases
      prev <- (0.5 * phase1.like.array[i-1]) + (0.5 * phase0.like.array[i-1])
      
      phase1.like.array[i] <- prev * snp.phase1.like[i-1]
      
      phase0.like.array[i] <- prev * snp.phase0.like[i-1]
    }
    
    # total likelihood is sum of last two elements
    l = -log(0.5*phase1.like.array[len] + 0.5*phase0.like.array[len])
  } else {
    l = -sum(log(p1))
  }
  
  return(l)
}
# get genes
genes= cnt$gene_id %>% unique %>% as.character

2.4 等位基因不平衡分析

对于每个基因,整合其所有位点的数据,通过最小化似然函数来估计等位基因不平衡的程度。这包括计算每个位点的等位基因表达的似然度,以及它们相对于第一个位点的相位(phase)似然度。

# function to run allele imbalance measurements
fun = function(i){
  
  # subset
  df= cnt[cnt$gene_id %in% genes[i],]
  
  # order
  df= df[order(df$start),]
  
  # number of het sites
  n.snp= nrow(df)
  
  # optimize
  m1 <- optimize(ll.fun, c(-0.5, 0.5), x= df$ref.matches, n= df$N, ge= df$genotype.error, err= err, d= d)
  
  # estimates of allelic.imbalance
  alt.ll <- m1$objective
  
  estimate <- m1$minimum
  
  # NULL hypothesis
  null.ll= ll.fun(par = 0, x= df$ref.matches, n = df$N, ge = df$genotype.error, err = err, d = d)
  
  # Likelihood ratio test
  lrt.stat <- 2 * (null.ll - alt.ll)
  
  pval <- pchisq(lrt.stat, df=1, lower.tail=F)
  
  result= data.frame(gene_id= genes[i], pval =pval, a= estimate)
  
  # return
  return(result)
  
}

2.5 整合结果数据

对每个基因的分析结果进行汇总,应用FDR(假发现率)校正来调整P值,最后将整合的结果输出到CSV文件中。

my.list= llply(1:length(genes), fun, .progress = progress_text(char= "+"))
# combine list
res= do.call(rbind, my.list)
# correct p-values
res$fdr= p.adjust(res$pval, "fdr")
# order 
res= res[order(res$pval),]
# output results
write.csv(res, filename.output, row.names = F)


下集预告:拷贝数变异的分析~

目录
相关文章
|
6月前
|
数据可视化 数据挖掘 索引
R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码2
R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码
|
6月前
|
数据可视化 vr&ar
R语言统计学DOE实验设计:用平衡不完全区组设计(BIBD)分析纸飞机飞行时间实验数据
R语言统计学DOE实验设计:用平衡不完全区组设计(BIBD)分析纸飞机飞行时间实验数据
|
6月前
|
存储 数据可视化 数据挖掘
R语言绘制圈图、环形热图可视化基因组实战:展示基因数据比较
R语言绘制圈图、环形热图可视化基因组实战:展示基因数据比较
|
6月前
|
存储 数据可视化 数据挖掘
R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码1
R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码
|
6月前
|
数据可视化 定位技术 网络架构
R语言在地图上绘制月亮图、饼状图数据可视化果蝇基因种群
R语言在地图上绘制月亮图、饼状图数据可视化果蝇基因种群
|
6月前
|
数据采集 数据处理
R语言处理DNA等位基因不平衡(一)
该文介绍了等位基因不平衡分析在生物信息学和基因组学中的应用,用于识别受选择压力的基因。等位基因不平衡指基因座上两个等位基因表达比例不均,可能因自然选择等因素引起。研究通过系统分析特定区域的等位基因不平衡,识别关键基因在生物过程或疾病中的作用。示例代码展示了如何处理和分析数据,包括导入数据、预处理、等位基因不平衡测试以及结果输出。该分析适用于DNA数据,未来将推出针对RNA的数据处理方法。
66 0
|
2月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
20天前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
40 3
|
6月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
6月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为