TA的每日心情 | 奋斗 2024-7-1 22:21 |
---|
签到天数: 2014 天 [LV.Master]伴坛终老
- 自我介绍
- 数学中国站长
群组: 数学建模培训课堂1 群组: 数学中国美赛辅助报名 群组: Matlab讨论组 群组: 2013认证赛A题讨论群组 群组: 2013认证赛C题讨论群组 |
2#
发表于 2013-8-28 21:23
|只看该作者
|
|邮箱已经成功绑定
%--------------------------------------------------------------------------
% 从相关系数矩阵出发进行因子分析
%--------------------------------------------------------------------------
%***************************定义相关系数矩阵PHO*****************************
PHO = [1 0.79 0.36 0.76 0.25 0.51
0.79 1 0.31 0.55 0.17 0.35
0.36 0.31 1 0.35 0.64 0.58
0.76 0.55 0.35 1 0.16 0.38
0.25 0.17 0.64 0.16 1 0.63
0.51 0.35 0.58 0.38 0.63 1 ];
%******************调用factoran函数根据相关系数矩阵作因子分析*****************
% 从相关系数矩阵出发,进行因子分析,公共因子数为2,设置特殊方差的下限为0,
% 不进行因子旋转
[lambda,psi,T] = factoran(PHO,2,'xtype','covariance','delta',0,'rotate','none')
% 定义元胞数组,以元胞数组形式显示结果
% 表头
head = {'变量', '因子f1', '因子f2'};
% 变量名
varname = {'身高','坐高','胸围','手臂长','肋围','腰围','<贡献率>','<累积贡献率>'}';
Contribut = 100*sum(lambda.^2)/6; % 计算贡献率,因子载荷阵的列元素之和除以维数
CumCont = cumsum(Contribut); % 计算累积贡献率
% 将因子载荷阵,贡献率和累积贡献率放在一起,转为元胞数组
result1 = num2cell([lambda; Contribut; CumCont]);
% 加上表头和变量名,然后显示结果
result1 = [head; varname, result1]
%从相关系数矩阵出发,进行因子分析,公共因子数为2,设置特殊方差的下限为0,
%进行因子旋转(最大方差旋转法)
[lambda,psi,T] =factoran(PHO,2,'xtype','covariance','delta',0)
Contribut = 100*sum(lambda.^2)/6 %计算贡献率,因子载荷阵的列元素之和除以维数
CumCont = cumsum(Contribut) %计算累积贡献率
% 从相关系数矩阵出发,进行因子分析,公共因子数为3,设置特殊方差的下限为0,
% 进行因子旋转(最大方差旋转法)
[lambda,psi,T] = factoran(PHO,3,'xtype','covariance','delta',0)
Contribut = 100*sum(lambda.^2)/6 % 计算贡献率,因子载荷阵的列元素之和除以维数
CumCont = cumsum(Contribut) % 计算累积贡献率
%--------------------------------------------------------------------------
% 读取examp12_02.xls中数据,进行因子分析
%--------------------------------------------------------------------------
%*********************************读取数据*********************************
[X,textdata] = xlsread('examp12_02.xls'); % 从Excel文件中读取数据
X = X(:,3:end); % 提取X的第3至最后一列,即要分析的数据
varname = textdata(4,3:end); %提取textdata的第4行,第3至最后一列,即变量名
obsname = textdata(5:end,2); %提取textdata的第2列,第5至最后一行,即国家或地区名
%******************调用factoran函数根据原始观测数据作因子分析*****************
% 从原始数据(实质还是相关系数矩阵)出发,进行因子分析,公共因子数为4
% 进行因子旋转(最大方差旋转法)
[lambda,psi,T,stats] = factoran(X,4)
Contribut = 100*sum(lambda.^2)/8 %计算贡献率,因子载荷阵的列元素之和除以维数
CumCont = cumsum(Contribut) %计算累积贡献率
% 从原始数据(实质还是相关系数矩阵)出发,进行因子分析,公共因子数为2
% 进行因子旋转(最大方差旋转法)
[lambda,psi,T,stats,F] = factoran(X, 2)
Contribut = 100*sum(lambda.^2)/8 %计算贡献率,因子载荷阵的列元素之和除以维数
CumCont = cumsum(Contribut) %计算累积贡献率
[varname' num2cell(lambda)]
%**************将因子得分F分别按耐力因子得分和速度因子得分进行排序*************
obsF = [obsname, num2cell(F)]; % 将国家和地区名与因子得分放在一个元胞数组中显示
F1 = sortrows(obsF, 2); % 按耐力因子得分排序
F2 = sortrows(obsF, 3); % 按速度因子得分排序
head = {'国家/地区','耐力因子','速度因子'};
result1 = [head; F1]; % 显示按耐力因子得分排序的结果
result2 = [head; F2]; % 显示按速度因子得分排序的结果
%*************************绘制因子得分负值的散点图***************************
plot(-F(:,1),-F(:,2),'k.') %作因子得分负值的散点图
xlabel('耐力因子得分(负值)'); %为X轴加标签
ylabel('速度因子得分(负值)'); %为Y轴加标签
box off %去掉坐标系右上的边框
gname(obsname); %交互式添加各散点的标注
|
|