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

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 数据预处理

# 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 errorterm1<- 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 errorhet.like = (1-ge) * dbetabinom(x, n, m= 0.5, s= par[2])# log likelihoodll<- -sum(log(err.like + het.like))# returnreturn(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 统计建模和优化,提取基因

# likelihood function 
ll.fun <- function(par, x, n, ge, err, d) {# likelihood for first siteallelic.imbalance <- par# likelihood, conditional on genotype errort1 = 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 errord1 = (1 - ge[1]) * dbetabinom(x[1], n[1], m =  0.5 + allelic.imbalance, s = d)# combined likelihoodp1 = er1 + d1# for subsequent siteslen = length(x)if(len > 1) {# likelihood given genotyping errorts1 <- 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 SNPsnp.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 SNPsnp.phase0.like <- (1-ge[2:len])*dbetabinom(x[2:len], n[2:len], m=0.5 - allelic.imbalance, s = d) + er2# create phase arrayphase1.like.array <- rep(NA, len)phase0.like.array <- rep(NA, len)# add likelihood for first sitephase1.like.array[1] <- p1phase0.like.array[1] <- p1for(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 phasesprev <- (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 elementsl = -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){# subsetdf= cnt[cnt$gene_id %in% genes[i],]# orderdf= df[order(df$start),]# number of het sitesn.snp= nrow(df)# optimizem1 <- 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.imbalancealt.ll <- m1$objectiveestimate <- m1$minimum# NULL hypothesisnull.ll= ll.fun(par = 0, x= df$ref.matches, n = df$N, ge = df$genotype.error, err = err, d = d)# Likelihood ratio testlrt.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)# returnreturn(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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

瑞芯微RK3328(ROC-RK3328-PC)buildroot 开发QT的hello world

第一部分&#xff1a;编译rk3328 sdk 0. 环境 - EC-R3328PC&#xff08;ROC-RK3328-PC&#xff09; - ubuntu18&#xff08;100GB&#xff09; 1. 安装依赖 sudo apt-get updatesudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools devi…

【系统移植三】uboot移植

开发板类型&#xff1a;emmc、7寸屏 1 NXP官方开发板uboot编译测试 1.1 获取源码 1&#xff09;源码路径&#xff1a;1、例程源码->4、NXP 官方原版 Uboot 和 Linux -> uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2。 2&#xff09;将源码拷贝到ubuntu中的~/linux/IMX6…

数据安全中的访问安全包含哪些内容,如何实现数据访问安全

无极低码 &#xff1a;https://wheart.cn 数据安全中的访问安全是指为了保护数据不被未经授权的个人或程序访问而采取的一系列技术和管理措施。访问安全包括但不限于以下关键内容&#xff1a; 身份验证&#xff1a; 用户身份确认&#xff0c;通常通过用户名/密码组合、多因素认…

Linux 目录结构与基础查看命令

介绍 目录结构如下 /bin&#xff1a;存放着用户最经常使用的二进制可执行命令&#xff0c;如cp、ls、cat等。这些命令是系统管理员和普通用户进行日常操作所必需的。 /boot&#xff1a;存放启动系统使用的一些核心文件&#xff0c;如引导加载器&#xff08;bootstrap loader…

采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示

采用C#.Net JavaScript 开发的云LIS系统源码 二级医院应用案例有演示 一、系统简介 云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序&#xff0c;可协助区域内所有临床实验室相互协调并完成日常检验工作&#xff0c;对区域内的检验数据进行集中管理和共享&#xff0…

Java学习笔记零基础入门2

前部分&#xff0c;基础篇章 第八章面向对象编程(高级部分) 持续更新中...

动态库的制作和使用

动态库的制作 动态库&#xff08;在Windows上称为DLL&#xff0c;即Dynamic Link Library&#xff0c;在Unix-like系统上称为SO&#xff0c;即Shared Object&#xff09;的制作过程涉及几个关键步骤&#xff1a;编写源代码、编译源代码为共享的动态对象&#xff0c;并链接它们…

4*5的矩阵(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 0;int j 0;int result 0;//嵌套循环输出&#xff1b;for (i 1; i < 4; i){//列…

【JavaScript】数组 Array 总结(202404)

🥰 数组 Array (202404) 数组 🔗 ❤️‍🔥 数组是一种有序的多个变量值的集合,可以通过索引来获取元素。 ❤️‍🔥 数组是一种特殊的对象类型。 1、创建数组 字面量 // a. 有元素 let arr = [a, b, c]; console.log(arr); // b. 空数组 let arr1 = []; console.…

L2正则化——解释为什么可以减少模型的复杂度

L2正则化是一种用于机器学习模型的技术&#xff0c;旨在减少模型的复杂度&#xff0c;从而提高其泛化能力。在L2正则化中&#xff0c;通过添加一个惩罚项&#xff0c;模型的权重被迫保持较小的值&#xff0c;这有助于防止过拟合&#xff0c;即模型在训练数据上表现良好但在未见…

【Python】OPC UA模拟服务器实现

目录 服务器模拟1. 环境准备2. 服务器设置3. 服务器初始化4. 节点操作5. 读取CSV文件6. 运行服务器 查看服务器客户端总结 在工业自动化和物联网&#xff08;IoT&#xff09;领域&#xff0c;OPC UA&#xff08;开放平台通信统一架构&#xff09;已经成为一种广泛采用的数据交换…

单链表的基本操作实现:初始化、尾插法、头插法、输出单链表、求表长、按序号查找、按值查找、插入结点、删除结点。

1.参考学习博文&#xff08;写的相当好的文章&#xff09;&#xff1a; http://t.csdnimg.cn/AipNl 2.关于我的总结&#xff1a; 定义单链表&#xff1a; typedef struct LNode {Elemtype data;struct LNode* next; }LNode; data用来存放元素值&#xff0c;next用来指向后…

【算法】反转链表

本题来源---《反转链表》 题目描述&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输…

前端怎样做权限控制的?

在做系统时&#xff0c;我们常常因为使用该系统或软件的用户不同&#xff0c;要给到不同角色不同的模块权限控制。那前端是怎样做权限控制的&#xff1f;下面我将为你提供一些实际操作的例子&#xff0c;帮助你更具体地理解如何实施系统权限控制。 例子1&#xff1a;基于角色的…

vue2+el-row制作一个无间距网格

:gutter"0"无间距 :span""总为24份&#xff0c;根据自身需要设置每个网格项的宽度 <div class"thirdTabs"><!-- 第一行 --><el-row :gutter"0" class"thirdTabs-row-1"><el-col :span"4" c…

医学图像三维重建与可视化系统 医学图像分割 区域增长

医学图像的三维重建与可视化&#xff0c;这是一个非常有趣且具有挑战性的课题&#xff01;在这样的项目中&#xff0c;可以探索不同的医学图像技术&#xff0c;比如MRI、CT扫描等&#xff0c;然后利用这些图像数据进行三维重建&#xff0c;并将其可视化以供医生或研究人员使用。…

C++中的继承与多态

一、继承&#xff1a; 1.什么是继承&#xff1f; 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象…

golang map总结

目录 概述 一、哈希表原理 哈希函数 哈希表和哈希函数的关系 哈希表的优势 哈希冲突 什么是哈希冲突 如何处理哈希冲突 链表法 开放寻址法 哈希表常见操作过程 存储数据 检索数据 删除数据 常用的哈希算法 哈希表的应用场景 二、golang map map的内部结构 h…

c++智能指针(4)-- shared_ptr

概述 场景一: 希望指向多个指针管理一片空间 unique_ptr它是不允许两个智能指针管理一片空间的&#xff0c;所以其禁止直接拷贝和赋值(转化为右值可以)。 auto_ptr虽然其允许我们多个智能指针管理一片空间&#xff0c;但是这样的操作对于auto_ptr来说是不安全的&#xff0c;因…

Docker Volume (存储卷)

什么是存储卷? 存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这就意味着&#xff0c;当我们在容器中的这个目录下写入数据时&#xff0c;容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。在宿主机上…