基于长时间序列栅格数据的MK检验

2024-01-20 10:35:55 浏览数 (1)

MK检验是曼-肯德尔法,又称Mann—Kenddall 检验法,是一种气候诊断与预测技术,应用Mann-Kendall检验法可以判断气候序列中是否存在气候突变,如果存在,可确定出突变发生的时间。Mann-Kendall检验法也经常用于气候变化影响下的降水、干旱频次趋势检测。目前常用于长时间序列的栅格数据的显著性检验,在植被覆盖度,NDVI,NPP等方面尤为常见。 该检验功能强大,不需要样本遵从一定的分布,部分数据缺失不会对结果造成影响,不受少数异常值的干扰,适用性强。不但可以检验时间序列的变化趋势,还可以检验时间序列是否发生了突变。

Matlab代码实现

代码语言:javascript复制
clear
[a,R]=geotiffread('D:exPM25PM25_2000_year.tif'); %首先导入投影信息
info=geotiffinfo('D:exPM25PM25_2000_year.tif');%首先导入投影信息
[m,n]=size(a);
cd=5;       %5年,时间跨度  
datasum=zeros(m*n,cd) NaN; 
p=1;
for year=2000:2004      %起始年份+终止年份
     filename=['D:exPM25PM25_',int2str(year),'_year.tif'];
    data=importdata(filename);
    data=reshape(data,m*n,1);
    datasum(:,p)=data;         %
    p=p 1;
end
sresult=zeros(m,n) NaN;

for i=1:size(datasum,1)        %
    data=datasum(i,:);
    if min(data)>0       % 有效格点判定,我这里有效值在0以上
        sgnsum=[];  
        for k=2:cd
            for j=1:(k-1)
                sgn=data(k)-data(j);
                if sgn>0
                    sgn=1;
                else
                    if sgn<0
              sgn=-1;
                    else
                        sgn=0;
                    end
                end
                sgnsum=[sgnsum;sgn];
            end
        end  
        add=sum(sgnsum);
        sresult(i)=add; 
    end
end
vars=cd*(cd-1)*(2*cd 5)/18;
zc=zeros(m,n) NaN;
sy=find(sresult==0);
zc(sy)=0;
sy=find(sresult>0);
zc(sy)=(sresult(sy)-1)./sqrt(vars);
sy=find(sresult<0);
zc(sy)=(sresult(sy) 1)./sqrt(vars);
geotiffwrite('D:exMKjianyanMK检验结果.tif',zc,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag); %选择合适的路径

0 人点赞