出于模型的须要,咱们的团队选择作一次主成分分析,一般这部分在队伍中是会有同窗专门负责这块的,至于为何笔者就不在这里多说了。函数
在MATLAB中封装了有关因子分析的方法--PCA
,读者能够经过help
命令来查看如何调用这个方法。code
须要读者注意的是,在进行主成分分析的时候可能会出现海伍德现象(heywood),惋惜的是,笔者并无找到关于解决这个问题的文献,若是有读者知道怎样解决,劳驾告诉我一声,谢谢。orm
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的工做空间,有兴趣的读者能够自行下载。排序
连接: 密码:0389ci