教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 综合文档 >

因子分析的两个matlab案例

来源:网络收集 时间:2026-02-14
导读: 因子分析是指研究从变量群中提取共性因子的统计技术。最早由英国心理学家C.E.斯皮尔曼提出。他发现学生的各科成绩之间存在着一定的相关性,一科成绩好的学生,往往其他各科成绩也比较好,从而推想是否存在某些潜在的共性因子,或称某些一般智力条件影响着学生的

因子分析是指研究从变量群中提取共性因子的统计技术。最早由英国心理学家C.E.斯皮尔曼提出。他发现学生的各科成绩之间存在着一定的相关性,一科成绩好的学生,往往其他各科成绩也比较好,从而推想是否存在某些潜在的共性因子,或称某些一般智力条件影响着学生的学习成绩。因子分析可在许多变量中找出隐藏的具有代表性的因子。将相同本质的变量归入一个因子,可减少变量的数目,还可检验变量间关系的假设。


%--------------------------------------------------------------------------
% 从相关系数矩阵出发进行因子分析
%--------------------------------------------------------------------------

%***************************定义相关系数矩阵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至最后一行,即国家或地区名

因子分析是指研究从变量群中提取共性因子的统计技术。最早由英国心理学家C.E.斯皮尔曼提出。他发现学生的各科成绩之间存在着一定的相关性,一科成绩好的学生,往往其他各科成绩也比较好,从而推想是否存在某些潜在的共性因子,或称某些一般智力条件影响着学生的学习成绩。因子分析可在许多变量中找出隐藏的具有代表性的因子。将相同本质的变量归入一个因子,可减少变量的数目,还可检验变量间关系的假设。


%******************调用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); %交互式添加各散点的标注



…… 此处隐藏:1602字,全部文档内容请下载后查看。喜欢就下载吧 ……
因子分析的两个matlab案例.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/1893950.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)