- 积分
- 26487
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-4-14
- 最后登录
- 1970-1-1
|
发表于 2012-4-14 19:06:18
|
显示全部楼层
我来给大家权威介绍下:
情况是这样的:
魏老前辈程序当中,在计算每个样本的累计数有所偏差,其采用的计算方法为:
xi>=xj(1≤j<i)
而M—k检验的原理中关于累计数的计算与此有所差异,尤其是在序列当中存在相同数时,此差异就尤为明显,而且此差异导致的突变点的位置也相差较大,正确的计算方法应该是(修正版采用此计算方法):
xi>xj(1≤j≤i)
例如序列1,2,2
原版算法得出第3个样本的累计数为2,而正确算法当中得出的累计数为1,当这种情况在长序列中反复出现时,结果就会相差较大。
代码修改如下:
原代码:
42至44行:
DO 20 J=1,I-1
IF(Y(I).LT.Y(J))GOTO 20
M(I)=M(I)+1
应该改为:
DO 20 J=1,I
IF(Y(I).GT.Y(J))then
M(I)=M(I)+1
end if
至于j取到I和I-1,这个对结果没从我什么影响,因为当样本和自身比较时,肯定不会满足大于条件,只不过M-K的原理中j是取到I的,我们就统一取到I吧。
PS:因为魏老前辈的程序是错的,所以书上的结果图也自然是错的。 |
|