% The code was edited by
% Jiaxin Jin on 2018-1-13
% MATLAB统计分析方法教程(1)
load('data.mat')
[m,n,z] = size(ndvi);
result_corr = [];
result_partialcorr = [];
result_regress_one = [];
result_regress_multi = [];
result_stepwisefit = [];
for i = 1:m
for j = 1:n
ndvi = permute(ndvi_82to11_spring(i,j,:),[3 1 2]);
temp = permute(temp_82to11_spring(i,j,:),[3 1 2]);
prec = permute(prec_82to11_spring(i,j,:),[3 1 2]);
%%%%% 数据预处理 %%%%%
% 距平值
ndvi1 = detrend(ndvi,'constant');% 消除时间序列中的均值
temp1 = detrend(temp,'constant');
prec1 = detrend(prec,'constant');
% 去趋势距平
ndvi2 = detrend(ndvi);% 消除时间序列中的线性趋势项
temp2 = detrend(temp);
prec2 = detrend(prec);
% 数据标准化
ndvi3 = zscore(ndvi);%将不同量级的数据统一转化为同一个量级
temp3 = zscore(temp);
prec3 = zscore(prec);
%%%%% 相关分析 %%%%%
% 简单相关分析
aa = [ndvi,temp,prec];
[r1,p1] = corr(aa,'type','Pearson');
[r2,p2] = corr(aa,'type','Spearman');
% result_corr(i,j) = r1(1,2); % temp的Pearson相关系数
% 偏相关分析
[r3,p3] = partialcorr(aa,'type','Pearson');
[r4,p4] = partialcorr(aa,'type','Spearman');
% result_partialcorr(i,j) = r3(1,2); % temp的Pearson偏相关系数
%%%%% 回归分析 %%%%%
% 一元线性回归分析
num = length(ndvi);
e = ones(num,1);%创建全部为1的数组(列)
time = [1:num]';
x1 = [e,time];
[b1(1,:),bint1,r1,rint1,stats1(1,:)] = regress(ndvi,x1); % b(1,2)-斜率(回归系数); stats(1,1)是判定系数R平方; stats(1,3)是指p值
% result_regress_one(i,j) = b(1,2); % temp的回归系数
x2 = [e,temp];
[b2(1,:),bint2,r2,rint2,stats2(1,:)] = regress(ndvi,x2);
% 多元线性回归分析y = ax1 + bx2 + c
x3 = [e,temp,prec];
[b3(1,:),bint3,r3,rint3,stats3(1,:)] = regress(ndvi,x3);%x3中已经包含了所有变量(环境因子),最后得到的应该是ndvi=Atemp+Bprec+C
% result_regress_multi(i,j) = b(1,2); % temp的回归系数
% 逐步回归分析(通径分析)
x4 = [temp3,prec3];
[b4,se4,pval4,inmodel4,stats4] = stepwisefit(x4,ndvi3); % stats.pval-各个变量的p值
% result_stepwisefit(i,j) = b(1,1); % tmep的通经系数
end
end
评论2