数据的独立同分布检验

一  同分布检验

 

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

posted @ 2015-07-08 11:25  kongmeng  阅读(9976)  评论(3编辑  收藏  举报