R语言与抽样技术学习笔记(Randomize,Jackknife,bootstrap)

Jackknife算法

  Jackknife的想法在我很早的一篇博客《R语言与点估计学习笔记(刀切法与最小二乘估计)》就提到过。其思想以一言蔽之就是:将样本视为总体,在“总体”中不放回地抽取一些“样本”来做统计分析。今天我们来讨论Jackknife应该怎么做以及为什么要这么做。

Jackknife的算法描述

  Jackknife方法利用系统的划分数据集的办法来推测总体样本估计量的一些性质。Quenouille建议用它来估计偏差,随后John Tukey证实它用来估计估计量的方差也是极好的。
  假设我们有随机样本\( X_{1},\cdots,X_{n} \),并从中计算统计量T去估计总体的参数\( \mu \)。在Jackknife方法下,我们将给定数据集划分为r组,每组数据量为k。
  现在,我们移除样本中第\( j^{th} \)组数据,并用剩下的数据来估计参数\( \mu \),并将估计量记为\( T_{(-j)} \)。\( T_{(-j)} \)的均值\( \overline{T}_{(\cdot)} \)可以用来估计参数\( \mu \),\( T_{(-j)} \)也可以用来获取估计量T更多的信息,但是必须要指出的是Jackknife不会提供比总体样本更多的信息(任何抽样技术都是不会的!!!);当T是无偏估计时,\( T_{(-j)} \)也是,T是有偏的估计量时,\( T_{(-j)} \)也是,但是会有一点点的不同。
  我们有时也对T与\( T_{(-j)} \)的不同进行加权处理,得到新的统计量:\[ T_{j}^{*}=rT-(r-1)T_{(-j)} \]这就是许多文献中提到的Jackknife“伪值”,并将这些伪值的均值称为“Jackknifed”T,记为T(J)。显然\( J(T)=rT-(r-1)\overline{T}_{(\cdot)} \)。  通常情况下,我们取k=1,r=n。在某些特定条件下,它是最优的。
  现在我们来考虑一下Jackknife对估计量偏差与方差的估计。我们这里采用伪值来考虑问题,认为伪值的偏差就是估计量的偏差,伪值的方差就是估计量的方差。那么我们有\[ Bias=E(J(T))-\mu=E(T)+(r-1)E(T-\frac{1}{r}\sum_{j=1}^{r}T_{(-j)})-\mu \]我们不妨取r=n,k=1,T对\( \mu \)的估计的偏差肯定是\( O(\frac{1}{n}) \)或\( o(\frac{1}{n}) \),忽略高阶量,那么偏差的近似估计量为:\[ bias\approx(n-1)(\overline{T}_{(\cdot)})-T)\\\overline{T}_{(\cdot)})=\frac{1}{n}\sum_{j=1}^{n}T_{(-j)} \]虽然这些伪值不是独立的,但是,我们仍不妨假设他们是独立的,因为这样我们利用伪值估计估计量的方差变得十分简单:\[ \hat{V(T)}_{J}=\frac{\sum_{j=1}^{r}(T_{j}^{*}-J(T))^2}{r(r-1)}=\frac{n-1}{n}\sum_{j=1}^{r}(T_{j}^{*}-J(T))^2 \]  我们以正态总体为例来考虑这个问题。

data.sim <- rnorm(30, 5, 3)
(mu.hat <- mean(data.sim))
## [1] 4.339
n <- length(data.sim)
mu.jack <- NULL
for (i in 1:n) {mu.jack[i] <- mean(data.sim[-i])
}
(jack.estimate <- mean(mu.jack))
## [1] 4.339

  可以看到,矩估计的估计值为4.3393,Jackknife估计为4.3393,较真值5而言,估计效果还是可以的。我们还可以计算偏差:

(bias <- (n - 1) * (mean(mu.jack) - mu.hat))
## [1] 0

  可以看到,这是一个无偏估计,不是吗?
  当然,要估计我们采取的估计量的方差也是可以的:

var <- mean((mu.jack - mean(mu.jack))^2) * (n - 1)
print(var)
## [1] 0.4612

  可以看到估计量的方差为0.4612与正态总体均值的标准差的理论值0.3相差不大。

Jackknife与偏差纠正

  我们这里将要说明Jackknife最大的作用——纠正偏差。
  我们都知道,我们对参数估计最常用的办法就是矩估计与极大似然估计。然而这两种估计不一定是无偏的。例如\( [0,\theta] \)上的均匀分布\( U(\theta) \)的参数\( \theta \)的极大似然估计就不是无偏的,在比如正态分布\( N(\mu,\sigma) \)中标准差的似然估计也不是无偏的。这些很容易证明,当然,你也可以查阅王兆军的《数理统计讲义》,上面给出了详细的说明。  当然这些偏差我们都可以通过对估计量做一些变换得到无偏估计量,但是这些常数还是不太容易通过普适的办法得到,而大偏差估计往往被视为估计的不足,得到一种在不增加方差的基础上,纠正偏差的办法是很好的,这就是我们现在讨论的Jackknife。
  设T(X)是基于样本X的参数\( g(\theta) \)的估计量,且满足\( E_{\theta}T(\textbf{X})=g(\theta)+O(\frac{1}{n}) \),Jackknife偏差修正估计量为\( T_{J}=nT-(n-1)\overline{T}_{(\cdot)} \),Jackknife统计量具有如下性质:\[ E_{\theta}T_{J}(\textbf{X})=g(\theta)+O(\frac{1}{n^2}) \]

  证明十分的简单,注意到\( J(T) \)的表达式,利用定义即可证明。(上一小节我们也间接地证明过了这一事实)
  我们最后来看一个例子:我们知道均匀分布\( U(\theta) \)的参数\( \theta \)的极大似然估计是渐进无偏而非真正无偏的,我们假设样本为\( x_{1},\cdots,x_{n} \),\( \theta \)的极大似然估计是\( x_{(n)} \)(即样本中的最大值),我们知道\( E(X_{(n)})=\frac{n}{n+1}\theta \),所以似然估计的偏差是\( O(\frac{1}{n}) \),我们使用Jackknife看看能不能缩减方差:

data.sim <- runif(100, 0, 7)
theta.hat <- max(data.sim)
theta.jack <- NULL
for (i in 1:length(data.sim)) {theta.jack[i] <- max(data.sim[-i])
}
n <- length(data.sim)
theta.jackestimate <- n * theta.hat - (n - 1) * mean(theta.jack)
cat("original bias is ", 7 - theta.hat, "after jackknife the bias is ", 7 - theta.jackestimate)
## original bias is  0.002576 after jackknife the bias is  -0.1084

  我们从上面的运行结果可以清楚的看到Jackknife之后,偏差确实减少了。这也是符合我们的想法的,因为当k变大时,Jackknife估计更接近均值的两倍,即它更接近矩估计,而矩估计是无偏的。当然一味追求无偏是不对的,对于一个有偏估计,其偏差趋于0时,可能导致方差变得很大。

Jackknife失效

  若估计量不够平滑,每次删掉一个数据的Jackknife就会失效,估计也不再具备相合性。
  例如:利用Jackknife方法估计从1到100中随机抽出的10个数的中位数的标准差。

n <- 10
x <- sample(1:100, size = n)
M <- NULL
for (i in 1:n) {y <- x[-i]M[i] <- median(y)
}
cat("M=", M)
## M= 46 46 40 40 40 46 40 46 46 40
M.ave <- mean(M)
print(sqrt((n - 1)/n * sum((M - M.ave)^2)))
## [1] 9

  我们可以看到这个估计量的标准差很不对的,因为每次缺省1个值,中位数也就至多会有两个取值,无论你的样本容量取值多大,这都是不对的。Enfro(1993)提出了delete K Jackknife算法解决这个问题。但是这个要求还是很高的,它要求n,k都比较大。那么好的估计方法应该是什么呢?这就要用到我们接下来将要介绍的bootstrap方法。


本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

R语言与抽样技术学习笔记(Jackknife)相关推荐

  1. R语言在抽样技术中的运用

    并未获得转载授权,所以只发布链接,方便自己在学习中遇到困难时查找. 内容包含:简单随机抽样.分层抽样.系统抽样.PPS抽样.Brewer抽样.整群抽样 摘录|R语言在抽样技术中的运用 - 唐亦六安的文 ...

  2. R语言与函数估计学习笔记(函数模型的参数估计)

    R语言与函数估计学习笔记 毫无疑问,函数估计是一个比参数估计要复杂得多的问题,当然也是一个有趣的多的问题.这个问题在模型未知的实验设计的建模中十分的常见,也是我正在学习的内容的一部分. 关于函数估计我 ...

  3. R语言基础入门(学习笔记通俗易懂版)

    文章目录 R语言预备知识 获取工作目录 设置工作目录 注释 变量名的命名 赋值 变量的显示 查看与清除变量 函数帮助文档查询 函数 安装R包 文件的读取 文件的输出 软件的退出与保存 R语言语法 向量 ...

  4. R语言:数量生态学学习笔记——doubs数据探索(1)

    数据提取 1.安装doubs数据所在的包并载入 install.packages("ade4") library(ade4) 2.找到ade4中的数据集"doubs&qu ...

  5. SpringBoot整合第三方技术学习笔记(自用)

    SpringBoot整合第三方技术学习笔记 搬运黑马视频配套笔记 KF-4.数据层解决方案 KF-4-1.SQL 回忆一下之前做SSMP整合的时候数据层解决方案涉及到了哪些技术?MySQL数据库与My ...

  6. java mvc框架代码_JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码)

    原标题:JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码) JavaEE体系结构包括四层,从上到下分别是应用层.Web层.业务层.持久层.Struts和SpringMVC是Web层的 ...

  7. 小五思科技术学习笔记之SSH

    下面介绍一下相关概念: SSH的概念: SSH的英文全称为Secure Shell,SSH使用TCP的22号端口,其目的是要在非安全的网络上提供安全的远程登陆和其他安全的网络服务, 为什么要使用SSH ...

  8. ssm 转发请求_千呼万唤!阿里内部终于把这份SSM框架技术学习笔记分享出来了...

    SSM SSM(Spring+SpringMVC+MyBatis)框架集由Spring.MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容).常作为数据源较简单的web项 ...

  9. R语言神经网络与深度学习(一)

    #R语言神经网络与深度学习(一) #画出ReLU函数 x=seq(-1,1,0.1)   #生成x变量,赋值-1~1等差数列 relu=function(x) ifelse(x>0,x,0)   ...

最新文章

  1. 关于Python的一点学习总结(55-time的使用)
  2. 脑电数据的Epoching处理
  3. JDK1.6安装与环境变量设置详细图解
  4. 燕赵志愿云如何认证_如何成为中国志愿服务网注册志愿者?操作秘籍!
  5. C#中GDI绘制高质量平滑图形实例
  6. Java Date Nuances的痛苦提醒
  7. php asp.net 代码量少,.NET_asp.net 反射减少代码书写量, 复制代码 代码如下:public b - phpStudy...
  8. pytorch学习笔记(3):常用网络层介绍
  9. ReplaceAll()和Replace的实战用法
  10. 阿里云云计算 12 对象存储 Object Storage Service OSS 的概念
  11. 2020-08-21 第一次面试小结
  12. 易鲸捷钱库新特性之SQL级别HINT功能初见
  13. 漫威电影宇宙观影指南,口碑票房最佳都是谁
  14. 丹佛机场行李系统案例分析
  15. Unity3D教程笔记——unity初始02
  16. 计算机网络有哪些分类方式,计算机网络有哪些分类?
  17. puzzle(0151)《24点》
  18. 浅谈OpenNI之我见
  19. java求长方体体积用什么类_Java题求解: 设计一个求长方体的体积和表面积的类Cube,包括以下属性和方法。 l1:长方体...
  20. 三菱系统四轴正反转参数_三菱第四轴参数.docx

热门文章

  1. c#中使用Zlib压缩与解压的方法
  2. GAN Inversion: A Survey
  3. OriginPro2022安装过程
  4. 【日语】标日初级上册单词(1-4)1
  5. 黑客用python还是ruby-python和ruby,我选谁?
  6. 中国股市稳赚不赔秘诀----中国股市定律
  7. 6666666666欢迎使用CSDN-markdown编辑器
  8. 使用ffmpeg命令行实现一入多出转码
  9. 用SW绘制3D打印版“同步轮”(可配合标准同步带使用)
  10. 智能家居(13)——智能家居控制系统