熱線電話:13121318867

登錄
首頁精彩閱讀R語言與抽樣技術學習筆記(Jackknife)
R語言與抽樣技術學習筆記(Jackknife)
2017-07-20
收藏

R語言與抽樣技術學習筆記(Jackknife)

R語言與抽樣技術學習筆記(Randomize,Jackknife,bootstrap)

Jackknife算法

Jackknife的想法在我很早的一篇博客《R語言與點估計學習筆記(刀切法與最小二乘估計)》就提到過。其思想以一言蔽之就是:將樣本視為總體,在“總體”中不放回地抽取一些“樣本”來做統計分析。今天我們來討論Jackknife應該怎么做以及為什么要這么做。

Jackknife的算法描述

Jackknife方法利用系統的劃分數據集的辦法來推測總體樣本估計量的一些性質。Quenouille建議用它來估計偏差,隨后John Tukey證實它用來估計估計量的方差也是極好的。
  假設我們有隨機樣本X1,?,Xn,并從中計算統計量T去估計總體的參數μ。在Jackknife方法下,我們將給定數據集劃分為r組,每組數據量為k。
  現在,我們移除樣本中第jth組數據,并用剩下的數據來估計參數μ,并將估計量記為T(?j)。T(?j)的均值Tˉˉˉ(?)可以用來估計參數μ,T(?j)也可以用來獲取估計量T更多的信息,但是必須要指出的是Jackknife不會提供比總體樣本更多的信息(任何抽樣技術都是不會的?。。。?;當T是無偏估計時,T(?j)也是,T是有偏的估計量時,T(?j)也是,但是會有一點點的不同。
  我們有時也對T與T(?j)的不同進行加權處理,得到新的統計量:


這就是許多文獻中提到的Jackknife“偽值”,并將這些偽值的均值稱為“Jackknifed”T,記為T(J)。顯然  通常情況下,我們取k=1,r=n。在某些特定條件下,它是最優的。
  現在我們來考慮一下Jackknife對估計量偏差與方差的估計。我們這里采用偽值來考慮問題,認為偽值的偏差就是估計量的偏差,偽值的方差就是估計量的方差。那么我們有


我們不妨取r=n,k=1,T對μ的估計的偏差肯定是,忽略高階量,那么偏差的近似估計量為:


雖然這些偽值不是獨立的,但是,我們仍不妨假設他們是獨立的,因為這樣我們利用偽值估計估計量的方差變得十分簡單:


我們以正態總體為例來考慮這個問題。

    data.sim <- rnorm(30, 5, 3)  
    (mu.hat <- mean(data.sim))  

## [1] 4.339

[plain] view plain copy
 print?

    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,θ]上的均勻分布U(θ)的參數θ的極大似然估計就不是無偏的,在比如正態分布N(μ,σ)中標準差的似然估計也不是無偏的。這些很容易證明,當然,你也可以查閱王兆軍的《數理統計講義》,上面給出了詳細的說明?! ‘斎贿@些偏差我們都可以通過對估計量做一些變換得到無偏估計量,但是這些常數還是不太容易通過普適的辦法得到,而大偏差估計往往被視為估計的不足,得到一種在不增加方差的基礎上,糾正偏差的辦法是很好的,這就是我們現在討論的Jackknife。
  設T(X)是基于樣本X的參數g(θ)的估計量,且滿足,Jackknife偏差修正估計量為,Jackknife統計量具有如下性質:


證明十分的簡單,注意到J(T)的表達式,利用定義即可證明。(上一小節我們也間接地證明過了這一事實)
  我們最后來看一個例子:我們知道均勻分布U(θ)的參數θ的極大似然估計是漸進無偏而非真正無偏的,我們假設樣本為x1,?,xn,θ的極大似然估計是x(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方法。

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢