百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

「统计」从p-value到q-value的计算(附代码)

bigegpt 2024-09-08 11:36 5 浏览

看到群里有老师在问“如何从p-value计算获得q-value”。今天简单进行下讨论,并附送一份可在命令行下独立运行的代码。

首先,关于“P值”我们之前也进行过讨论(计算个“P值”,咱也不太懂,咱也不敢信)。大家或许还对下面的这张PPT还有印象:对于来自相同分布的两组样本,如果很多次采集数据并进行假设检验,“本不应显著的”两组样本也会出现P值很小的“显著结果”(“P-hacking”

上图中,我们对来自相同正态分布n(5,5)的x和y进行仿真,每次模拟三个重复,并进行t检验;假设我们有这么一个“劳模”进行了1000次(x轴)独立实验,并各自计算出p值(y轴);其中,红线为p=0.05的阈值线。从图上看出,1000次实验中,有很多次已经出现p<0.05的情况了。实际上,这种情况下“P-value”服从[0,1]区间的“均匀分布”;在随机情况下,1000次实验出现也能出现大约50次“P<0.05的情况”。

所以,在进行了很多次假设检验的时候,为了控制FDR(错误发现率),就要使用统计学方法进行“多检验矫正”(multiple-testing correction),并计算得到q-value。

关于p-value、q-value和FDR的关系,大家可以参考本文链接的网页上的解释(英文的哦~~)。本文不重复讨论。

但简单地,我们对q-value和p-value的特点进行以下总结:

  1. P-value和Q-value都是分布在[0,1]范围内的实数。

  2. 从P-value列表计算得到Q-value列表的统计模型有很多(参考R语言中p.adjust函数)。

  3. P-value 列表计算得到Q-value后,各个元素的大小排序不发生改变(不考虑相等的情况)。

  4. 相对于P-value列表中的对应元素的p值,其q值只会变大(或不变),不会变小(但不会超过1)。

  5. P值经放大到对应的Q值的过程中,和列表中的元素的个数也有关系:即,不同的总体元素个数下,同一个P值经放大往往会得到不同的Q值。

  6. 如果同时进行的假设检验次数很多时,只使用“P值”进行讨论的稿件,会被审稿人质疑作者的统计学基础。

以下是小编附送的一份R语言的代码,另存为可执行的文件后,可通过一行shell命令将P值转换为Q值。供各位同行参考。

在linux命令行下,将下的代码另存为 Pv2Qv.R文件,并添加可执行权限。

#!/usr/bin/env Rscript# by 麦陇 @ 小麦研究联盟

suppressPackageStartupMessages(library("optparse"))option_list <- list( make_option(c("-i", "--infile"), dest = "infile", default = "", help="[opt] input file, use STDIN if omitted"), make_option(c("-p", "--pv"), dest = "pv_col", default = 1, help="The column number for p value [default: %default]"), make_option(c("-o", "--outfile"), dest = "outfile", default = "", help = "[opt] output file, use STDOUT if omitted"))#parser <- OptionParser(usage = "%prog [options] file", option_list=option_list, description = "Description: \ Calculate the q-values from a list of p-values.\ New columns will be added to in right most column of output.xls.\Example: \ Pv2Qv.R -i input.xls -o output.xls \ ")#arguments <- parse_args(parser)opt <- arguments$options# infileinfile <- arguments$infileif(infile == "") { infile = file("stdin")}# outfileoutfile = arguments$outfileif( outfile == "") { outfile = stdout}# Read the input fileT = read.table( infile, header=FALSE, sep = "\t", check.names = FALSE)PV = T[,arguments$pv_col]QV = format(p.adjust(PV, method = "fdr"), digits = 4, scientific = TRUE)write.table( cbind(T, QV), file = outfile, quote = FALSE, sep = "\t", row.names = FALSE, col.names = FALSE)

之后,就可以参考如下命令行从P值直接生成Q值。

说明:输入文件需要是包含所有元素的、同时计算了P值的列表;可以有多列,在命令行中指定P值所在的列号即可(如第三列:“-p 3”)。

./Pv2Qv.R -i input_file -p 3 -o output_file # 假设输入文件中第三列是P值# 生成文件output_file会在input_file的基础上增加一列对应的q值。

相关推荐

Redis集群对比:主从复制、哨兵模式、Cluster一文看懂所有优缺点

在分布式系统中,Redis作为高性能的内存数据库,其集群方案的选择直接影响到系统的稳定性、可用性和扩展性。本文将全面对比Redis的三种主流集群方案:主从复制、哨兵模式和Cluster模式,帮助开发者...

redis的主从复制,读写分离,主从切换

当数据量变得庞大的时候,读写分离还是很有必要的。同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能。redis提供了一个master,多个sl...

# Redis 入门到精通(九)-- 主从复制(3)

#Redis入门到精通(九)--主从复制(3)##一、redis主从复制-常见问题(1)###1、伴随着redis系统的运行,master的数据量会越来越大,一旦master重启...

redis - 主从复制(Redis主从复制时序图)

1引言在上一篇文章中,我们了解了Redis两种不同的持久化方式,Redis服务器通过持久化,把Redis内存中持久化到硬盘当中,当Redis宕机时,我们重启Redis服务器时,可以由RDB文件或AO...

# Redis 入门到精通(九)-- 主从复制(2)

#Redis入门到精通(九)--主从复制(2)##一、redis主从复制--数据同步阶段注意事项###1、数据同步阶段master说明1)如果master数据量巨大,数据同步阶段应...

Redis主从复制(redis主从复制主节点挂了)

介绍Redis有两种不同的持久化方式,Redis服务器通过持久化,把Redis内存中持久化到硬盘当中,当Redis宕机时,我们重启Redis服务器时,可以由RDB文件或AOF文件恢复内存中的数据。不过...

深入解析 Redis 集群的主从复制实现方式

在互联网大厂的后端开发领域,Redis作为一款高性能的内存数据库,被广泛应用于缓存、消息队列等场景。而Redis集群中的主从复制机制,更是保障数据安全、实现读写分离以及提升系统性能的关键所在。今...

Redis主从架构详解(redis主从架构高可用如何实现)

Redis主从架构搭建Redis主节点配置创建主节点目录(/opt/redis-master),复制redis.conf到该目录下,redis.conf配置项修改#后台启动daemonizeyes...

抖音“四大包塘战神”:承包了全网的快乐

在抖音钓鱼垂类领域,"包塘战神"军团正掀起一场黑色幽默风暴。空军华、大表坑、李赔光、透心良四位创作者,以承包鱼塘为舞台,用连续翻车的钓鱼直播构筑起流量奇观。当钓鱼佬在抖音集体转型喜剧人...

ORACLE 11G RAC 安装-通过VM配置共享磁盘

简介:在自己的电脑上通过VM软件搭建Oracle11GRAC,通过修改VM的参数文件来实现磁盘共享!目标:搭建RAC环境实现:使用VMwareWorkstation8.0.0+ORACLE...

Linux操作系统安全配置(linux系统安全配置包括)

一、服务相关命令systemctlenable服务名#开机自启动systemctldisable服务名#禁用开机自启动systemctlstop服务名#停止服务systemctls...

关于Linux性能调优中网络I/O的一些笔记

写在前面和小伙伴分享一些Linux网络优化的笔记,内容很浅,可以用作入门博文内容结合《Linux性能优化》读书笔记整理涉及内容包括常用的优化工具(mii-tool,ethtool,ifconfig,i...

从 Sonatype Nexus Repository Manager 迁移到 Artifactory

1.Nexus1.1下载下载链接:https://help.sonatype.com/repomanager3/product-information/download/download-archiv...

Ubuntu20安装zabbix5.0企业监控系统亲测教程

前言示例主机:zabbix10.0.100.10,将安装在UbuntuServer上教程说明:因使用官方教程无法安装成功,所以本教程与官方教程有所不同安装前提:已安装UbuntuServer2...

Linux内核设计与实现—进程管理(linux内核程序设计)

进程进程就是处于执行期的程序(目标码存放在某种存储介质上)。进并不仅仅局限于一段可执行程序代码(Unix称其为代码段,textsection)。通常进程还要包含其他资源,像打开的文件,挂起的信号,...