Jackknife 刀切法

一、简介

Jackknife(刀切法)是有Maurice Quenouille (1949)提出的一种再抽样方法,其原始动机是降低估计的偏差。Jackknife为一种瑞士小折刀,很容易携带。通过类比, John W. Tukey (1958)在统计学中创造了这个术语,作为一种通用的假设检验和置信区间计算的方法。

Jackknife类似于“Leave one out”的交叉验证方法。令X=(X1,X2,…,Xn)为观测到的样本,定义第i个Jackknife样本为丢掉第i个样本后的剩余样本即

由此生成的Jackknife样本集之间的差异很小,每两个Jackknife样本中只有两个单个的原始样本不同。

二、偏差的Jackknife估计

代码如下:

function out=jackbias(theta,orig)
%Estimate the bias using the jackknife
%Theta has to be a character string containg
% a valid function name
[n,p]=size(orig);
lot=feval(theta,orig(2:n,:));
k=length(lot);
lo=zeros(n,k);
lo(1,:)=lot;
lo(n,:)=feval(theta,orig(1:(n-1),:));
for i=(2:(n-1))
   lo(i,:)=feval(theta,orig([1:(i-1),(i+1):n],:));
end
thetadot=mean(lo);
out=(n-1)*(thetadot-feval(theta,orig));

三、标准差的Jackknife估计

代码如下:

function out=jackstd(theta,orig)
[n,p]=size(orig);
lot=feval(theta,orig(2:n,:));
k=length(lot);
lo=zeros(n,k);
lo(1,:)=lot;
lo(n,:)=feval(theta,orig(1:(n-1),:));
for i=(2:(n-1))
   lo(i,:)=feval(theta,orig([1:(i-1),(i+1):n],:));
end

thetadot=mean(lo);
out=sqrt((n-1)/n.*sum((lo-repmat(thetadot,n,[])).^2));

四、Jackknife不适合的场合

统计函数不是平滑函数:数据小的变化会带来统计量的一个大的变化如极值、中值。如对数据X=(10,27,31,40,46,50,52,104,146)的中值得到的结果为48,48,48,48,45,43,43,43,43,偶数个数的中值为最中间两个数的平均值。

五、Jackknife与Bootstrap自助法的联系

Efron1979年文章指出了自助法与刀切法的关系。首先,自助法通过经验分布函数构建了自助法世界,将不适定的估计概率分布的问题转化为从给定样本集中重采样。第二,自助法可以解决不光滑参数的问题。遇到不光滑(Smooth)参数估计时,刀切法会失效,而自助法可以有效地给出中位数的估计。第三,将自助法估计用泰勒公式展开,可以得到刀切法是自助法方法的一阶近似。第四,对于线性统计量的估计方差这个问题,刀切法或者自助法会得到同样的结果。但在非线性统计量的方差估计问题上,刀切法严重依赖于统计量线性的拟合程度,所以远不如自助法有效。

to be continued...

时间: 2024-10-05 21:16:30

Jackknife 刀切法的相关文章

编程算法基础-一刀切法

1.5一刀切法 编程和编筐一样,处理边缘问题相同重要. 程序逻辑 開始 中间 结束 一刀切法上式 用空格或逗号分隔的串,提取为各个部分 abc ttt,kmd,uuu xyz 切分成每一部分. /* * "abc ttt,kmd,uuu xyz" 用逗号或者空格隔开字符串 分解为各个部分 */ package OneCut; public class SplitString { public static void main(String[] args) { // 一刀切(上式:事先补

Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting的区别

引自http://blog.csdn.net/xianlingmao/article/details/7712217 Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting 这些术语,我经常搞混淆,现在把它们放在一起,以示区别.(部分文字来自网络,由于是之前记的笔记,忘记来源了,特此向作者抱歉) Bootstraping: 名字来自成语"pull up by your own

bootstrap, boosting, bagging 几种方法的联系

http://blog.csdn.net/jlei_apple/article/details/8168856 这两天在看关于boosting算法时,看到一篇不错的文章讲bootstrap, jackknife, bagging, boosting, random forest 都有介绍,以下是搜索得到的原文,没找到博客作者的地址, 在这里致谢作者的研究. 一并列出一些找到的介绍boosting算法的资源: (1)视频讲义,介绍boosting算法,主要介绍AdaBoosing    http:

数据挖掘中易犯的十大错误

按照Elder博士的总结,这10大易犯错误包括: 0. 缺乏数据(Lack Data)1. 太关注训练(Focus on Training)2. 只依赖一项技术(Rely on One Technique)3. 提错了问题(Ask the Wrong Question)4. 只靠数据来说话(Listen (only) to the Data)5. 使用了未来的信息(Accept Leaks from the Future)6. 抛弃了不该忽略的案例(Discount Pesky Cases)7.

转载:bootstrap, boosting, bagging 几种方法的联系

转:http://blog.csdn.net/jlei_apple/article/details/8168856 这两天在看关于boosting算法时,看到一篇不错的文章讲bootstrap, jackknife, bagging, boosting, random forest 都有介绍,以下是搜索得到的原文,没找到博客作者的地址, 在这里致谢作者的研究. 一并列出一些找到的介绍boosting算法的资源: (1)视频讲义,介绍boosting算法,主要介绍AdaBoosing    htt

统计学的领域

统计学的领域 作者注:本文是为中国人民大学统计学院本科院刊所写的稿件.走过了四年本科,觉得应该对后来人讲一些负责任的话,以使大家能更高效地学习.我认为人生的奋斗,怕的不是没有动力,而是有动力却不知道方向.因此,我把我所了解的统计学的领域介绍给大家,让大家早日了解一下统计学的基本内容,早日找到自己的方向.当然,仅仅四年的学习,得出的观点或多或少会浅薄,所以也请各位大师多多指点批评. 如果学了几年统计,还连统计的那个经典定义都背不出就不应该了,在此我不再啰嗦一遍.统计学也不是什么神秘的学科,它的目的

数据挖掘中易犯的几大错误【转载,侵删】

原文标题为"Top 10 Data Mining Mistakes",作者是John F. Elder IV, Ph.D.编译:IDMer(数据挖掘者)http://www.salford-systems.com/doc/elder.pdf 按照Elder博士的总结,这10大易犯错误包括: 0. 缺乏数据(Lack Data) 1. 太关注训练(Focus on Training) 2. 只依赖一项技术(Rely on One Technique) 3. 提错了问题(Ask the W

必看 :大数据挖掘中易犯的11大错误

0.缺乏数据(LackData) 对于分类问题或预估问题来说,常常缺乏准确标注的案例. 例如: 欺诈侦测(FraudDetection):在上百万的交易中,可能只有屈指可数的欺诈交易,还有很多的欺诈交易没有被正确标注出来,这就需要在建模前花费大量人力来修正. 信用评分(CreditScoring):需要对潜在的高风险客户进行长期跟踪(比如两年),从而积累足够的评分样本. 1.太关注训练(FocusonTraining) IDMer:就象体育训练中越来越注重实战训练,因为单纯的封闭式训练常常会训练

偏最小二乘回归分析建模步骤的R实现(康复俱乐部20名成员测试数据)+补充pls回归系数矩阵的算法实现

kf=read.csv('d:/kf.csv') # 读取康复数据kfsl=as.matrix(kf[,1:3]) #生成生理指标矩阵xl=as.matrix(kf[,4:6]) #生成训练指标矩阵x=slxy=xlyx0=scale(x)x0y0=scale(y)y0m=t(x0)%*%y0%*%t(y0)%*%x0meigen(m)w1=eigen(m)$vectors[,1]v1=t(y0)%*%x0%*%w1/sqrt(as.matrix(eigen(m)$values)[1,])v1t