目录

一、起源

二、基本思想

三、算法用途

四、实例详解

1.读取数据

2.数据标准化

3.两种不同的做法

3.1 不用函数

3.2 factoran()法

4.对因子得分进行排序

5.对因子得分进行画图


一、起源

因子分析的起源是这样的:1904年英国的一个心理学家发现学生的英语、法语和古典语成绩非常有相关性,他认为这三门课程背后有一个共同的因素驱动,最后将这个因素定义为“语言能力”。

基于这个想法,发现很多相关性很高的因素背后有共同的因子驱动,从而定义了因子分析,这便是因子分析的由来。

二、基本思想

我们再通过一个更加实际的例子来理解因子分析的基本思想:

现在假设一个同学的数学、物理、化学、生物都考了满分,那么我们可以认为这个学生的理性思维比较强,在这里理性思维就是我们所说的一个因子。在这个因子的作用下,偏理科的成绩才会那么高。

到底什么是因子分析?就是假设现有全部自变量x的出现是因为某个潜在变量的作用,这个潜在的变量就是我们说的因子。在这个因子的作用下,x能够被观察到。

因子分析就是将存在某些相关性的变量提炼为较少的几个因子,用这几个因子去表示原本的变量,也可以根据因子对变量进行分类

因子分子本质上也是降维的过程,和主成分分析(PCA)算法比较类似。

三、算法用途

因子分析法和主成分分析法有很多类似之处。因子分析的主要目的是用来描述隐藏在一组测量到的变量中的一些更基本的,但又无法直接测量到的隐性变量。因子分析法也可以用来综合评价。

其主要思路是利用研究指标的之间存在一定的相关性,从而推想是否存在某些潜在的共性因子,而这些不同的潜在的共性因子不同程度地共同影响着研究指标。因子分析可以在许多变量中找出隐藏的具有代表性的因子,将共同本质的变量归入一个因子,可以减少变量的数目。

四、实例详解

数据来源于中国统计年鉴。

1.读取数据

[data,textdata] = xlsread('D:\桌面\aa.xls')%读取数据

让我们来看一下,读取的 data 和 textdata

然后我们在读取一下变量名

varname = textdata(1,2:end)%提取textdata的第1行,第2至最后一列,即变量名

运行结果:

最后我们再看一下它的每行的首项,在这突然不知道叫啥了。。。。

obsname = textdata(2:end,1)%提取textdata的第1列,第2行至最后一行,即地区名

运行结果为:

2.数据标准化

标准化的数据均值为0,标准差为1;就是原数据减去均值,再除以标准差(无偏估计)

data=zscore(data) %数据标准化

运行结果:

3.两种不同的做法

3.1 不用函数

3.1.1  求相关系数矩阵

r=corrcoef(data) %相关系数矩阵

运行结果:

3.1.2 带入主成分分析进行计算

%进行主成分分析的相关计算
%vec是r的特征向量,val为r的特征值,con为各个主成分的贡献率
[vec,val,con]=pcacov(r); %进行主成分分析的相关计算

3.1.3 求载荷矩阵

f1=repmat(sign(sum(vec)),size(vec,1),1);
vec=vec.*f1; %特征向量正负号转换
f2=repmat(sqrt(val)',size(vec,1),1);
a=vec.*f2 %求初等载荷矩阵 

运行结果:

3.1.4  因子旋转(最大方差法)

num=input('请选择主因子的个数:'); %选择主因子的个数
%其中b为旋转后的载荷矩阵,t为变换的正交矩阵
[b,t]=rotatefactors(a(:,1:num),'method', 'varimax'); %对载荷矩阵进行旋转
bz=[b,a(:,num+1:end)] %旋转后的载荷矩阵 

选择两个因子并输出:

3.1.5 贡献率

gx=sum(bz.^2); %计算因子贡献
gxv=gx/sum(gx); %计算因子贡献率

3.1.6 因子得分

dfxsh=inv(r)*b; %计算得分函数的系数
F=data*dfxsh ;%计算各个因子的得分

3.2 factoran()法

这个函数具有一定的 bug 所以不太建议使用!!!

3.2.1因子旋转

%调用factoran函数根据原始观测数据作因子分析4
% 进行因子旋转(最大方差旋转法)
%在这里选择2个主因子进行输出
num=input('请选择主因子的个数:'); %选择主因子的个数
[lambda,psi,T,stats,F] = factoran(data,num)

运行结果:

3.2.2 贡献率

%计算贡献率,因子载荷矩阵的列元素的平方和除以维数
gx = 100*sum(lambda.^2)/8
gxv = cumsum(Contribut) %计算累积贡献率

3.2.3  因子得分

在上面 factoran() 函数的输出结果中就已经有了

4.对因子得分进行排序

%将因子得分F分别按因子得分1和因子得分2进行排序
obsF = [obsname, num2cell(F)] ;%将国家和地区名与因子得分刚在一个元胞数组中显示
F1 = sortrows(obsF, 2) ;   % 按因子得分1排序
F2 = sortrows(obsF, 3);   % 按因子得分2排序
head = {'地区','因子1','因子2'};
result1 = [head; F1]
result2 = [head; F2]

输出:

5.对因子得分进行画图

在这里就表示一个的哦!!表示函数法那个吧,另一种自己试试吧,结果不太一样!!!

gname()  函数 ,你鼠标选中哪个点,进行击右键就会显示地区名

%绘制因子得分负值的散点图
plot(F(:,1),F(:,2),'k.');%作因子
xlabel('因子得分1');
ylabel('因子得分2');
gname(obsname);%交互式添加各散点的标注

输出:

因子分析就到这里了,如果有不足之处,请大家及时指出,感谢!!

因子分析——matlab相关推荐

  1. LDA(线性判别分析)详解 —— matlab

    目录 前言 正题 1.LDA的思想 2. 瑞利商(Rayleigh quotient)与广义瑞利商(genralized Rayleigh quotient) 3. 二类LDA原理 4.多类LDA原理 ...

  2. matlab建立荧光矩阵,基于Matlab的溶解有机物的三维荧光矩阵构建

    基于Matlab 的溶解有机物的三维荧光矩阵构建 钱伟1,2,3,杨柳明1,2,3,王宁3,张莉3 [摘要]摘要:三维荧光光谱(EEM)结合平行因子分析(PARAFAC)能够根据水体中有机物的荧光性质 ...

  3. LDA(线性判别分析(普通法))详解 —— python

    在这里和大家道个歉,因为我有一篇matlab的LDA和这篇内容大致相同,我就犯懒了,直接复制,没想到公式复制过来全变成了图片,然后造成了,排版有问题,非常难看,真的很抱歉!!!以后大家督促哈,我再犯懒 ...

  4. MATLAB因子分析

    因子分析就是从研究对象中寻找公共因子的方法. 判别分析.聚类分析.因子分析的比较: 对面来了来了一群女生,我们一眼就能分辨出谁美谁丑,这是判别分析:并且在我们脑海里会对这群女生聚为两类:美的一类和丑的 ...

  5. matlab主成分分析散点图_基于matlab的主成分分析与因子分析

    基于matlab的主成分分析与因子分析文件"实验七.xls" sheet1列出了三个美国制造商所生产的早餐方便粥的数据,这三家厂商是:通用牛奶,克罗格和夸克.将早餐方便粥的品牌按照 ...

  6. 主元分析matlab,matlab spss做因子分析 主元分析 factor analysis 学习笔记

    目录 目录 (1) 说明 (2) 理论 (3) 3.1因子分析的基础 (3) 3.2因子分析步骤 (5) 3.3主成分分析分析与因子分析的联系和差异: (5) SPSS的因子分析 (6) 4.1SPS ...

  7. matlab多元二次分析,MATLAB(2)--因子分析

    目的描述 ​ 出于模型的需要,我们的团队选择做一次因子分析,通常这部分在队伍中是会有同学专门负责这块的,至于为什么笔者就不在这里多说了. 解决思路 ​ 在MATLAB中封装了有关因子分析的方法--fa ...

  8. 【数学建模】MATLAB应用实战系列(七十九)-因子分析法(附MATLAB 和Python代码实现)

    前言 因子分析法和主成分分析法有很多类似之处.因子分析的主要目的是用来描述隐藏在一组测量到的变量中的一些更基本的,但又无法直接测量到的隐性变量.因子分析法也可以用来综合评价. 其主要思路是利用研究指标 ...

  9. matlab求因子载荷矩阵,Matlab因子分析

    %  从相关系数矩阵出发进行因子分析 %***************************定义相关系数矩阵PHO***************************** PHO = [1     ...

最新文章

  1. 解决JQuery.Treeview在CI中无法加载查询函数的方法
  2. 【面试宝典】:《深度学习面试指南》重磅开源!
  3. 第二层EtherChannel
  4. 2013年下半年信息系统项目管理师考试论文试卷
  5. dnslog在mysql在linux_DNSlog实现Mysql注入
  6. java jni.h_java-如何使jni.h被找到?
  7. 从零到一:用Phaser.js写意地开发小游戏(Chapter 4 - 游戏即将开始)
  8. java 10000阶乘_Java ForkJoinPool: 3秒计算100万的阶乘
  9. python遍历文件_python3 遍历文件夹目录所有文件
  10. 【Elasticsearch】es如何停用节点
  11. BZOJ 2527 Meteors | 整体二分
  12. App 开发穷途末路?
  13. 如何在苹果Mac上的分屏浏览视图中使用 App?
  14. 火狐浏览器 附件组件 Xpath 使用
  15. react 获取url参数_十分钟上手 React+MirrorX,从此前端大神代码不再难懂
  16. AutoCad注册机使用方法
  17. matlab图片测量尺寸_基于视觉的零件尺寸测量方法
  18. 股票买卖接口如何实现委托下单的功能?
  19. 计算机子网掩码作用,什么是子网掩码 子网掩码的作用是什么?
  20. Jmeter对webSocket测试

热门文章

  1. 邮票的孔怎么做出来的_金银花茶是怎么做出来的呢
  2. Win11笔记本电源计划怎么设置 Win11设置电源计划为高性能的方法
  3. 谷歌浏览器怎么禁用flash flash禁用方法分享
  4. Apache 和 Tomcat 服务器的区别
  5. mysql首次_mysql首次登陆任务
  6. RSA 非对称加密原理
  7. Java new关键字和newInstance()方法的区别
  8. 如何用python编程制作出表格_使用Python轻松制作漂亮的表格
  9. matlab 超限像素平滑法,matlab超限像素平滑法_图像增强技术.ppt
  10. 4加密问题漏洞修复_Apache Shiro 反序列化漏洞实战