美文网首页matlab在生态遥感中的应用
基于matlab 的长时间栅格数据的Sen+MK显著性检验趋势分

基于matlab 的长时间栅格数据的Sen+MK显著性检验趋势分

作者: 画长空_yin | 来源:发表于2019-02-17 19:14 被阅读225次

    在前一篇文章中讲述了用sen法进行长时间的趋势分析,但并未对结果进行显著性检验,通常Sen与MK检验是结合在一起的,
    因此本文主要讲述如何进行MK检验。具体代码如下

    clear
    [a,R]=geotiffread('D:\GIS\vegetation\output\yearmax\1982.tif'); %先导入投影信息
    info=geotiffinfo('D:\GIS\vegetation\output\yearmax\1982.tif');%先导入投影信息
    [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
    invalid_value=datasum(1);
    sresult=zeros(m,n)+NaN;
    
    for i=1:size(datasum,1)        %
        data=datasum(i,:);
        if max(data)>invalid_value       %
            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检验结果.tif',zc,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag); %注意修改路径
    

    通过上述代码的运行可以得到MK检验的结果。上述代码运行时只需要修改起始年份和年份长度以及文件的名称,注意文件名称
    按照规律来进行分布,本文中的名称是china1982pet.tif,china1983pet.tif...china2015pet.tif,保证能够按照规律读取。
    假设读者已经运行完了sen代码和本文中的代码,则可以得到两个tif文件,分别是MK检验结果和sen的结果,进而通过以下代码
    来进行最终的判断

    [a,R]=geotiffread('D:\GIS\vegetation\output\yearmax\1982.tif'); %先导入投影信息
    info=geotiffinfo('D:\GIS\vegetation\output\yearmax\1982.tif');%先导入投影信息
    data=importdata('C:\MATLAB\MK检验结果.tif'); 
    sen_value=importdata('D:\zhang\基于sen的pet变化趋势.tif');
    sen_value(abs(data)<1.94)=NaN; %MK结果值高于1.94则认为通过了显著性95%
    geotiffwrite('C:\MATLAB\通过显著性95%的MK+sen趋势分析结果.tif',sen_value,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag);%注意修改路径
    

    相关文章

      网友评论

        本文标题:基于matlab 的长时间栅格数据的Sen+MK显著性检验趋势分

        本文链接:https://www.haomeiwen.com/subject/ypqneqtx.html