基于Matlab的柵格數(shù)據(jù)一元線性回歸及顯著性檢驗(slope趨勢分析)

有些童鞋在處理完數(shù)據(jù)以后會發(fā)現(xiàn)有些地區(qū)顯著性不明顯,不通過顯著性分析又不能直接作為結論使用,所以我把代碼稍微優(yōu)化了一下,變成了下面這樣:
clc
clear
[a,R]=geotiffread('G:\畢業(yè)論文材料\裁剪數(shù)據(jù)\2000-2020年歸一化數(shù)據(jù)按月份、季度排序\十二月\NDVI1.tif');%先導入某個圖像的投影信息,為后續(xù)圖像輸出做準確
info=geotiffinfo('G:\畢業(yè)論文材料\裁剪數(shù)據(jù)\2000-2020年歸一化數(shù)據(jù)按月份、季度排序\十二月\NDVI1.tif');
[m,n]=size(a);
years=21; %表示有多少年份需要做回歸
data=zeros(m*n,years);
k=1;
for year=1:21 %起始年份
file=['G:\畢業(yè)論文材料\裁剪數(shù)據(jù)\2000-2020年歸一化數(shù)據(jù)按月份、季度排序\十二月\','NDVI',int2str(year),'.tif'];%注意自己的名字形式,這里使用的名字是年prec2000.tif,根據(jù)這個可修改
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
trend=reshape(xielv,m*n,1);
p=reshape(p,m*n,1);
for f=1:size(trend,1)
if trend(f)>0
if p(f)<=0.05
trend(f)=1;
elseif p(f)>0.05
trend(f)=2;
end
elseif trend(f)<0
if p(f)<=0.05
trend(f)=3;
elseif p(f)>0.05
trend(f)=4;
end
else trend(f)=0;
trend(f)=0;
end
end
trend=reshape(trend,m,n);
geotiffwrite('G:\畢業(yè)論文材料\裁剪數(shù)據(jù)\2000-2020年重分類預處理數(shù)據(jù)按月份、季度排序\NDVI\12月\12月NDVItread.tif',trend,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag)
增加了一個小循環(huán),使得輸出結果變成5種值,分別是0、1、2、3、4,他們分別代表基本穩(wěn)定、顯著增長、不顯著增長、顯著減少和不顯著減少,后面的結果需要在arcgis中進行重分類獲得,希望能夠幫到各位的論文。