当前位置: 首页 > news >正文

与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 统计

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 个人旅游网(1)——数据库表详解
  • JVM1-初识JVM
  • 【cocos creator】养成游戏简易事件系统,每日随机事件,每日行动点重置,根据数据检测多结局
  • 【Unity输入】Input Manager 和 Input System对比
  • 实训第三十二天(学习playbook-roles,脚本创建数据库和表,mycat读写分离)
  • 2024年程序员金九银十面试宝典持续更新中.....
  • 【Spring Boot 3】【Web】同时启用 HTTP 和 HTTPS
  • 命令模式与宏命令:批量操作的高效实现
  • 探索Edge-TTS与WebSocket集成:打造实时语音交互系统
  • 【网络编程通关之路】 Tcp 基础回显服务器(Java实现)及保姆式知识原理详解 ! ! !
  • addroutes和next()导致的页面无法跳转问题,如登录之后无法跳转到首页,无法重定向,使用next(to)
  • 树、二叉树
  • 42-java 为什么要有包装类
  • 设置 Nginx、MySQL 日志轮询
  • 栈与队列--python
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 「面试题」如何实现一个圣杯布局?
  • ComponentOne 2017 V2版本正式发布
  • ES6核心特性
  • JavaScript 基础知识 - 入门篇(一)
  • JS题目及答案整理
  • Linux中的硬链接与软链接
  • scala基础语法(二)
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 基于webpack 的 vue 多页架构
  • 记一次用 NodeJs 实现模拟登录的思路
  • 前端工程化(Gulp、Webpack)-webpack
  • 硬币翻转问题,区间操作
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • ​iOS安全加固方法及实现
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • (11)MSP430F5529 定时器B
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (31)对象的克隆
  • (pojstep1.1.2)2654(直叙式模拟)
  • (pytorch进阶之路)扩散概率模型
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (算法)区间调度问题
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (一)为什么要选择C++
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET C# 操作Neo4j图数据库
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET 回调、接口回调、 委托
  • @property @synthesize @dynamic 及相关属性作用探究
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [android学习笔记]学习jni编程
  • [APIO2012] 派遣 dispatching
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [C#]获取指定文件夹下的所有文件名(递归)
  • [CareerCup] 14.5 Object Reflection 对象反射