楼主: czacy1104
581 0

[统计软件] 求助,面板聚类三十一个对象只得到三十个节点 [推广有奖]

  • 2关注
  • 0粉丝

高中生

87%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
246 点
帖子
20
精华
0
在线时间
48 小时
注册时间
2020-1-25
最后登录
2021-4-3

楼主
czacy1104 发表于 2020-12-2 11:37:40 来自手机 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
% %% 导入数据
% [~, ~, 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)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:corrcoef vectors xlsread Desktop numeric

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
扫码
拉您进交流群
GMT+8, 2026-1-29 05:18