1. 程式人生 > >假設檢驗與引數估計的R語言實現

假設檢驗與引數估計的R語言實現

假設檢驗是推論統計中用於檢驗統計假設的一種方法。而“統計假設”是可通過觀察一組隨機變數的模型進行檢驗的科學假說。一旦能估計未知引數,就會希望根據結果對未知的真正引數值做出適當的推論。

統計上對引數的假設,就是對一個或多個引數的論述。而其中欲檢驗其正確性的為零假設(null hypothesis),零假設通常由研究者決定,反應研究者對未知引數的看法。相對於零假設的其他有關引數之論述是備擇假設(alternative hypothesis),它通常反應了執行檢定的研究者對引數可能數值的另一種(對立的)看法(換句話說,備擇假設通常才是研究者最想知道的)。

假設檢驗的種類包括:t檢驗,Z檢驗,卡方檢驗,F檢驗

等等。

說明

假設檢驗的過程,可以用法庭的審理來說明。先想像現在法庭上有一名被告,假設該被告是清白的,而檢察官必須要提出足夠的證據去證明被告的確有罪。 在證明被告有罪前,被告是被假設為清白的。
假設被告清白的假設,就相當於零假設(null hypothesis)。
假設被告有罪的假設,則是備擇假設(alternative hypothesis)。

而檢察官提出的證據,是否足以確定該被告有罪,則要經過檢驗。 這樣子的檢驗過程就相當於用T檢驗或Z檢驗去檢視研究者所蒐集到的統計資料。

檢驗過程

在統計學的文獻中,假設檢驗發揮了重要作用。假設檢驗大致有如下步驟:(最初研究假設為真相不明)

  • -: 第一步是提出相關的零假設和備擇假設。這是很重要的,因為錯誤陳述假設會導致後面的過程變得混亂。
  • -: 第二步是考慮檢驗中對樣本做出的統計假設;例如,關於獨立性的假設或關於觀測資料的分佈的形式的假設。這個步驟也同樣重要,因為無效的假設將意味著試驗的結果是無效的。
  • -: 決定哪個檢測是合適的,並確定相關檢驗統計量 T。
  • -: 在零假設下推導檢驗統計量的分佈。在標準情況下應該會得出一個熟知的結果。比如檢驗統計量可能會符合學生t-分佈或正態分佈。
  • -: 選擇一個顯著性水平 (α),若低於這個概率閾值,就會拒絕零假設。最常用的是 5% 和 1%。
  • -: 根據在零假設成立時的檢驗統計量T分佈,找到數值最接近備擇假設,且概率為顯著性水平 (α)的區域,此區域稱為“拒絕域”,意思是在零假設成立的前提下,落在拒絕域的概率只有α。
  • -: 針對檢驗統計量T,根據樣本計算其估計值tobs。若估計值tobs未落在“拒絕域”,接受零假設。
  • -:若估計值tobs落在“拒絕域”,拒絕零假設,接受備擇假設。

例子

淑女品茶是一個有關假設檢驗的著名例子,費雪的一個女同事聲稱可以判斷在奶茶中,是先加入茶還是先加入牛奶。費雪提議給她八杯奶茶,四杯先加茶,四杯先加牛奶,但隨機排列,而女同事要說出這八杯奶茶中,哪些先加牛奶,哪些先加茶,檢驗統計量是確認正確的次數。零假設是女同事無法判斷奶茶中的茶先加入還是牛奶先加入,備擇假設為女同事有此能力。

若單純以概率考慮(即女同事沒有判斷的能力)下,八杯都正確的概率為1/70,約1.4%,因此“拒絕域”為八杯的結果都正確。而測試結果為女同事八杯的結果都正確,在統計上是相當顯著的的結果。

引數估計

估計理論是統計學和訊號處理中的一個分支,主要是通過測量或經驗資料來估計概率分佈引數的數值。這些引數描述了實質情況或實際物件,它們能夠回答估計函式提出的問題。

例如,估計投票人總體中,給特定候選人投票的人的比例。這個比例是一個不可觀測的引數,因為投票人總體很大;估計值建立在投票者的一個小的隨機取樣上。

又如,雷達的目的是物體(飛機、船等)的定位。這種定位是通過分析收到的回聲(回波)來實現的,定位提出的問題是“飛機在哪裡?”為了回答這個問題,必須估計飛機到雷達之間的距離。如果雷達的絕對位置是已知的,那麼飛機的絕對位置也是可以確定的。

在估計理論中,通常假定資訊隱藏在包含噪聲的訊號中。噪聲增加了不確定性,如果沒有不確定性,那麼也就沒有必要估計了。

程式碼示例

set.seed(100)
x<-rnorm(50,mean=5,sd=2)
t.test(x,mu=5)$conf


(4.293170+5.359834)/2

x=c(1.22,1.23,1.18,1.31,1.25,1.22,1.24)
t.test(x,mu=1.2357,alt="less",conf=0.4,var=2)
# ?t.test


x=c(1.08,1.10,1.12,1.14,1.15,1.25,1.36,1.38,1.40,1.42)
y=c(1.11,1.12,1.18,1.22,1.33,1.35,1.36,1.38)
var.test(x,y,conf=0.9)


x=c(10.2,10.5,10.3,10.8,9.8,10.6,10.7,10.2,10.0)
y=c(9.8,9.6,10.1,10.2,10.7,9.7,9.5,9.8,9.9)
t.test(x,y)


A=c(81,79,82,79,83,80,83,81,80,77,74,81)
B=c(76,79,80,75,77,74,76,80,82,79,75,81)
t.test(A,B,alt="g",p=T)