爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 44098|回复: 74

请围观:关于Mann-Kendall检验结果的分析(附R分析代码)

  [复制链接]

新浪微博达人勋

发表于 2014-5-24 23:04:22 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 zhouyuanshen 于 2014-5-27 16:57 编辑

我按照魏凤英老师书上介绍做了M-K分析,但是我的结果好像不好解释,麻烦各位帮我支支招。
左边是原始数据序列,右边是M-K分析结果。
我的分析结果显示,UF和UB大部分时间都在置信区间外,而且大很多,这正常吗?

魏老师说UK或者UB大于0有上升趋势,但是我的数据大部分时间都是一个大于0,一个小于0,这又怎么解释呢?

UF和UB的交点大部分都在置信区间外,是不是说明我的数据序列可能就不存在突变点?

从我的M-K分析结果中,能看出来哪个时期变化显著吗?哪个时期变化平缓吗?

谢谢啦

R代码如下:
  1. Mann_Kendall <- function(timeserial,start){
  2.   Mann_Kendall_sub <- function(timeserial){
  3.     r <- c()
  4.     s <- c()
  5.     U <- c()
  6.    
  7.     for(i in 2:length(timeserial))
  8.     {r[i] <- 0
  9.      
  10.      for(j in 1:i)
  11.      {
  12.        if(timeserial[i]>timeserial[j]){r[i]=r[i]+1}
  13.      }
  14.      
  15.      
  16.      s[i] <- 0
  17.      for (ii in 2:i){
  18.        s[i] <- s[i]+r[ii]
  19.      }
  20.      
  21.      
  22.      U[i] <- 0
  23.      U[i] <- (s[i]- (i*(i-1)/4))/sqrt(i*(i-1)*(2*i+5)/72)
  24.      
  25.     }
  26.    
  27.     r[1] <- 0
  28.     s[1] <- 0
  29.     U[1] <- 0
  30.    
  31.     LST <- list(r = r, s = s, U = U)
  32.    
  33.     return (LST)
  34.   }
  35.   timeserial_rev <- rev(timeserial)
  36.   
  37.   y1 <- Mann_Kendall_sub(timeserial)
  38.   y2 <- Mann_Kendall_sub(timeserial_rev)
  39.   
  40.   y2$U <- -(rev(y2$U))
  41.   
  42.   LST <- list(UF=y1,UB=y2)
  43.   return(LST)  
  44. }



  45. #这里是你要修改的地方
  46. setwd("d:/")
  47. od <- read.table("1.txt", header=T)
  48. Variable <- c("Jan","Feb","Mar","Apr","May","Jun")
  49. #修改上面三段代码




  50. startyear <- as.numeric(od[1,1])
  51. years <- od$Year

  52. tiff("filename.tif", width=14.6, height=16, units="cm", res=300, family = 'serif')
  53. par(mfrow=c(6,2),oma=c(3,0,0,0), mar=c(0,2,0,0),cex=0.7)

  54. for(i in 1:length(Variable)){
  55.   
  56.   name <- paste("od$",Variable[i], sep="")
  57.   value <- eval(parse(text=name))
  58.   
  59.   plot(value,type="l", ylab=Variable[i], cex.axis=0.6,xaxt="n",mgp=c(1,0.1,0),tck=-0.02)
  60.   if(i==length(Variable)){
  61.     axis(side=1, at=years, tck=-0.04, hadj=0.4, labels=years,mgp=c(1,0.4,0), cex.axis=1) # add x-axis to the last figure
  62.     axis(side=1, at=1:length(od$Year), tck=-0.01, hadj=0.4, labels=NA, cex.axis=1) # add month labels to the x-axis
  63.     mtext("年份",side=1,line=1.5)
  64.   }
  65.   
  66.   
  67.   d<-Mann_Kendall(value,startyear)
  68.   yUF <- as.data.frame(d$UF[3])$U
  69.   yUB <- as.data.frame(d$UB[3])$U
  70.   
  71.   plot(x=c(1:length(od$Year)),y=yUF, type="l", ylim=c(min(yUF,yUB,-1.96),max(yUF,yUB,1.96)),lwd=1, lty=5, ylab="", cex=0.5,xaxt="n",mgp=c(1,0.1,0),tck=-0.02)
  72.   points(x=c(1:length(od$Year)),y=yUB,type="l",lty=3,col=6,lwd=1)
  73.   abline(h=1.969,lty=4,lwd=0.5)
  74.   abline(h=-1.96,lty=4,lwd=0.5)
  75.   abline(h=0,col="gray",lwd=0.5)
  76. }

  77. axis(side=1, at=years, tck=-0.04, hadj=0.4, labels=years,mgp=c(1,0.4,0), cex.axis=1) # add x-axis to the last figure
  78. axis(side=1, at=1:length(od$Year), tck=-0.01, hadj=0.4, labels=NA, cex.axis=1) # add month labels to the x-axis
  79. mtext("年份",side=1,line=1.5)
  80. dev.off()
复制代码




气象因子变化趋势

气象因子变化趋势
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-10-12 23:35:17 | 显示全部楼层
愚遥 发表于 2015-7-24 13:46
代码有问题啊。
第23行
应该是这样才对

谢谢您的提醒,我对着魏老师的书看了一遍,好像是输错了。在这里给大家道歉了,希望对大家的影响不大。
我试了一下,用魏老师的数据和我自己的数据重新运行了,错误代码的结果似乎比较保守。。。。。下面两张图,左边是经过您提醒后修改后的代码,右边是原来的错误代码

魏凤英老师数据

魏凤英老师数据


自己的数据

自己的数据






再次谢谢您
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-10-23 10:37:33 | 显示全部楼层
电视机 发表于 2016-12-12 16:26
为什么你的和魏老师的图不一样呢?

我用Matlab程序测试了你提供的魏老师的数据,做出来的结果和魏老师的一致。现在把这个matlab程序传上来,供大家分享吧。


MK.png

MK-matlab.zip

2.31 KB, 下载次数: 133, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao
回复 支持 3 反对 0

使用道具 举报

新浪微博达人勋

发表于 2014-5-27 08:06:32 | 显示全部楼层
zhouyuanshen 发表于 2014-5-26 23:23
我是用R做的,有需要的我可以共享代码


您能帮我看看这个数据怎么做MK检验吗? 1.xlsx (18.85 KB, 下载次数: 30)
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2015-5-23 22:16:59 | 显示全部楼层
zhouyuanshen 发表于 2015-5-23 18:58
论坛的好友都在回复里面了,您可以浏览一下。大部分在第一页

可是看的不是很明白,我想知道你最后是不是用MK做的突变分析,还是用其他的方法做的,求回复
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2014-5-25 07:39:59 | 显示全部楼层

回帖奖励 +2 金钱

不在区间内的,楼主要检验是否是突变点,因为有可能是,也有可能不是,我记得有一片文献上有说,具体我忘记了。按照你变化趋势图和MK中的UF曲线看结果是没有错的,具体原因说不清楚。根据魏老师的书,你主要是看UF线,超出检验的是变化显著的。看上升或下降趋势,你要看一条线,而不是两条线,UF>0,UB<o是上升趋势,反之是下降的,这个可以根据你趋势图看,结果是对应的。
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2014-5-25 09:39:50 | 显示全部楼层
有些文献里说,其实这个突变检验只是个方法而已,不一定准~~~可以用其他突变检验方法试试~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-25 23:20:46 | 显示全部楼层
278803532 发表于 2014-5-25 07:39
不在区间内的,楼主要检验是否是突变点,因为有可能是,也有可能不是,我记得有一片文献上有说,具体我忘记 ...

虽然有点拗口,但是还是非常明白你的意思,QQQ
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-25 23:21:43 | 显示全部楼层
Kongxiangye 发表于 2014-5-25 09:39
有些文献里说,其实这个突变检验只是个方法而已,不一定准~~~可以用其他突变检验方法试试~

恩,好像文献是这么说的,我也只是作为一个辅助,不是重点研究突变。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-5-26 17:14:42 | 显示全部楼层
用什么软件做的??????
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-26 23:23:56 | 显示全部楼层
romeo19850806 发表于 2014-5-26 17:14
用什么软件做的??????

我是用R做的,有需要的我可以共享代码
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-27 09:58:03 | 显示全部楼层
本帖最后由 zhouyuanshen 于 2014-5-27 16:57 编辑
romeo19850806 发表于 2014-5-27 08:06
您能帮我看看这个数据怎么做MK检验吗?

我只画了一月到6月的图,你对着代码修改修改就能画剩下的了
只能帮你到这啦,

filename.jpg

Code.txt

2.34 KB, 下载次数: 73, 下载积分: 金钱 -5

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

新浪微博达人勋

发表于 2014-8-19 21:33:43 | 显示全部楼层
过来学习一下
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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