01
殘差分析就是通過殘差所提供的信息,分析出數據的可靠性、周期性或其它幹擾 。用於分析模型的假定正確與否的方法。所謂殘差是指觀測值與預測值(擬合值)之間的差,即是實際觀察值與回歸估計值的差。在回歸分析中,測定值與按回歸方程預測的值之差,以δ表示。殘差δ遵從正態分布N(0,σ2)。(δ-殘差的均值)/殘差的標準差,稱為標準化殘差,以δ*表示。δ*遵從標準正態分布N(0,1)。實驗點的標準化殘差落在(-2,2)區間以外的概率≤0.05。若某一實驗點的標準化殘差落在(-2,2)區間以外,可在95%置信度將其判為異常實驗點,不參與回歸線擬合。顯然,有多少對數據,就有多少個殘差。
02
本文在matlab平臺下對NDVI進行殘差分析,選取的自變量是降水和溫度。代碼如下所示,能夠獲取殘差的空間分布及殘差趨勢以及統計得到的研究區每年的殘差值。
[aa,R]=geotiffread('D:\NDVI\2000anveage_ndvi.tif');%投影信息info=geotiffinfo('D:\NDVI\2000anveage_ndvi.tif');[m,n]=size(aa);
begin_year=2000;%用戶修改end_year=2017;%用戶修改long=end_year-begin_year+1;temsum=zeros(m*n,long);presum=zeros(m*n,long);ndvisum=zeros(m*n,long);k=1;for year=begin_year:end_year temp=importdata(['D:\NDVI\',int2str(year),'TEMP.tif']) ; %根據自己名稱修改,本數據名稱為2000TEMP.tif pre=importdata(['D:\NDVI\',int2str(year),'PRE.tif']) ; %根據自己名稱修改,本數據名稱為2000PRE.tif ndvi=importdata(['D:\NDVI\',int2str(year),'anveage_ndvi.tif']) ; %根據自己名稱修改,本數據名稱為'anveage_ndvi.tif' %注意數據的有效範圍 temp(temp<-1000)=NaN;%溫度有效範圍 pre(pre<0)=NaN;%有效範圍大於0 ndvi(ndvi<-1)=NaN; %有效範圍是-1到1 temsum(:,k)=reshape(temp,m*n,1); presum(:,k)=reshape(pre,m*n,1); ndvisum(:,k)=reshape(ndvi,m*n,1); k=k+1;end%多元回歸,ndvi=a*pre+b*temcc=zeros(m,n)+NaN;ccsum=zeros(m*n,long)+NaN;for i=1:m*n pre=presum(i,:)'; if min(pre)>=0 %進行篩選有效範圍 ndvi=ndvisum(i,:)'; tem=temsum(i,:)'; X=[ones(size(ndvi)),tem,pre]; [b,bint,r,rint,stats] = regress(ndvi,X); cc1=ndvi-b(1)-b(2).*tem-b(3).*pre; cc1=cc1'; ccsum(i,:)=cc1; cc1=cc1'; X=[ones(size(ndvi)),[1:long]']; [b,bint,r,rint,stats] = regress(cc1,X); cc(i)=b(2); endendfilename=['D:\NDVI\2000-2017年殘差的趨勢.tif'];geotiffwrite(filename,cc,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag)data2sum=[];for i=1:long data1=ccsum(:,i); data2=mean(~isnan(data1)); data2sum=[data2sum;data2]; data1=reshape(data1,m,n); filename=['D:\NDVI\殘差',int2str(i-1+begin_year),'.tif']; geotiffwrite(filename,data1,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag)enddata2sum=[[begin_year:end_year]',data2sum];xlswrite('D:\NDVI\每年的殘差均值.xlsx',data2sum)
歡迎關注、轉發、點讚、打賞