什么是游程检验

游程检验:是根据样本标志表现排列所形成的游程的多少进行判断的检验方法,主要用于检验一件事件的发生是否是随机的。游程检验广泛应用于工业产品的质量检验和生物制药检验等领域。随着大数据技术的兴起。游程检验也不断体现着他的作用。

scala实现随机游程检验

import breeze.stats.distributions._

import math._

/**

* RunsTest

* @param serise

**/

def runsTest(serise: Seq[Int], alternative: String = hypothesis.twosided) = {

if (serise.distinct.length > 2) {

println("the serise need 0-1 destribution")

} else {

// 计算序列长度

val slen = serise.length

// 计算游程数

var runsTimes = 1

for (i <- 0 until slen - 1) {

if (serise(i) != serise(i + 1)) runsTimes += 1 else runsTimes

}

val m = serise.filter(_ == 1).size

val n = serise.filter(_ == 0).size

val E = 1 + 2 * n * m / (n + m)

val s2 = (2 * n * m * (2 * n * m - n - m)) / (math.pow(n + m, 2) * (n + m - 1))

// 构建检验统计量(大样本条件下的服从正态分布)

val statistic = (runsTimes - E) / math.sqrt(s2)

val norm = new Gaussian(0, 1)

// 计算正态分布的分布函数值

def pnorm(statistic: Double) = {

norm.probability(Double.NegativeInfinity, statistic)

}

// 求不同假设条件下的p值

val pvalue: Double = if (alternative == "positive.correlated") {

// "Runs Test - Positive Correlated"

pnorm(statistic)

} else if (alternative == "negative.correlated") {

// "Runs Test - Negative Correlated"

1 - pnorm(statistic)

} else {

// "Runs Test - Two sided"

2 * min(pnorm(statistic), 1 - pnorm(statistic))

}

// 返回检验统计量和p值

(statistic, pvalue)

}

}

我们来看一个例子(这个例子不是很贴切,但是可以说明问题):假设抛一枚硬币,出现正面我们记为1,反面记为0,在反复抛了10次之后我们得出如下结果:(1,0,1,1,0,0,1,1,1,0)

我们想要通过结果判断该硬币是否是公平的,此时我们就可以应用游程检验的方法。首先呢我们建立假设:

H0:抛硬币的结果是随机的(即硬币是公平的)

H1:抛硬币的结果是非随机的(即硬币是不公平的)

val run = Array(1,0,1,1,0,0,1,1,1,0)

val value = runsTest(run)

println(value)

(0.7024393586862705,0.48240520716622526)

检验的结果 p-value =0.48 >0.05*,我们可以认为没有充分的证据拒绝原假设,所以认为该硬币是公平的

那么如果抛硬币的结果为(0, 1, 0, 1, 0, 1, 0, 1, 0, 1)呢?

明显,这样的结果不是随机的,它已经具有周期性了。我们还是用上面的方法做检验:

val run = Array(0, 1, 0, 1, 0, 1, 0, 1, 0, 1)

val value = runsTest(run)

println(value)

(2.6832815729997477,0.007290358091535776)

p-value < 0.05 ,所以呢我们拒绝原假设。可以认为这枚硬币是有问题的(也可能是抛硬币的人有问题哦)

*关于p-value 选定的显著性水平通常情况下都选为0.05,当然也可以根据实际需求做相应调整

R语言实现随机游程检验

游程检验用R语言实现可以参考 吴喜之老师的《非参数统计》

也可以参考以下博文

https://blog.csdn.net/Yunru_Yang/article/details/62040455

参考资料

《非参数统计》第四版 吴喜之 赵博娟

https://blog.csdn.net/Yunru_Yang/article/details/62040455

部分代码参考自R语言 lawstat包

https://mirrors.tuna.tsinghua.edu.cn/CRAN/

Copyright © 2088 世界杯乒乓球赛_2014世界杯十佳球 - mz286.com All Rights Reserved.
友情链接