与PC1显著相关的基因 | p值计算

2024-08-31 04:04
文章标签 计算 相关 基因 显著 pc1

本文主要是介绍与PC1显著相关的基因 | p值计算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 相关系数的显著性

t=r*sqrt(n-2) / sqrt(1-r**2)
其中,统计量t符合自由度为 n-2 的t分布。

2. 与PC1显著相关的基因

就是求相关系数r=cor(PC1_score, Xk),其中

  • PC1_score 长度为样品总数,是PC1 的loading * 每个变量的scale后的值
  • Xk是第k个变量在每个样品的值

然后由r计算t统计量,及对用的p值,见上文1。

对每个变量都这么计算p值,做p值矫正,取 p_val_adj <0.05 或 0.01为显著的基因即可。

3. 由Seurat对象求与某PC显著的基因

#' Calc p value of each gene with one given PC
#'
#' @param object Seurat object
#' @param pc_num like 1 for "PC_1"
#' @param p.adj.method default fdr
#' @param verbose default no output
#' @param p.val.threshold p value significant threshold
#'
#' @return
#' @export
#'
#' @examples
#' withPC1=SigGenesWithPC(scObj, pc_num = 2)
SigGenesWithPC=function(object, pc_num=1, p.adj.method="fdr", p.val.threshold=0.05, verbose=F){#rk=sqrt(lambda)*W / sd(Xk)# rk 是PC1和第k个变量的r值# lambda 是PC1对应的特征值# W是PC1对应的每个变量的 loading# Xk是第k个变量的autoscale后的值# 1)提取 PC1 的因子加载loadings <- object@reductions$pca@feature.loadings[,pc_num]  # PC1 的加载# 2) 样本大小 nn <- ncol(scale.data); n  # 样本大小# 3) autoscale 后的数据scale.data=object@assays$RNA@scale.data[object@assays$RNA@var.features,]# 4)计算相关系数 r 和lambda = object@reductions$pca@stdev[pc_num] ** 2correlations <- sqrt(lambda) * as.numeric(loadings)sd.arr=apply(scale.data, 1, sd)if(verbose) { hist(sd.arr, n=100) } #并不是都是1,why?for(i in 1:length(correlations)){correlations[i] = correlations[i] / sd.arr[i]}# 5) 计算 t 统计量t_statistics <- (correlations * sqrt(n - 2)) / sqrt(1 - correlations^2)# 6) 计算 p 值p_values <- 2 * pt(-abs(t_statistics), df = n - 2)if(verbose) { hist(p_values, n=100) }# 7)创建结果数据框dat.use <- data.frame(Variable = names(loadings), Loading = loadings, t_statistic = t_statistics, pc=pc_num,p_val = p_values)# 8)p 值矫正dat.use$p_val_adj = p.adjust(dat.use$p_val, method = p.adj.method)# 筛选显著变量(例如 p < 0.05)dat.use$sig=ifelse(dat.use$p_val_adj < p.val.threshold, "yes", "no")# 9) order by Loading dat.use=dat.use[order(-dat.use$Loading),]dat.use
}# scObj 为pbmc3k的Seurat对象,v4。withPC1=SigGenesWithPC(scObj, pc_num = 2, p.val.threshold = 0.01)
head(withPC1)
#         Variable   Loading t_statistic pc         p_val     p_val_adj sig
#CD79A       CD79A 0.1244749    34.49119  2 2.703414e-216 6.007586e-214 yes
#MS4A1       MS4A1 0.1130108    30.16768  2 1.561846e-172 2.402839e-170 yes
#TCL1A       TCL1A 0.1061570    27.79212  2 1.035920e-149 1.218729e-147 yes
#HLA-DQA1 HLA-DQA1 0.1031493    26.79132  2 2.104518e-140 2.338353e-138 yes
#HLA-DRA   HLA-DRA 0.1022300    26.49010  2 1.219714e-137 1.283910e-135 yes
#HLA-DQB1 HLA-DQB1 0.1007367    26.00524  2 3.128123e-133 2.979165e-131 yestail(withPC1)
table(withPC1$sig)
#  no  yes 
#1239  761
table(withPC1$sig, withPC1$Loading>0)
#    FALSE TRUE
#no    853  386
#yes   650  111hist(withPC1$p_val_adj, n=100)library(ggplot2)
ggplot(withPC1, aes(x=Variable, y=Loading, fill=sig))+geom_col()+scale_x_discrete(limits=withPC1$Variable, labels = NULL)+scale_fill_manual(values = c("red", "grey"), breaks = c("yes","no") )+ggtitle("p.adj<0.01")# get sig genes: all
withPC1[which(withPC1$sig=="yes"), ]$Variable |> jsonlite::toJSON()
# get sig genes: pos sig
withPC1[which(withPC1$sig=="yes" & withPC1$Loading>0), ]$Variable |> jsonlite::toJSON()
# get sig genes: neg sig
withPC1[which(withPC1$sig=="yes" & withPC1$Loading<0), ]$Variable |> jsonlite::toJSON()

在这里插入图片描述


Ref

  • [1] Yamamoto H., Fujimori T., Sato H., Ishikawa G., Kami K., Ohashi Y. (2014). “Statistical hypothesis testing of factor loading in principal component analysis and its application to metabolite set enrichment analysis”. BMC Bioinformatics, (2014) 15(1):51.
  • txtBlog::R/Rs1 统计

这篇关于与PC1显著相关的基因 | p值计算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1122838

相关文章

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10

Node Linux相关安装

下载经编译好的文件cd /optwget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gztar -xvf node-v10.15.3-linux-x64.tar.gzln -s /opt/node-v10.15.3-linux-x64/bin/npm /usr/local/bin/ln -s /opt/nod

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显