||
使用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);
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-29 04:31
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社