看到群里有老师在问“如何从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值。

最后,感谢小伙伴们对我们昨天文章的点赞支持,投必得会联合我们科研圈内奋斗在生统第一线的老师跟大家分享。投必得在线教育平台也在紧锣密鼓地筹备当中,预计下个月正式上线,到时希望小伙伴们来捧场啊!

r语言如何计算t分布临界值_[统计]从p-value到q-value的计算(附代码)相关推荐

  1. R语言小白学习笔记13—基本统计

    R语言小白学习笔记13-基本统计 笔记链接 学习笔记13-基本统计 13.1 概括性统计量 13.2 相关系数和协方差 13.3 t-检验 13.3.1 单样本t检验 13.3.2 两样本t检验 13 ...

  2. 【R语言 | 如何计算测序数据微生物种类的生态位宽度?如何解释结果】

    R语言 | 如何计算测序数据微生物种类的生态位宽度?如何解释结果 参考见https://mp.weixin.qq.com/s/MAk7cEQNwUKCKRZ-6xFhbQ(通往学术之路公众号) 参考见 ...

  3. R语言单变量分析实战:汇总统计(Summary Statistics)、频率表(Frequency Table)、图表(charts: boxplot、histogram、density)

    R语言单变量分析实战:汇总统计(Summary Statistics).频率表(Frequency Table).图表(charts: boxplot.histogram.density) 目录

  4. R语言威尔考克森秩和统计分布函数Wilcoxon rank Sum Statistic Distribution(dwilcox, pwilcox, qwilcox rwilcox)实战

    R语言威尔考克森秩和统计分布函数Wilcoxon rank Sum Statistic Distribution(dwilcox, pwilcox, qwilcox & rwilcox)实战 ...

  5. R语言如何计算矩阵的列均值?

    R语言如何计算矩阵的列均值? 目录 R语言如何计算矩阵的列均值? R语言是解决什么问题的? R语言如何计算矩阵的列均值? R语言是解决什么问题的? R 是一个有着统计分析功能及强大作图功能的软件系统, ...

  6. R语言如何计算回归模型参数的置信区间?

    R语言如何计算回归模型参数的置信区间? 目录 R语言如何计算回归模型参数的置信区间? R语言是解决什么问题的? R语言如何计算回归模型参数的置信区间? 安利一个R语言的优秀博主及其CSDN专栏: R语 ...

  7. R语言with函数和within函数:with函数基于表达式在dataframe上计算、within函数基于表达式在dataframe上计算并修改原始数据

    R语言with函数和within函数:with函数基于表达式在dataframe上计算.within函数基于表达式在dataframe上计算并修改原始数据 目录

  8. R语言构建决策树模型(decision tree)并可视化决策树:自定义函数计算对数似然、自定义函数计算模型的分类效能(accuray、F1、偏差Deviance)、使用pander包美化界面输出内容

    R语言构建决策树模型(decision tree)并可视化决策树:自定义函数计算对数似然.自定义函数计算模型的分类效能(accuray.F1.偏差Deviance).使用pander包美化界面输出内容 ...

  9. R语言dplyr包group_by函数、summarise函数、where函数和across函数计算dataframe数据中所有的数值数据列的均值、across函数对多个列执行相同的操作

    R语言dplyr包group_by函数.summarise函数.where函数和across函数计算dataframe数据中所有的数值数据列的均值.across函数对多个列执行相同的操作 目录

  10. R语言拟合ARIMA模型并使用拟合模型进行预测推理:使用forecast函数计算ARIMA模型未来值(如果只想提取预测值,将结果分配给一个对象,然后提取名为mean的列表)

    R语言拟合ARIMA模型并使用拟合模型进行预测推理:使用forecast函数计算ARIMA模型未来值(如果只想提取预测值,将结果分配给一个对象,然后提取名为mean的列表) 目录

最新文章

  1. java 线程组作用_浅析Java中线程组(ThreadGroup类)
  2. 关于Jupyter Notebook默认起始目录设置无效的解决方法
  3. go 实现 kafka 消息发送、接收
  4. android fragment+ FragmentTabHost+viewpager 切换状态不保存的问题
  5. 算法题之求二叉树的最大距离
  6. 《移动App测试的22条军规》—App测试综合案例分析23.4节测试微信App的手势操作...
  7. android 动画xml属性总结
  8. SICP 习题 (1.34)解题总结
  9. ORACLE异常处理及函数
  10. Word如何添加楷体_GB2312
  11. Linux系统的Redis的安装与运行
  12. 最新游戏帐号交易平台源码+支持游戏币交易
  13. 苹果手机还原网络设置会怎样_如果你的苹果手机信号不好!要记得这样设置,让你信号轻松满格...
  14. Xilinx平台SRIO介绍(二)SRIO IP核基础知识
  15. QListView实现自定义Item
  16. pycharm中快捷键新建文件,pycharm快捷键
  17. Google云存储服务GDrive再度浮出水面
  18. 创业者两大特征:喜欢折腾与坚持不懈
  19. 随笔记录——numpy4(伪随机数生成)
  20. 硼碳氮纳米管的制备(碳纳米管包裹磁性金属复合纳米结构/多孔氧化物掺杂的碳纳米管包裹的碳纳米球/碳氮纳米管包裹纳米金属粒子/碳纳米管包裹Ni纳米线复合材料)

热门文章

  1. iPhoneXSM屏幕适配、 各机型的逻辑分辨率
  2. Github全封41万俄罗斯开发者账号,开源真的无国界
  3. BUUCTF:[WUSTCTF2020]girlfriend
  4. java汉字字符串转拼音
  5. 陀螺仪传感器的简单了解
  6. 陀螺仪传感器与方向传感器的区别
  7. 使用scrapy爬取阳光热线问政平台
  8. matlab对数组进行赋值的三种方法(常用于生成坐标轴)
  9. P1903 [国家集训队] 数颜色 / 维护队列
  10. 新零售业背景下实体店的经营战略