MATLAB感悟(4)--主成分分析

目的描述

​ 出于模型的需要,我们的团队选择做一次主成分分析,通常这部分在队伍中是会有同学专门负责这块的,至于为什么笔者就不在这里多说了。

解决思路

​ 在MATLAB中封装了有关因子分析的方法--PCA,读者可以通过help命令来查看如何调用这个方法。

需要读者注意的是,在进行主成分分析的时候可能会出现海伍德现象(heywood),可惜的是,笔者并没有找到关于解决这个问题的文献,如果有读者知道怎样解决,劳驾告诉我一声,谢谢。

function [FData_M,LOCATION,Lab]=Split_PCA_Data(title,F_title,DataSet,index)
%index 表示要提取的Lab有多少个
    LOCATION=[];
    Lab={};
    NUM=1;
    for i=1:index
        OBJECT=F_title{i,1};         
                for j=1:584
                    MSN=title{1,j};
                    if j~=1
                        if  MSN==OBJECT
                            LOCATION(:,NUM)=j;
                            Lab(i,1)={MSN};
                            Lab(i,2)={OBJECT};
                            NUM=NUM+1;
                        end
                    end
                end
        FData_M=DataSet(:,LOCATION);
    end
function [FData_M,LOCATION,Lab]=Split_Factor_Data(title,F_title,DataSet,index)
%index 表示要提取的Lab有多少个
    LOCATION=[];
    Lab={};
    NUM=1;
    for i=1:index
        OBJECT=F_title{i,1};         
                for j=1:584
                    MSN=title{1,j};
                    if j~=1
                        if  MSN==OBJECT
                            LOCATION(:,NUM)=j;
                            Lab(i,1)={MSN};
                            Lab(i,2)={OBJECT};
                            NUM=NUM+1;
                        end
                    end
                end
        FData_M=DataSet(:,LOCATION);
    end
%更新FactorMatrix

%提取数据
[TX_PCA_D,Loc,Lab]=Split_PCA_Data(title,Factormatrix,DataSet{1,1},index);

%使用拟合函数
TX_D=FitData_Cubicinterp(TX_D,index);

%保存X数据Y数据
TX_PCA_x=TX_PCA_D(:,1:index-3);
TX_PCA_y=TX_PCA_D(:,index-2:end);

%求相关系数矩阵
TX_PCA_r=corrcoef(TX_PCA_x)

%数据标准化
TX_PCA_x=zscore(TX_PCA_x);
TX_PCA_y=zscore(TX_PCA_y);

%分析
[TX_vec,TX_lambda,TX_rate]=pcacov(TX_PCA_r);
TX_f=repmat(sign(sum(TX_vec)),size(TX_vec,1),1)*TX_vec;

%累计贡献
TX_contri=cumsum(TX_rate)
%求取所有主成分的分数
TX_score=TX_PCA_x*TX_f

%选取主成分个数 我们默认设置为num=4
%对E进行主成分分析
%要求输出X的特征矩阵,保存多项式回归的系数
%选取前四个做主成分,提取数据,
TX_Param_E=TX_score(:,[1:num])\TX_PCA_EDP;
%标准化变量的回归方程系数
TX_Param_E=TX_f(:,[1:num])*TX_Param_E;
TX_Param_E=[mean(TX_PCA_EDP)-std(TX_PCA_EDP)*mean(TX_PCA_x)./std(TX_PCA_x)*TX_Param_E,std(TX_PCA_EDP)*(TX_Param_E')./std(TX_PCA_x)]

%对D进行主成分分析
%要求输出X的特征矩阵,保存多项式回归的系数

TX_Param_D=TX_score(:,[1:num])\TX_PCA_GDP;
%标准化变量的回归方程系数
TX_Param_D=TX_f(:,[1:num])*TX_Param_D;
TX_Param_D=[mean(TX_PCA_GDP)-std(TX_PCA_GDP)*mean(TX_PCA_x)./std(TX_PCA_x)*TX_Param_D,std(TX_PCA_GDP)*(TX_Param_D')./std(TX_PCA_x)]

%量化排序
[TX_sort,TX_ind]=sort((TX_PCA_x*TX_vec(:,1:num)*TX_rate(1:num))/100);

结果展示

由于结果有多种多样的,直接给出MATLAB的工作空间,有兴趣的读者可以自行下载。

链接: 密码:0389

猜你喜欢

转载自my.oschina.net/u/3483440/blog/1626631