出於模型的須要,咱們的團隊選擇作一次主成分分析,一般這部分在隊伍中是會有同窗專門負責這塊的,至於爲何筆者就不在這裏多說了。函數
在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