陆地水循环分享 http://blog.sciencenet.cn/u/afantics

博文

使用matlab对多年栅格数据趋势分析(回归分析)显著性检验

已有 969 次阅读 2021-6-4 16:04 |个人分类:软件使用|系统分类:科研笔记

使用matlab对多年栅格数据趋势分析(回归分析)显著性检验


在进行NDVI数据分析时,需要计算研究区NDVI指数多年变化,可以通过栅格计算器进行简单的计算,如果栅格年份较多,或者需要进行显著性校验,则需要借助matlab分析。


代码转载于 https://www.jianshu.com/p/b61d988c571e

如下,红色部分为需要修改的地方,请注意。


[a,R]=geotiffread('C:\Users\ASUS\Desktop\NDVI\太子河\1998.tif');%先导入某个图像的投影信息,为后续图像输出做准备
info=geotiffinfo('C:\Users\ASUS\Desktop\NDVI\太子河\1998.tif');
[m,n]=size(a);
years=20; %表示有多少年份需要做回归
data=zeros(m*n,years);
k=1;
for year=1998:2017 %起始年份
    file=['C:\Users\ASUS\Desktop\NDVI\太子河\',int2str(year),'.tif'];%注意自己的名字形式,如果使用的名字是年prec2000.tif,则需要改C:\Users\ASUS\Desktop\NDVI\太子河\prec    bz=importdata(file);
    bz=reshape(bz,m*n,1);
    data(:,k)=bz;
    k=k+1;
end
    xielv=zeros(m,n);p=zeros(m,n);
for i=1:length(data)
    bz=data(i,:);
    if max(bz)>0 %注意这是进行判断有效值范围,如果有效范围是-1到1,则改成max(bz)>-1即可
        bz=bz';
        X=[ones(size(bz)) bz];
        X(:,2)=[1:years]';
        [b,bint,r,rint,stats] = regress(bz,X);
        pz=stats(3);
        p(i)=pz;
        xielv(i)=b(2);
    end
end
name1='C:\Users\ASUS\Desktop\NDVI\太子河\趋势.tif';
name2='C:\Users\ASUS\Desktop\NDVI\太子河\P值.tif';
geotiffwrite(name1,xielv,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag);
geotiffwrite(name2,p,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag);
%一般来说,只有通过显著性检验的趋势值才是可靠的
xielv(p>0.05)=NaN;
name1='C:\Users\ASUS\Desktop\NDVI\太子河\趋势.tif';
geotiffwrite(name1,xielv,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag);



https://wap.sciencenet.cn/blog-3459054-1289709.html

上一篇:Arcgis多年栅格数据做趋势分析或者回归分析
下一篇:解决Coreldraw中只能粘贴1个Excel图的问题

1 段含明

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2021-9-26 15:32

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部