Mann-Kendall是一種非參數(shù)統(tǒng)計檢驗方法漆弄,最初由Mann在1945年提出煎娇,后由Kendall和Sneyers進一步完善,其優(yōu)點是不需要測量值服從正態(tài)分布付鹿,也不要求趨勢是線性的物蝙,并且不受缺失值和異常值的影響炎滞,在長時間序列數(shù)據(jù)的趨勢顯著檢驗中得到了十分廣泛的應(yīng)用。
定義標(biāo)準(zhǔn)化檢驗統(tǒng)計量 Z:當(dāng)Z 的絕對值大于1.65诬乞、1.96和2.58時册赛,表示趨勢分別通過了信度為90%、95%和99%的顯著性檢驗震嫉。
具體代碼如下:
clear
[a,R]=geotiffread('D:\GIS\yearmax\1982.tif'); %先導(dǎo)入投影信息
info=geotiffinfo('D:\GIS\yearmax\1982.tif');%先導(dǎo)入投影信息
[m,n]=size(a);
cd=34; %34年森瘪,時間跨度
datasum=zeros(m*n,cd)+NaN;
p=1;
for year=1982:2015 %起始年份
filename=['D:\qixiang\年全國8kmPET\china',int2str(year),'pet.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('C:\MATLAB\MK檢驗結(jié)果.tif',zc,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag); %注意修改路徑