数据分析:置换检验Permutation Test

欢迎大家关注全网生信学习者系列:

  • WX公zhong号:生信学习者
  • Xiao hong书:生信学习者
  • 知hu:生信学习者
  • CDSN:生信学习者2

介绍

置换检验是一种非参数统计方法,它不依赖于数据的分布形态,因此特别适用于小样本数据集,尤其是当样本总体分布未知或不符合传统参数检验的假设条件时。置换检验的基本思想是通过随机置换样本来评估观察到的统计量是否显著不同于随机情况下的预期值。最初真正认识置换检验是从PERMANOVA分析开始的,PERMANOVA的原理是:

  1. 原始统计量的获取: 首先计算组间距离的平方和与组内距离的平方和之间的差值。这个差值在统计学中类似于F分布统计量,用于评估组间差异的显著性。
  2. 随机置换样本: 接下来,通过随机抽取样本并重新分组,重复计算上述类似F分布的统计量。这个过程需要进行多次,例如1000次,以模拟在随机条件下可能得到的各种统计量值。
  3. 统计量分布的构建与评估: 将第二步中重复计算得到的1000个统计量值组成一个分布。然后,观察原始统计量值在这个分布中的位置。如果在显著性水平(例如0.05)的两端,即表示原始统计量值在随机情况下出现的概率较低,从而可以认为存在显著差异;如果不是,则不能拒绝原假设,即认为没有显著差异。

置换检验的应用:

置换检验方法通常用于小样本组间的比较,它不对样本的总体分布提出要求。这种方法特别适用于那些样本量较小,以至于无法使用传统的参数检验(如t检验)的情况。然而,如果使用基于简单假设检验的统计量,例如在评估两组数据差异时,首先通过t检验获得原始t统计量,然后通过置换检验重新抽取样本并计算t统计量,最后评估原始t统计量在由置换得到的t统计量分布中的位置,此时就需要考虑数据的分布特性。这种方法允许研究者在不依赖于数据分布的前提下,对统计显著性进行更为稳健的评估。

加载R包

library(tidyverse)
library(multcomp)
library(lmPerm)

# rm(list = ls())
options(stringsAsFactors = F)
options(future.globals.maxSize = 1000 * 1024^2)

小样本数据案例

现有两组数据,一组是对照组,一组是实验组,它们的样本量分别是3和5,通过以下数据是否能够证实实验处理可以改善结果?

  • 对照组:73,75,78

  • 实验组:68,69,80,76,82

解题思路:T检验或Wilcox检验一般要求任意一组样本量均大于等于5较为合适,且两组样本量相差较小(非平衡数据)。该问题样本量较小,普通的假设检验不适合,可以采用置换检验(两组平均值的差值作为统计量)。具体步骤:

  1. 第一步,零假设是实验组和对照组没有任何差别;
  2. 第二步,获取原始统计量。先计算两组平均值的差值作为统计量, M 0 = 0.333 M_{0} = 0.333 M0=0.333
  3. 第三步,对照组和实验组混合后随机抽取样本组成A和B再计算两组平均值的差值,重复该过程1000次,上述1000次得到的数值组成统计量分布 M 1000 M_{1000} M1000
  4. 第四步,计算 M 1000 M_{1000} M1000大于 M 0 = 0.333 M_{0} = 0.333 M0=0.333的个数 n n n,概率 P = n / 1000 P=n/1000 P=n/1000。若 P < 0.05 P < 0.05 P<0.05则说明实验处理有助于提升结果,否则接受零假设。

自己撰写脚本

control <- c(73, 75, 78)
treatment <- c(68, 69, 80, 76, 82)

permute_fun <- function(x1, x2, times = 1000) {
  
  # x1 = control
  # x2 = treatment
  # times = 1000
  
  M0 <- mean(x1) - mean(x2)
  x <- c(x1, x2)
  
  M_distri <- c()
  for (i in 1:times ) {
    x1_new <- sample(x, length(x1))
    x2_new <- sample(x, length(x2))
    
    M_temp <- mean(x1_new) - mean(x2_new)
    M_distri <- c(M_distri, M_temp)
  }
  
  dat <- data.frame(Time = 1:times,
                    Value = M_distri)
  p_value <- length(M_distri[M_distri > M0]) / length(M_distri)
  p_label <- paste0("Pvalue = ", p_value, " (M1000 > M0)")
  
  pl <- ggplot(dat, aes(x = Value)) + 
    geom_histogram(aes(y=..density..), binwidth=.5, 
                   color = "black", fill = "white") +
    geom_density(alpha=.2, fill="#FF6666") +
    scale_x_continuous(expand = c(0, 0)) +
    scale_y_continuous(expand = c(0, 0)) +
    labs(title = "Distribution of M statistics",
         x = "Mean(group1) - Mean(group2)") +
    geom_vline(xintercept = M0, color = "red", linetype = "dashed", linewidth = 1) +  
    annotate("text", label = p_label, x = 4, y = 0.14, size = 4) +
    theme_bw()
  
  return(pl)
}

permute_fun(x1 = control, x2 = treatment)

在这里插入图片描述

结果:Pvalue > 0.05,说明实验处理对结果没有显著提升。

内置函数

除了自己撰写脚本外,还可以通过R包内置的函数实现两组置换检验。

EnvStats::twoSamplePermutationTestLocation(
  x = control,
  y = treatment,
  fcn = 'mean',
  alternative = 'greater',
  mu1.minus.mu2 = 0,
  paired = FALSE,
  exact = FALSE,
  n.permutations = 1000,
  seed = 123)
Results of Hypothesis Test
--------------------------

Null Hypothesis:                 mu.x-mu.y = 0

Alternative Hypothesis:          True mu.x-mu.y is greater than 0

Test Name:                       Two-Sample Permutation Test
                                 Based on Differences in Means
                                 (Based on Sampling
                                 Permutation Distribution
                                 1000 Times)

Estimated Parameter(s):          mean of x = 75.33333
                                 mean of y = 75.00000

Data:                            x = control  
                                 y = treatment

Sample Sizes:                    nx = 3
                                 ny = 5

Test Statistic:                  mean.x - mean.y = 0.3333333

P-value:                         0.497

结果:Pvalue > 0.05,说明实验处理对结果没有显著提升。

总结

  • 置换检验思想不仅仅可以用于参数未知和分布未知的小样本数据,也可以用于大样本数据(计算代价较高);

  • 置换检验也适合组间样本量不平衡的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/749302.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

上班族真的有必要买智能猫砂盆吗?解放双手刻不容缓!

养猫家庭真是出不了一点远门&#xff0c;但凡外出的时间久了&#xff0c;家里的猫屎就堆积成山&#xff0c;不及时铲掉的话&#xff0c;回来一进门就能在猫砂盆中挖出满满当当的“宝藏”&#xff0c;仔细一闻还能闻到空气中散发的阵阵“清香”。忍无可忍的我最后借助科技的力量…

探索强化学习(人工智能重要子领域):原理、算法及应用

引言 人工智能&#xff08;Artificial Intelligence, AI&#xff09;作为一个广泛的领域&#xff0c;旨在使机器具备模仿或超越人类智能的能力。机器学习&#xff08;Machine Learning, ML&#xff09;是实现这一目标的重要手段&#xff0c;通过数据驱动的方法&#xff0c;使机…

Android笔记-adb keycode大全

使用方法 用adb发送按键事件时&#xff0c;可以使用下面表中的枚举值或者直接使用数值&#xff0c;比如 adb shell input keyevent KEYCODE_HOME 或者 adb shell input keyevent 3 下面按三种排序方法列出所有按键的 keycode&#xff0c; 分别是&#xff1a; 按功能分 按枚…

keil仿真,查看函数执行时间和执行次数

Execution Profiler执行档案器 The Execution Profiler records timing and execution statistics about instructions for the complete program code. To view the values in the Editor or Disassembly Window, use Show Time or Show Calls from the menu Debug — Executi…

Maven高级的聚合和继承

聚合和继承 我们的项目已经从以前的单模块&#xff0c;变成了现在的多模块开发。项目一旦变成了多模块开发以后&#xff0c;就会引发一些问题&#xff0c;在这一节中我们主要会学习两个内容聚合和继承&#xff0c;用这两个知识来解决下分模块后的一些问题。 3.1 聚合 分模块开…

风控图算法之社群发现算法(小数据集Python版)

风控图算法之社群发现算法&#xff08;小数据集Python版&#xff09; 在风险控制领域&#xff0c;图算法扮演着日益重要的角色。&#xff08;这方面的资料有很多&#xff0c;不再赘述&#xff09; 图算法在风控场景的应用 图分析方法在业务风控中的应用 特别是社群发现算法&a…

软件测试必看!5分钟掌握sql查询的聚合函数

数据查询操作之排序 语法格式&#xff1a; select * from 表名 order by 字段名 asc| desc 重点&#xff1a; 1 字段名可以有多个&#xff0c;如果字段名1 相同&#xff0c;再按照字段名2排序 2 默认情况下按照从小到大去排列 3 asc 就是从小到大排列 desc 从大到小排列 …

每个 Node.js 开发人员都应该知道的13个库(上)

1. Sequelize Sequelize是一个基于promise的Node.js对象关系映射器&#xff08;ORM&#xff09;&#xff0c;它使开发人员更容易使用关系数据库。 支持PostgreSQL&#xff0c;MySQL&#xff0c;MariaDB&#xff0c;SQLite和更多数据库。 Sequelize使用JavaScript对象对数据库…

二叉树——二叉树的构建及遍历

目录 1&#xff1a;题目分析和思路 1&#xff1a;分析 2&#xff1a;思路 2&#xff1a;代码实现及分析 1&#xff1a;构建结构体 2&#xff1a;主函数 2&#xff1a;创建二叉树 3&#xff1a;中序遍历 3&#xff1a;总代码 1&#xff1a;题目分析和思路 1&#xff1…

Web应用安全测试-专项漏洞(一)

Web应用安全测试-专项漏洞&#xff08;一&#xff09; 专项漏洞部分注重测试方法论&#xff0c;每个专项仅列举一个例子。实际测试过程中&#xff0c;需视情况而定。 文章目录 Web应用安全测试-专项漏洞&#xff08;一&#xff09;Web组件&#xff08;SSL/WebDAV&#xff09;漏…

力扣爆刷第155天之TOP100五连刷41-45(下一个排列、正序数组中位数、归并排序链表)

力扣爆刷第155天之TOP100五连刷41-45&#xff08;下一个排列、正序数组中位数、归并排序链表&#xff09; 文章目录 力扣爆刷第155天之TOP100五连刷41-45&#xff08;下一个排列、正序数组中位数、归并排序链表&#xff09;一、31. 下一个排列二、4. 寻找两个正序数组的中位数三…

明明设置允许跨域,为什么还会出现跨域请求的问题

一、问题 在微服务项目中&#xff0c;明明已经设置允许跨域访问&#xff1a; 为什么还会出现跨域请求问题&#xff1f; 二、为什么 仔细查看错误提示信息&#xff1a;When allowCredentials is true, allowedOrigins cannot contain the special value "*" since t…

单元测试,一直转圈,既不报错也不运行结束(ssm junit4 test )

修改dataSource.properties文件 然后把mysql.version的版本修改为8.x.x 如果没有效果&#xff0c;再看看连接数据库的用户名和密码是否正确&#xff0c;一般是连接数据库出了错&#xff0c;单元测试才回一直转圈&#xff0c;我是检查了一上午才发现&#xff0c;用户名错了。 检…

性能测试 —— Jmeter日志查看与分析

一、Jmeter日志概览 Jmeter日志文件保存在bin目录中&#xff0c;名称为jmeter.log。我们可以在面板中直接察看日志&#xff0c;点击右上角黄色标志物可以打开日志面板&#xff0c;再次点击收起 另外&#xff0c;Jmeter可以很方便地设置日志输出级别&#xff1a; 通过这种方式修…

工业制造业怎样进行进行智能、高效的机台文件管控?

对于工业制造业而言&#xff0c;机台是极为关键的基础设施&#xff0c;是正常生产经营的前提。工业制造业的机台包括很多种类&#xff0c;数控机床、防静电工作台、旋转工作台、机床工作台、车床等。 工业制造业机台产生的文件类型也有很多种类&#xff0c;如&#xff1a; 工艺…

NUC 14 Pro+:超越想象,夏日必备神机

夏日最让打工人意难平的大概是呼呼作响的主机风扇&#xff0c;即使在凉爽的空调房中&#xff0c;轰响的主机也让人心浮气躁。要怎样才能与它和平共处&#xff1f;它怎么就不明白&#xff0c;安安静静的陪伴真的很重要&#xff01; 这时候NUC 14 Pro 就是你最佳的伙伴 &#xff…

【专业性强】地球科学SCI期刊,中科院2区,学术影响力大

一、期刊名称 GIScience & Remote Sensing 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;地球科学 影响因子&#xff1a;6.7 中科院分区&#xff1a;2区 三、期刊征稿范围 GIScience & Remote Sensing是一本完全开放获取的期刊&#xff0c;发表…

音视频开发30 FFmpeg 视频编码- 流程以及重要API,H264编码原理说明,该章节使用h264编码说明

一.H264编码原理 1 视频为什么需要进行编码压缩 ◼ 一张为 720x480 的图像&#xff0c;用 YUV420P 的格式来表示&#xff0c;其大小为&#xff1a; 720*480*1.5 约等于 0.5MB 。 ◼ 如果是 25 帧&#xff0c; 10 分钟的数据量 0.5M*10*60*25 7500MB -> 7GB 多 ◼ …

RestTemplate修改默认转换器,使用FastJsonConverter

问题描述&#xff1a; 在使用RestTemplate发送POST请求时&#xff0c;发现发送的数据并未按配置的JSONField转换&#xff0c;导致服务方一直收不到参数 排查过程&#xff1a; 将itemList改成Items传输即可 原因分析&#xff1a; RestTemplate有默认的转换器&#xff0c;所以…

引入基于图的增强框架实现大模型的可控文本生成

尽管LLMs能够生成丰富多样的文本&#xff0c;但它们在生成特定属性文本时仍面临挑战。例如&#xff0c;如何确保生成的文本不仅语言流畅、语义准确&#xff0c;同时还具有所需的情感色彩或避免包含不当内容&#xff0c;是一个亟待解决的问题。传统的可控文本生成&#xff08;CT…