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