与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

相关文章

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException: org.junit.Test问题

《解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException:org.junit.Test问题》:本文主要介绍解决tomcat启动时报Junit相... 目录tomcat启动时报Junit相关错误Java.lang.ClassNotFoundException

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ