數據的獨立同分布檢驗


一  同分布檢驗

 

1.1 判斷數據是否來自於某種分布

#產生100個標准正態分布隨機數
x <- rnorm(100)
#用kolmogorov-Smirnov檢驗數據是否符合正態分布
ks.test(x, "pnorm", 0, 1)

 

p值大於0.05,接受原假設,即原數據符合正態分布。

 

1.2  判斷兩組數據是否同分布

#產生100個標准正態分布隨機數
x <- rnorm(100)
#產生60個均勻分布隨機數
y <- runif(60)
#用kolmogorov-Smirnov檢驗數據x與y是否同分布
ks.test(x, y)

p值小於0.05,所以x與y分布不一樣。

 

非參數檢驗,kolmogorov-Smirnov檢驗是通過經驗分布於假設分布的上確界來構造統計量,因此理論上可以檢驗任何分布,即原假設

                              H0: X具有分布F

                              H1:X不具有分布F

類似的檢驗統計方法有Pearson擬合優度x^2(卡方)檢驗。兩個檢驗相比,ks檢驗不需要將樣本分組,少了一個任意性。缺點是只用在理論分布為一維

連續分布且完全已知的情形,試用面比Pearson檢驗小。研究顯示,在ks檢驗可用的情況下,其功效一般來說略優於Pearson檢驗。

 

1.3 判斷一組數據是否同分布

 

 

 

#檢驗樣本的參數是否是隨機變量
test <- function(x, alpha=0.05){
t
<- mean(x) n <- length(x) y <- var(x) za <- 1.64 if(alpha==0.1){ za <- 1.28 }else if(alpha == 0.01){ za <- 2.33 } if(y >= t*(1+sqrt(2/n)*za)){ ret <- 1 }else{ ret <- 0 } return (ret) }

 

二 獨立性檢驗

 

2.1 列聯表數據的獨立性檢驗

設兩個隨機變量X,Y是離散型的,X取值於{a1,a2,a3....,an},Y取值於{b1,b2,b3....,bn}.

設(X1,Y1),(X2,Y2),(X3,Y3),....,為簡單樣本,記nij為(X1,Y1),(X2,Y2),(X3,Y3)...,中等於(ai,bj)的個數,

要據此檢驗假設            H0:X與Y獨立

 

為了研究吸煙是否與患肺癌有關,對63位肺癌患者及43名非患癌患者(對照組)調查了其中的吸煙人數,得到2X2列聯表

                                    患肺癌             未患肺癌                  合計

吸煙                              60                   32                         92

不吸煙                           3                      11                        14

合計                              63                    43                         106

 

 

#輸入數據,用chisq.test()檢驗
x <- c(60, 3, 32, 11)
dim(x) <- c(2, 2)
chisq.test(x, correct=FALSE)

 

p值小於0.05,拒絕原假設,也就是吸煙與肺癌有關。類似的檢驗還有Fisher檢驗,McNemar檢驗等。

 

 

2.2 一組數據的獨立性檢驗

獨立性檢驗主要檢驗數據r1,r2,...rn中前后的統計相關性是否顯著。我們知道,兩個隨機變量的相關系數反應了他們之間的

線性相關程度,若兩個隨機變量相互獨立,則他們的相關系數必為0(反之不一定)。因此,可以用相關系數來檢驗隨機變量的獨立性。

給定隨機數r1.r2.r3,...rk,計算前后相距k的樣本的相關系數

    

 

對若干不同的k值做檢驗,提出原假設.若假設成立,則當n-k充分大是,統計量漸進與標准正態分布N(0,1).

在給定顯著性水平下,若拒絕原假設,則可認為r1.r2.r3,...rk有一定的線性相關性,則他們不是獨立的。

 

mylag <- function(obj, k=1){
  
  ret <- vector(length=length(obj)-k)
  for(i in ((k+1):length(obj))){
      ret[i-k] = obj[i]
  }
  return (ret)
}


Indtest <- function(x){
  n <- length(x)
  s <- var(x)
  me <-mean(x)
  ret <- vector(length=n-1)
  
  for(i in (1:(n-1))){
    ret[i] = ((1/(n-i))*sum(x[1:(n-i)]*mylag(x,k=i))-me**2)/s
  }
  
  return (ret)
  
}

#檢驗數據獨立性
x <- rnorm(100)
y <- Indtest(x)
ks.test(y, "pnorm", 0, 1)

 

參考資料

1 《統計建模與R軟件》 薛毅等  2007

2 《非壽險精算》 韓天雄  2011

3  R幫助文檔    help(Distributions)     http://127.0.0.1:20350/library/stats/html/Distributions.html

Kolmogorov-Smirnov Test     http://www.physics.csbsju.edu/stats/KS-test.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM