% %% 导入数据
% [~, ~, raw] = xlsread('C:\Users\窜窜\Desktop\开题 材料\CPP教改论文\wuliujulei.xlsx','C2:AQ435');
% raw(cellfun(@(x) ~isempty(x) && isnumeric(x) && isnan(x),raw)) = {''};
% cellVectors = raw(:,1);
%
% %% 创建表
% B = table;
%
% %% 将导入的数组分配给列变量名称
% B.area = cellVectors(:,1);
%
% %% 清除临时变量
% clearvars area raw cellVectors;
A=xlsread('C:\Users\窜窜\Desktop\开题 材料\CPP教改论文\wuliujulei.xlsx','C2:AQ435');
%31个地区 14个年份 17个变量,将其转化为截面数据
for g=1:14
for m=1:31
for l=1:17
DD(m,l,g)=A(31*(g-1)+m,l);
end
end
end
%% 计算每个时间节点的主成分
for i=1:14
%得到的数据矩阵的行数和列数
a=size(DD(:,:,1),1);
b=size(DD(:,:,1),2);
%计算系数矩阵:CM
CM(:,:,i)=corrcoef(DD(:,:,i));
%计算CM的特征值和特征向量
[V(:,:,i),D(:,:,i)]=eig(CM(:,:,i));
%将特征值按降序排列到DS中
for j=1:b
DS(j,1,i)=D(b+1-j,b+1-j,i);
end
%计算贡献率
for t=1:b
DS(t,2,i)=DS(t,1,i)/sum(DS(:,1,i));%单个贡献率
DS(t,3,i)=sum(DS(1:t,1,i))/sum(DS(:,1,i));%累计贡献率
end
%假定主成分的信息保留率
T=1;
for k=1:b
if DS(k,3,i) >= T
com_num=k;
break;
end
end
%提取主成分的特征向量
for j=1:com_num
PV(:,j,i)=V(:,b+1-j,i);
end
%计算主成分得分
new_score(:,:,i)=DD(:,:,i)*PV(:,:,i);
for h=1:a
total_score(h,1,i)=sum(new_score(h,:,i));
total_score(h,2,i)=h;
end
result_report(:,:,i)=[new_score(:,:,i),total_score(:,1:2,i)];
end
%% 将数据整合成类似参考文献中表2的数据结
for i=1:14
for j=1:31
T_score_0(j,i)=result_report(j,18,i);
T_score_1(j,1)=j;
end
end
T_score=[T_score_1,T_score_0];% 每一个地区的12个年份的时间序列数据
%% 计算R(Z,j)
for i=1:31
for j=1:13
X_1(i,j) = T_score_0(i,j)-T_score_0(i,j+1);
X_1(i,j) = abs(T_score_0(i,j)-T_s core_0(i,j+1));
end
end
[X_max,Index]=max(X_1,[],2);
Z_max=repmat(X_max,[1 13]);
R_Z=X_1./Z_max;
RR=R_Z; %备份R_Z函数
%% 时间薛烈符号化,并确定阈值,阈值确定方法为遍历法进行搜索.
S=0.001:0.001:0.999;
for i=1:size(S,2)
for j=1:31
for l=1:13
R_Z1(j,l,i)=R_Z(j,l);
end
end
end
for i=1:size(S,2)
for j=1:31
for l=2:13
if R_Z1(j,l,i)>S(i) && R_Z1(j,l-1,i)>S(i)
R_Z1(j,l,i)=char('A');
elseif R_Z1(j,l,i)>S(i)&& abs(R_Z1(j,l-1,i))<=S(i)
R_Z1(j,l,i)=char('D');
elseif R_Z1(j,l,i)>S(i)&& R_Z1(j,l-1,i)<-S(i)
R_Z1(j,l,i)=char('G');
elseif abs(R_Z1(j,l,i))<S(i) && R_Z1(j,l-1,i)>S(i)
R_Z1(j,l,i)=char('B');
elseif abs(R_Z1(j,l-1,i))<=S(i)&& abs(R_Z1(j,l-1,i))<=S(i)
R_Z1(j,l,i)=char('E');
elseif R_Z1(j,l-1,i)<-S(i)&& R_Z1(j,l-1,i)<-S(i)
R_Z1(j,l,i)=char('H');
elseif (R_Z1(j,l,i))<-S(i)&& R_Z1(j,l-1,i)>S(i)
R_Z1(j,l,i)=char('C');
elseif abs(R_Z1(j,l-1,i))<=S(i) && abs(R_Z1(j,l-1,i))<=S(i)
R_Z1(j,l,i)=char('F');
else R_Z1(j,l-1,i)<-S(i)&& R_Z1(j,l-1,i)>S(i)
R_Z1(j,l,i)=char('I');
end
end
end
end
for i=1:size(S,2)
for j=1:31
for l=2:13
R_Z2(j,l-1,i)=R_Z1(j,l,i);
end
end
end
for i=1:size(S,2)
for j=1:31
for l=2:12
s_um(j,l-1,i)=double(abs((R_Z2(j,l,i)-R_Z2(j,l-1,i))));
end
end
end
S_um=sum(s_um,2);
SS_um=sum(S_um,1);
[max_SS_um,Index]=max(SS_um);
e=S(Index) %最终选定的阈值
Z_DIS=R_Z2(:,:,Index); %最终确定的符号化序列
%% 计算两种距离
%% 1.计算原始序列的距离
for i=1:31
for j=1:31
S_min(i)=min(T_score_0(i,:));
S_min(j)=min(T_score_0(j,:));
S_max(i)=max(T_score_0(i,:));
S_max(j)=max(T_score_0(j,:));
SS_max(i,j)=max(abs(S_max(i)- S_min(j)),abs(S_min(i)- S_max(j)));
S_S(i,j)=sum((T_score_0(i,:)-T_score_0(j,:)).^2);
end
end
Z_score=S_S./SS_max.^2;
%% 2 计算符号化距离
fo r i=1:31
for j=1:31
S1_min(i)=min(Z_DIS(i,:));
S1_min(j)=min(Z_DIS(j,:));
S1_max(i)=max(Z_DIS(i,:));
S1_max(j)=max(Z_DIS(j,:));
SS1_max(i,j)=max(abs(S_max(i)- S_min(j)),abs(S_min(i)- S_max(j)));
S1_S(i,j)=sum((Z_DIS(i,:)-Z_DIS(j,:)).^2);
end
end
Z_score1=S1_S./SS1_max.^2;
%% 综合得分
D3=sqrt(Z_score+1.2*Z_score1)
%% 聚类分析
%% 1 ward法聚类分析
SF=squareform(D3);
Z=linkage(D3,'ward');% ward 法计算距离
dendrogram(Z);%显示系统聚类树
T=cluster(Z,'maxclust',5)


雷达卡



京公网安备 11010802022788号







