统计学 | bootstrap 和 permutation test 的区别与联系?

news/2024/12/2 12:45:28/

如果我有两组数字,想做统计检验其差异。
但是样本太小,不确定原始分布,只能做非参数检验。

0. 准备数据集

a1, a2 之间不显著,t test p=0.11
a1,a2B 之间显著,t test p=0.023

a0=1:20; a0
a1=a0[1:7]; a1
a2=a0[c(1:7) + 2.999999999]; print(a2); t.test(a1, a2) #0.11
a2B=a0[c(1:7) + 3]; print(a2B); t.test(a1, a2B) #0.023

1. bootstrap 法:错误用法

  1. 每组抽样,算均值。
  2. 抽样n次。
  3. 计算两组之间一系列均值的统计学差异…

结果发现,随着抽样次数n的增高,t.test 差异越来越显著。
这种方法是错的!

因为没有拿到稳定的p值。甚至相当于变相增加了样本量,而实际上样本量是固定的。

# 各抽样3次
my.boot = function(a1, a2, n=3){#n=3arr1=c()arr2=c()len=length(a1)/2for(i in 1:n){arr1=c(arr1, mean(sample(a1, len, replace = F)) )arr2=c(arr2, mean(sample(a2, len, replace = F)) )}hist(arr1, n=20, col="#FF000055", main=n)hist(arr2, n=20, col="#00FFFF55", add=T)pval=t.test(arr1, arr2)$p.valuec(n, pval)
}

(1) 不显著组:也显著了

my.boot(a1, a2, 3)
my.boot(a1, a2, 30)
my.boot(a1, a2, 300)
my.boot(a1, a2, 3000)
my.boot(a1, a2, 30000)

在这里插入图片描述
在这里插入图片描述

(2) 显著的组

set.seed(42)
my.boot(a1, a2B, 3)
my.boot(a1, a2B, 30)
my.boot(a1, a2B, 300)
my.boot(a1, a2B, 3000)
my.boot(a1, a2B, 30000)

在这里插入图片描述
在这里插入图片描述

2. bootstrap 法:对统计学的模糊启发

bootstrap法是用来求mean±ci的。

如果非要求p值,应该每次抽样都计算组件p值,
如果不显著,理论上每次抽样计算的p值是均匀分布,且p=1特别高频。
如果显著,每次抽样计算的p值会向着0倾斜,且p=1频率较低。

my.boot2 = function(a1, a2, n=3){#n=3arrP=c()len=length(a1)/2for(i in 1:n){#arr1=c(arr1, mean(sample(a1, len, replace = F)) )#arr2=c(arr2, mean(sample(a2, len, replace = F)) )arr1=sample(a1, len, replace = F)arr2=sample(a2, len, replace = F)arrP=c(arrP, t.test(arr1, arr2)$p.value)}hist(arrP, n=100, main=n)
}

(1) 不显著组:应该是均匀分布

set.seed(42)
par(mfrow=c(1,4))
my.boot2(a1, a2, 300)
my.boot2(a1, a2, 3000)
my.boot2(a1, a2, 30000)
my.boot2(a1, a2, 60000)

在这里插入图片描述

  • p=1有一个类似旗杆的bar: 记忆:像是杨戬和孙悟空比试时,孙悟空变化出来的房子和露馅的旗杆。
  • 原理:p<P的概率等于p,则该分布是均匀分布: P(t<T) = P(p<P) = P

我没怎么看懂,谁懂数学,可以证明一下,留言给个链接。。。。

(2) 显著组:p值的分布向着0倾斜

set.seed(42)
par(mfrow=c(1,4))
my.boot2(a1, a2B, 300)
my.boot2(a1, a2B, 3000)
my.boot2(a1, a2B, 30000)
my.boot2(a1, a2B, 60000)

在这里插入图片描述

3. permutation test

  1. 所有数据打乱
  2. 前一部分作为a组,后一部分作为b组。
  3. 求每组的差
  4. 重复以上过程n次,做分布
  5. 判断真实差值在以上分布中的显著性

随着n的提升,p值慢慢稳定。
这才是统计学该有的样子。

##
my.permut=function(a1, a2, n){dif.real = mean(a1) - mean(a2)dat0=c( a1, a2 )dif=c()for(i in 1:n){# 打乱dat=sample(dat0)a1B=dat[1:length(a1)]a2B=dat[(length(a1)+1):length(dat)]dif=c(dif, mean(a1B) - mean(a2B) )}pval=pnorm(dif.real, mean= mean(dif), sd=sd(dif) )hist(dif, n=100, main=sprintf("n=%s\np=%s", n, pval ))abline(v=dif.real, col="red", lty=2)
}

(1) 不显著组:还是不显著

set.seed(42)
par(mfrow=c(2,3))
my.permut(a1, a2, 3)
my.permut(a1, a2, 30)
my.permut(a1, a2, 300)
my.permut(a1, a2, 3000)
my.permut(a1, a2, 30000)
my.permut(a1, a2, 60000)

在这里插入图片描述

(2) 显著组:依旧显著

set.seed(42)
par(mfrow=c(2,3))
my.permut(a1, a2B, 3)
my.permut(a1, a2B, 30)
my.permut(a1, a2B, 300)
my.permut(a1, a2B, 3000)
my.permut(a1, a2B, 30000)
my.permut(a1, a2B, 60000)

在这里插入图片描述


End


http://www.ppmy.cn/news/1551753.html

相关文章

服务器实现ssh证书登录

1.生成公钥和私钥 ssh-keygen -t rsa 提示默认生成位置为/root/.ssh/id_rsa ,直接回车。(也可以自己修改) 提示输入证书的密码&#xff0c;可以留空&#xff0c;建议输入&#xff0c;如果输入了&#xff0c;则需要再次确认&#xff0c;记住这个证书密码&#xff08;证书再加…

MySQL的innodb格式表批量插入数据时,自增主键不连续原因和解决办法

问题说明 在mysql中造测试数据时&#xff0c;出现了主键不连续的情况 CREATE TABLE test ( id int NOT NULL AUTO_INCREMENT COMMENT ID, name varchar(255) , PRIMARY KEY (id) );insert into test (name) VALUES (A);insert into test (name) select name from test; in…

vue3+vite使用vite-plugin-electron-renderer插件和script-loader插件有冲突

报错信息&#xff1a;Error: Dynamic require of "path" is not supported 报错问题是在使用vite-plugin-electron-renderer插件不支持import动态引入&#xff0c;该报错信息并不准确&#xff0c;实际原因是vite-plugin-electron-renderer插件和script-loader插件有…

反向传播、梯度下降与学习率:深度学习中的优化艺术

目录 反向传播&#xff1a;神经网络的学习机制 梯度下降&#xff1a;优化算法的基石 学习率&#xff1a;平衡速度与稳定性的关键 学习率的调整策略 固定学习率 学习率衰减 自适应学习率 梯度消失与梯度爆炸 结语 在深度学习的领域中&#xff0c;构建一个有效的神经网络…

从0开始学PHP面向对象内容之常用设计模式(策略,观察者)

PHP设计模式——行为型模式 PHP 设计模式中的行为模式&#xff08;Behavioral Patterns&#xff09;主要关注对象之间的通信和交互。行为模式的目的是在不暴露对象之间的具体通信细节的情况下&#xff0c;定义对象的行为和职责。它们常用于解决对象如何协调工作的问题&#xff…

python array矩阵相关操作

目录&#xff1a; 一、判断某个值是否在array二维数组的某列中 二、根据某列中的特定值筛选array数组 三、查找一个元素在二维 array 矩阵中的位置 四、判断array数组中的每个元素是否包含特定的子字符串 一、判断某个值是否在array二维数组的某列中 在 Python 中&#xf…

从 HTML 到 CSS:开启网页样式之旅(五)—— CSS盒子模型

从 HTML 到 CSS&#xff1a;开启网页样式之旅&#xff08;五&#xff09;—— CSS盒子模型 前言一、盒子模型的组成margin&#xff08;外边距&#xff09;&#xff1a;border&#xff08;边框&#xff09;&#xff1a;padding&#xff08;内边距&#xff09;&#xff1a;conten…

Rook入门:打造云原生Ceph存储的全面学习路径(下)

文章目录 六.Rook部署云原生CephFS文件系统6.1 部署cephfs storageclass6.2 创建容器所需cephfs文件系统6.3创建容器pod使用rook-cephfs提供pvc6.4 查看pod是否使用rook-cephfs 七.Ceph Dashboard界面7.1 启用dashboard开关7.2 ceph-dashboard配置外部访问7.3 Dashboard web ad…