多时间序列数据MK突变检验突变点提取

多时间序列数据MK突变检验突变点提取

需求

之前推送了一篇MK突变分析的文章【Manner-Kendall(M-K)—突变检验】,针对的是如何获得单个时间序列数据的突变点,这个时候突变点可以直接从图中看出。后台有同学询问如何自动提取多个时间序列的突变点,即假如数据有很多列,如何自动判断提取。这个的场景比如我们需要知道区域的降雨突变时间,我们获取了区域内n个气象站点每个站点的逐年降雨观测数据,现在要找到各个站点降雨突变点,从而进行统计,确定区域整个的一个突变点或者突变的时间范围。今天使用Matlab尝试做一下。

去看原文

代码

A=xlsread('C:\Users\Desktop\mk突变检验\MKtest\kk.xlsx','Sheet1');
x=A(:,1);   %时间序列
for m=2:101  %第m列 第2列到第101列 代表100个站点
    y=A(:,m);   %数据列
    % MK突变检验代码
    ......
    ......
    
    % UFK和UBK2交点即为突变点
    f1=UFk;
    f2=UBk2;
    j=1;
    for i=1:30
        x=i:(i+1);
        k1=f1(i+1)-f1(i);
        b1=(i+1)*f1(i)-i*f1(i+1);
        y1=k1*x+b1; 
        k2=f2(i+1)-f2(i);
        b2=(i+1)*f2(i)-i*f2(i+1);
        y2=k2*x+b2;
        % plot(y1);
        % hold on
        % plot(y2);
        syms x y
        [xx,yy]=solve(y==k1*x+b1,y==k2*x+b2,x,y); 
        if ~isnan(xx)&xx>=i&xx<(i+1)&yy<1.96&yy>-1.96
            pp(j)=double(xx)+1984;
            j=j+1;
        end
    end
    c{m}=pp;
end
% 练习数据及完整代码公众号后台回复“多数据突变”获取。

结果

这里我们逐年统计突变年份,可以发现2009年发生突变的站点数明显比其年份要多,所以可以认为2009年是整个区域的降雨的突变年份。
在这里插入图片描述
原文有源码,更多内容,请关注地学数据处理分析。
在这里插入图片描述

  • 7
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值