例子1:(数据run01.txt)假定我们投掷一个硬币,以概率p得到正面(记为1),以概率1-p得到反面(记为0);这是一个Bernoulli试验。如果这个试验是随机的,则不大可能出现许多1或0连在一起,也不可能1和0交替出现的太频繁。例如,下面为一例这样的结果:
000000011111110000111100
如果称连在一起的0或1为游程(run),则上面这组数有3个0游程,两个1游程,一共是5个游程(R=5)。这里0的总数为m=13,而1的总数为n=10。记总的试验次数为N,有N=m+n。假定在R软件中,x代表上面的数据;则游程总数可由下面语句求出:
> x<-read.table("F:\\潘\\R语言自编讲义\\非参数统计-基于王静龙的教材\\run01.txt")
> x<-x[,1]
> N<-length(x)
> k<-1
> for(i in 1:(N-1))
+ if(x!=x[i+1])
+ k<-k+1
> k
[1] 5
而0的个数m=13,1的个数n=10可以这样求出:
> m<-sum(1-x)
> n<-sum(x)
> c(m,n)
[1] 13 10
当然,出现多少0和1,出现多少游程都与概率p有关。
这里,p-值的求法,我用bootstrap的方法,模拟10000次,程序如下:
> #bootstrap 10000 times
> set.seed(123)
> R<-numeric()
> for(i in 1:10000){
+ xx<-sample(x,replace=F)
+ N<-length(xx)
+ k<-1
+ for(j in 1:(N-1))
+ { if(xx[j]!=xx[j+1])
+ k<-k+1 }
+ R<-k
+ }
> #p-value,5 is the obserivabled run number
> p1<-sum(R>5)/10000
> p2<-sum(R<5)/10000
> c(p1,p2)
[1] 0.9990 0.0002
结果为 p值是0.0002,这个结果说明本例的游程数为5,是非常小的。因此,我们显著的拒绝数据是随机性的原假设,而认为数据是非随机的。