爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 164260|回复: 315

[源代码] Mann-kendall趋势检验的方法介绍(附计算程序)

  [复制链接]

新浪微博达人勋

发表于 2013-6-26 21:13:05 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 herenso 于 2013-6-27 21:12 编辑

这两天查阅了一些文献,发现在检验趋势的显著性时都采用了Mann-kendall 方法。在论坛里看到有人问,但好像没有过系统的整理,现根据这两天的阅读经验,将算法总结如下(由于有公式,干脆把内容转成了图片格式):
MKT.jpg


下面做些说一些我对此方法浅显的见解,既希望能帮助到对此没有了解的人,也恳请懂得的老师同学批评指正其中的不足或错误。


1. Mann-kendall方法原本是一种检验两个变量序列之间相关性的方法,而把时间作为其中的一个变量,即检验一个统计量与时间(如年份)之间的关系,就相当于检验该统计量的变化趋势。


2.MK方法是一种非参数方法,从上面的计算方法可以看出其本质是做秩相关,所谓“秩”,强调的是排列顺序,而不是序列的绝对值本身,即比较的是两序列不同大小的数在各自序列中的排序分布。
比如现有两组2001-2005年的时间序列:
/1,2,4,5,3/;    /1,3,11,17,7/
这两组时间序列分别用来和年份计算相关系数r的话,得到的结果肯定是不同的,但如果是用Mann-Kendall方法来计算相关,则得出的系数值z相等,因为这两组序列5个元素相互间的大小关系相同,即使序列大小本身或者说序列方差不同也没有关系。因此很多文献指出这种方法不仅不要求时间序列服从某种固定分布,而且允许有异常值或缺测值的存在。


3. 计算过程中提到的“结”(tie)的概念,我原来也不懂,查阅文献后目前是这么理解的:“结”就是时间序列中的相同数据,“结”的宽度(the extent of any tie)是指序列中等于这个数的样本数量。例如对于一个序列/1,2,2,3,3,3/,有e1=1,e2=2,e3=3。


4.根据维基百科,很多文献中提到的Kendall's tau方法检验变化趋势,其实就是上述方法。值得注意的是Kendall's tau方法计算Z值时就有两种情况,一种不考虑结,称为Tau-a,此时上述计算方差Var的方程可直接简化为:
Var(S)=n(n-1)(2n+5)/18

一种考虑结,称为Tau-b,与前文给出的图中所述相同。对于气象人关心的很多变量,如年平均降水量,属于实型变量,出现某两年降水量相等的情况极少(就算数值上相等,也与数据精度有关),从而出现结宽e>1的情况也少,而e=1时e(e-1)(2e+5)=0。因此个人认为可以不考虑结的问题,采用简化后的方程。文末所附程序也没有考虑结。当然我不知道自己对于结的理解是否正确,如有谬误还请大家指教。


5.上面讲过Z服从标准正态分布,具体地说,Z的绝对值达到1.65/1.96/2.58,分别表示通过90/95/99%显著性检验,其他情况可以查正态分布表。


6.很多文献还用MK方法来估计变化趋势的倾斜程度,我就不多介绍了,直接截取一个有代表性的文献:
MKT2.jpg

Xu Z X, Takeuchi K, Ishidaira H. Long-term trends of annual temperature and precipitation time series in Japan[J]. Journal of Hydroscience and Hydraulic Engineering, 2002, 20(2): 11-26.
其中Median表示取中位数,∀表示穷举所有情况。β就是我们要求的平均每个时间单位内统计量的变化量。

7.附件是MK程序,计算了不考虑结的Z值和估计斜率的β值。程序是我根据自己的理解现编的,不保证正确……如发现错误,敬请联系我~

2013年6月27日21:10重新上传了下程序,小改动了一点点,原先的程序用于循环会出问题。
MKT.f90 (913 Bytes, 下载次数: 830)

评分

参与人数 3金钱 +42 贡献 +9 收起 理由
言深深 + 18 + 4
mofangbao + 12 + 3
斥鷃 + 12 + 2 有自己的理解很重要!顶楼主~

查看全部评分

本帖被以下淘专辑推荐:

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-4-16 21:43:34 | 显示全部楼层
非常感谢,正好做到这个地方,关于“Z的绝对值达到1.65/1.96/2.58,分别表示通过90/95/99%显著性检验”,我是赞成楼主的,但有些核心期刊的刊物里却也出现了“Z的绝对值达到1.28、1.64、2.32,分别表示通过90/95/99%显著性检验” 的说法,何解?
密码修改失败请联系微信:mofangbao
回复 支持 3 反对 0

使用道具 举报

新浪微博达人勋

发表于 2018-9-26 16:04:10 | 显示全部楼层
e=1 可以不作为例外,在Var(s)考虑结的公式中进行计算,对结果没有影响,和没有结的情况应该是一样的
密码修改失败请联系微信:mofangbao
回复 支持 0 反对 1

使用道具 举报

新浪微博达人勋

发表于 2013-6-26 21:33:53 | 显示全部楼层
谢谢楼主分享,正要用
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-6-26 21:44:56 | 显示全部楼层
请问一下楼主用过魏凤英老师的那个程序么?我不太会运行 希望能够帮助我一下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-6-26 21:47:42 | 显示全部楼层

不好意思啊,没有用过……只看过魏老师的书,里面讲趋势检验的时候用的方法和我看的文献似乎不一样~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-6-26 21:49:33 | 显示全部楼层
对,好像是不太一样。。。我也刚接触,都是似懂非懂
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-6-26 21:58:00 | 显示全部楼层
楼主,,不好意思啊,再问你一下,我运行你的程序后出现这个对话框,我今天刚接触这个 完全一头雾水啊 这个是什么原因呢 EBIKX4]1LJNX8@TNE``0Y3V.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-6-26 22:04:55 | 显示全部楼层
输入N和NYEAR的数
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-6-26 22:05:12 | 显示全部楼层
sicuoren 发表于 2013-6-26 21:58
楼主,,不好意思啊,再问你一下,我运行你的程序后出现这个对话框,我今天刚接触这个 完全一头雾水啊 这个 ...

输入N和NYEAR的数
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-6-26 22:05:23 | 显示全部楼层
sicuoren 发表于 2013-6-26 21:58
楼主,,不好意思啊,再问你一下,我运行你的程序后出现这个对话框,我今天刚接触这个 完全一头雾水啊 这个 ...

你这个显然不是运行我的程序出的结果,而是魏老师那个……不过你看看你那个程序,应该是要求手动输入序列长度和起始年份的。你运行后在下面键入这两个变量应该就能出结果了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-6-26 22:11:48 | 显示全部楼层
ly19850330 发表于 2013-6-26 22:05
输入N和NYEAR的数

我输入了,但是我想原因是没有数据源吧 我好糊涂 请问你运行的数据源是什么呢 谢谢啊
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表