R语言:因子分析 factor analysis

news2024/11/15 19:28:00

文章目录

        • 因子分析
        • 数据集
        • 处理步骤
        • 主成分法做因子分析
        • 最大似然法做因子分析

因子分析
  • 因子分析的用途与主成分分析类似,它也是一种降维方法。由于因子往往比主成分更易得到解释,故因子分析比主成分分析更容易成功,从而有更广泛的应用。

  • 从方法上来说,因子分析比主成分分析更为精细,自然理论上也就更为复杂。主成分分析只涉及一般的线性变换,不涉及模型,仅需假定二阶矩存在。而因子分析需建立一个数学模型,并作一定的假定。

  • 因子分析起源于20世纪初,K.皮尔逊(Pearson)和C.斯皮尔曼(Spearman)等学者为定义和测定智力所作的努力,主要是由对心理测量学有兴趣的科学家们培育和发展了因子分析。

  • 因子分析的目的是为了降维,降维的方式是试图用少数几个潜在的、不可观测的随机变量来描述原始变量间的协方差关系。

数据集

内置的mtcars数据框包含有关32辆汽车的信息,包括它们的重量,燃油效率(以每加仑英里为单位),速度等。

数据来自1974年美国汽车趋势杂志,包括32辆汽车(1973-74款)的油耗和10个方面的汽车设计和性能。

> help("mtcars")

Motor Trend Car Road Tests
Description
The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (197374 models).

Usage
mtcars
Format
A data frame with 32 observations on 11 (numeric) variables.

[, 1]	mpg	Miles/(US) gallon
[, 2]	cyl	Number of cylinders
[, 3]	disp	Displacement (cu.in.)
[, 4]	hp	Gross horsepower
[, 5]	drat	Rear axle ratio
[, 6]	wt	Weight (1000 lbs)
[, 7]	qsec	1/4 mile time
[, 8]	vs	Engine (0 = V-shaped, 1 = straight)
[, 9]	am	Transmission (0 = automatic, 1 = manual)
[,10]	gear	Number of forward gears
[,11]	carb	Number of carburetors
Source
Henderson and Velleman (1981), Building multiple regression models interactively. Biometrics, 37, 391411.

Examples
require(graphics)
pairs(mtcars, main = "mtcars data", gap = 1/4)
coplot(mpg ~ disp | as.factor(cyl), data = mtcars,
       panel = panel.smooth, rows = 1)
## possibly more meaningful, e.g., for summary() or bivariate plots:
mtcars2 <- within(mtcars, {
   vs <- factor(vs, labels = c("V", "S"))
   am <- factor(am, labels = c("automatic", "manual"))
   cyl  <- ordered(cyl)
   gear <- ordered(gear)
   carb <- ordered(carb)
})
summary(mtcars2)
处理步骤
  1. 根据研究的问题选取原始变量
  2. 对原始变量进行标准化并求出相关阵,分析变量之间的相关性
  3. 求解初始公因子及其因子载荷矩阵
  4. 因子旋转
  5. 计算因子得分
  6. 绘制因子载荷图,因子得分图
主成分法做因子分析
  • 不做因子旋转,使用原始数据
    因子数选择为3
library("psych")

fac<-principal(mtcars,3,rotate="none")
fac
  • 不做因子旋转,使用相关系数矩阵
    有些题目直接给出相关系数矩阵,没有原始数据,也可以使用因子分析的主成分法,得到的结果相同

Standardized loadings:标准化后的载荷矩阵

Principal Components Analysis
Call: principal(r = R, nfactors = 3, rotate = "none")
Standardized loadings (pattern matrix) based upon correlation matrix
       PC1   PC2   PC3   h2    u2 com
mpg  -0.93  0.03 -0.18 0.90 0.099 1.1
cyl   0.96  0.07 -0.14 0.95 0.052 1.1
disp  0.95 -0.08 -0.05 0.90 0.095 1.0
hp    0.85  0.41  0.11 0.90 0.104 1.5
drat -0.76  0.45  0.13 0.79 0.212 1.7
wt    0.89 -0.23  0.27 0.92 0.081 1.3
qsec -0.52 -0.75  0.32 0.94 0.063 2.2
vs   -0.79 -0.38  0.34 0.88 0.122 1.8
am   -0.60  0.70 -0.16 0.88 0.120 2.1
gear -0.53  0.75  0.23 0.90 0.098 2.0
carb  0.55  0.67  0.42 0.93 0.069 2.6

                       PC1  PC2  PC3
SS loadings           6.61 2.65 0.63
Proportion Var        0.60 0.24 0.06
Cumulative Var        0.60 0.84 0.90
Proportion Explained  0.67 0.27 0.06
Cumulative Proportion 0.67 0.94 1.00

Mean item complexity =  1.7
Test of the hypothesis that 3 components are sufficient.

The root mean square of the residuals (RMSR) is  0.03 

Fit based upon off diagonal values = 1

从累积方差贡献率来看,取3个因子的累积方差贡献率为90%,取两个因子的累积方差贡献率为84%
因此我们可以将因子数减少到两个,有利于可视化分析

fac<-principal(mtcars,2,rotate="none")
fac

Principal Components Analysis
Call: principal(r = mtcars, nfactors = 2, rotate = "none")
Standardized loadings (pattern matrix) based upon correlation matrix
       PC1   PC2   h2    u2 com
mpg  -0.93  0.03 0.87 0.131 1.0
cyl   0.96  0.07 0.93 0.071 1.0
disp  0.95 -0.08 0.90 0.098 1.0
hp    0.85  0.41 0.88 0.116 1.4
drat -0.76  0.45 0.77 0.228 1.6
wt    0.89 -0.23 0.85 0.154 1.1
qsec -0.52 -0.75 0.83 0.165 1.8
vs   -0.79 -0.38 0.76 0.237 1.4
am   -0.60  0.70 0.85 0.146 2.0
gear -0.53  0.75 0.85 0.150 1.8
carb  0.55  0.67 0.76 0.244 1.9

                       PC1  PC2
SS loadings           6.61 2.65
Proportion Var        0.60 0.24
Cumulative Var        0.60 0.84
Proportion Explained  0.71 0.29
Cumulative Proportion 0.71 1.00

Mean item complexity =  1.5
Test of the hypothesis that 2 components are sufficient.

The root mean square of the residuals (RMSR) is  0.05 
 with the empirical chi square  9.45  with prob <  1 

Fit based upon off diagonal values = 0.99

可以发现,因子数从3个减少到2个时,使用主成分法,前两个主成分的方差贡献率不会变化。这跟最大似然法不同。

  • 绘制因子载荷图
#绘制因子载荷图
plot(fac1$loadings,xlab="Factor1",ylab="Factor2")
abline(h=0);abline(v=0)

在这里插入图片描述
可以发现很多点离两个因子都比较远,不好解释。

  • 主成分法,使用最大方差法进行因子旋转
    因子数选择为2,并计算因子得分
> #主成分法,方差最大化做因子正交旋转
> fac2<-principal(mtcars,2,rotate="varimax")
> fac2
Principal Components Analysis
Call: principal(r = mtcars, nfactors = 2, rotate = "varimax")
Standardized loadings (pattern matrix) based upon correlation matrix
       RC1   RC2   h2    u2 com
mpg   0.68 -0.63 0.87 0.131 2.0
cyl  -0.64  0.72 0.93 0.071 2.0
disp -0.73  0.60 0.90 0.098 1.9
hp   -0.32  0.88 0.88 0.116 1.3
drat  0.85 -0.21 0.77 0.228 1.1
wt   -0.80  0.46 0.85 0.154 1.6
qsec -0.16 -0.90 0.83 0.165 1.1
vs    0.30 -0.82 0.76 0.237 1.3
am    0.92  0.08 0.85 0.146 1.0
gear  0.91  0.17 0.85 0.150 1.1
carb  0.08  0.87 0.76 0.244 1.0

                       RC1  RC2
SS loadings           4.67 4.59
Proportion Var        0.42 0.42
Cumulative Var        0.42 0.84
Proportion Explained  0.50 0.50
Cumulative Proportion 0.50 1.00

Mean item complexity =  1.4
Test of the hypothesis that 2 components are sufficient.

The root mean square of the residuals (RMSR) is  0.05 
 with the empirical chi square  9.45  with prob <  1 

Fit based upon off diagonal values = 0.99> #计算因子得分
> fac2$scores
                             RC1        RC2
Mazda RX4            0.913545261  0.5740734
Mazda RX4 Wag        0.827547997  0.5013891
Datsun 710           0.698816380 -0.8074274
Hornet 4 Drive      -0.913638812 -1.1047271
Hornet Sportabout   -0.859350144  0.2025926
Valiant             -1.162422544 -1.2190911
Duster 360          -0.680268641  0.9486423
Merc 240D           -0.056857408 -1.1835017
Merc 230            -0.212468151 -1.4696568
Merc 280             0.075581300 -0.2109478
Merc 280C            0.002444315 -0.2763119
Merc 450SE          -0.904174186  0.3064233
Merc 450SL          -0.849329738  0.2529898
Merc 450SLC         -0.927001103  0.2287337
Cadillac Fleetwood  -1.417403948  0.6862707
Lincoln Continental -1.392296773  0.7416873
Chrysler Imperial   -1.161445427  0.7799435
Fiat 128             0.930026590 -1.1606987
Honda Civic          1.455372982 -0.8414166
Toyota Corolla       1.040852468 -1.2543364
Toyota Corona       -0.374988630 -1.4259630
Dodge Challenger    -1.026764303  0.1466255
AMC Javelin         -0.893224853  0.1071275
Camaro Z28          -0.502907752  1.0677154
Pontiac Firebird    -0.984122353  0.2236560
Fiat X1-9            0.926969145 -1.0092451
Porsche 914-2        1.590766193  0.1745827
Lotus Europa         1.509486177 -0.3106522
Ford Pantera L       1.103849172  1.8802235
Ferrari Dino         1.361140948  1.3909629
Maserati Bora        1.120968759  2.6074298
Volvo 142E           0.761297080 -0.5470932
> 

因子旋转之后,每个变量在某个因子上的载荷接近正负1,而在另一个因子上的载荷接近0,有助于我们进行解释分析。

  • 绘制新的因子载荷图
#绘制因子载荷图
plot(fac2$loadings,xlab="Factor1",ylab="Factor2")
abline(h=0);abline(v=0)

在这里插入图片描述

  • 绘制因子得分图
#绘制每个学生的因子得分图与原坐标在因子上的方向,反应因子与原始数据的关系
biplot(fac2$scores,fac2$loadings)

在这里插入图片描述

  • 主成分法分析
因子数有无因子旋转因子1方差贡献率因子1方差贡献率两因子累积贡献率
因子数为2无因子旋转60%24%84%
因子数为2有因子旋转42%42%84%
因子数为3无因子旋转60%24%84%
因子数为3有因子旋转41%29%70%

结论1:进行因子旋转会改变各因子的方差贡献率,但不会改变总方差贡献率
结论2:因子数不同,不进行因子旋转时,因子的方差贡献率不变

最大似然法做因子分析
  • 不做因子旋转
#用极大似然法做因子分析
factanal(mtcars,factors = 2,rotation = "none")

Call:
factanal(x = mtcars, factors = 2, rotation = "none")

Uniquenesses:
  mpg   cyl  disp    hp  drat    wt  qsec    vs    am 
0.167 0.070 0.096 0.143 0.298 0.168 0.150 0.256 0.171 
 gear  carb 
0.246 0.386 

Loadings:
     Factor1 Factor2
mpg  -0.910         
cyl   0.962         
disp  0.946         
hp    0.851   0.364 
drat -0.726   0.418 
wt    0.867  -0.283 
qsec -0.533  -0.752 
vs   -0.783  -0.362 
am   -0.578   0.703 
gear -0.514   0.700 
carb  0.537   0.571 

               Factor1 Factor2
SS loadings      6.439   2.412
Proportion Var   0.585   0.219
Cumulative Var   0.585   0.805

Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is 68.57 on 34 degrees of freedom.
The p-value is 0.000405 

相对来说,因子载荷矩阵中,各变量在第一个因子上的载荷都比较大,不好解释,需要进行因子旋转。
前两个因子的累积方差解释率达到80.5%,满足要求。

  • 进行因子旋转
> factanal(mtcars,factors = 2,rotation = "varimax")

Call:
factanal(x = mtcars, factors = 2, rotation = "varimax")

Uniquenesses:
  mpg   cyl  disp    hp  drat    wt  qsec    vs    am 
0.167 0.070 0.096 0.143 0.298 0.168 0.150 0.256 0.171 
 gear  carb 
0.246 0.386 

Loadings:
     Factor1 Factor2
mpg   0.686  -0.602 
cyl  -0.629   0.731 
disp -0.730   0.609 
hp   -0.337   0.862 
drat  0.807  -0.225 
wt   -0.810   0.420 
qsec -0.162  -0.908 
vs    0.291  -0.812 
am    0.907         
gear  0.860   0.125 
carb          0.783 

               Factor1 Factor2
SS loadings      4.494   4.357
Proportion Var   0.409   0.396
Cumulative Var   0.409   0.805

Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is 68.57 on 34 degrees of freedom.
The p-value is 0.000405
  • 因子数取3
> factanal(mtcars,factors = 3,rotation = "none")

Call:
factanal(x = mtcars, factors = 3, rotation = "none")

Uniquenesses:
  mpg   cyl  disp    hp  drat    wt  qsec    vs    am 
0.135 0.055 0.090 0.127 0.290 0.060 0.051 0.223 0.208 
 gear  carb 
0.125 0.158 

Loadings:
     Factor1 Factor2 Factor3
mpg  -0.910   0.137  -0.136 
cyl   0.962          -0.135 
disp  0.937  -0.174         
hp    0.875   0.292   0.147 
drat -0.689   0.453   0.175 
wt    0.858  -0.382   0.242 
qsec -0.591  -0.754   0.177 
vs   -0.809  -0.309   0.164 
am   -0.522   0.719         
gear -0.459   0.729   0.365 
carb  0.594   0.517   0.471 

               Factor1 Factor2 Factor3
SS loadings      6.448   2.465   0.565
Proportion Var   0.586   0.224   0.051
Cumulative Var   0.586   0.810   0.862

Test of the hypothesis that 3 factors are sufficient.
The chi square statistic is 30.53 on 25 degrees of freedom.
The p-value is 0.205 

此时可以发现,最大似然法在改变因子个数时,不同因子的方差贡献率发生改变(虽然改变很小),其中因子1达到58.6%,因子2达到22.4%,前两个因子累积方差贡献率为81%。

  • 因子数取3,进行因子旋转

对极大似然解,当因子数增加时,原来因子的估计载荷及对x的贡献将发生变化,这与主成分解不同。因子数可由主成分法初步确定。

> factanal(mtcars,factors = 3,rotation = "varimax")

Call:
factanal(x = mtcars, factors = 3, rotation = "varimax")

Uniquenesses:
  mpg   cyl  disp    hp  drat    wt  qsec    vs    am 
0.135 0.055 0.090 0.127 0.290 0.060 0.051 0.223 0.208 
 gear  carb 
0.125 0.158 

Loadings:
     Factor1 Factor2 Factor3
mpg   0.643  -0.478  -0.473 
cyl  -0.618   0.703   0.261 
disp -0.719   0.537   0.323 
hp   -0.291   0.725   0.513 
drat  0.804  -0.241         
wt   -0.778   0.248   0.524 
qsec -0.177  -0.946  -0.151 
vs    0.295  -0.805  -0.204 
am    0.880                 
gear  0.908           0.224 
carb  0.114   0.559   0.719 

               Factor1 Factor2 Factor3
SS loadings      4.380   3.520   1.578
Proportion Var   0.398   0.320   0.143
Cumulative Var   0.398   0.718   0.862

Test of the hypothesis that 3 factors are sufficient.
The chi square statistic is 30.53 on 25 degrees of freedom.
The p-value is 0.205 

因子数取3,进行因子旋转之后,因子1的方差解释率下降到39.8%,前两个因子累积贡献率达到71.8%,发生变化。

  • 最大似然法分析
因子数有无因子旋转因子1方差贡献率因子1方差贡献率两因子累积贡献率
因子数为2无因子旋转58.5%21.9%80.5%
因子数为2有因子旋转40.9%39.6%80.5%
因子数为3无因子旋转58.6%22.4%81%
因子数为3有因子旋转39.8%32%71.8%

结论1:进行因子旋转会改变各因子的方差贡献率以及总方差贡献率
结论2:因子数不同也会改变各因子的方差贡献率

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1113972.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mac文件对比同步工具 Beyond Compare 4.4.7

Beyond Compare 4 是一款强大的文件和文件夹比较工具。它提供了一个直观的界面&#xff0c;使您可以快速比较和同步文件和文件夹。 Beyond Compare 4 具有许多有用的功能&#xff0c;包括比较和合并文件、文件夹和压缩文件&#xff0c;以及同步文件和文件夹。它支持各种类型的文…

万圣节海外网红营销:助力品牌赢得消费者的心

万圣节&#xff0c;源自古代凯尔特文化&#xff0c;如今已成为一个全球性的节庆。它不仅是一个传统的庆祝活动&#xff0c;还是商业和品牌推广的黄金机会。在当今数字时代&#xff0c;社交媒体和网红文化已经成为品牌推广的重要渠道。万圣节为品牌提供了一个独特的机会&#xf…

点进来看看要如何在Telegram上找到目标群组

Telegram作为目前除了WhatsApp之外&#xff0c;在苹果应用商店市场第二高下载量的社交媒体平台是我们出海企业不可以错过的资源。而且就在日前海外科技媒体TechCrunch爆料称&#xff0c;Telegram正与腾讯展开合作&#xff0c;有望将Telegram打造为一个类似微信的“超级应用生态…

java 使用poi读取excel内浮动图片

注意&#xff1a;仅读取到xls中的浮动图片&#xff0c;嵌入图片此方法读取不到 1、引入poi依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><depen…

C++11包装器

文章目录 1.当前程序的问题2.包装器的引入2.1包装器的定义2.2包装器的使用2.3包装器的出现对于2.1问题的解决 3.包装器的应用3.1C98写法3.2C11写法count()的用法下标运算符operator[ ]lambda表达式的另一种用法C11写法 1.当前程序的问题 template<class T, class K> K u…

MSC应用新进展

2023年9月23日&#xff0c;第四届中国干细胞与再生医学协同创新平台大会正式发布了我国首个人源干细胞国家标准《生物样本库多能干细胞管理技术规范》(GB/T42466-2023)&#xff0c;标志着我国在干细胞样本库管理上有了标准技术支撑&#xff0c;对于推动我国干细胞研究和应用的规…

React之Redux详解

一、Redux 1、是什么 React是用于构建用户界面的&#xff0c;帮助我们解决渲染DOM的过程 而在整个应用中会存在很多个组件&#xff0c;每个组件的state是由自身进行管理&#xff0c;包括组件定义自身的state、组件之间的通信通过props传递、使用Context实现数据共享 如果让…

【QT开发笔记-基础篇】| 第四章 事件QEvent | 4.8 绘图事件

本节对应的视频讲解&#xff1a;B_站_链_接 【QT开发笔记-基础篇】 第4章 事件 4.8 绘图事件(1) 本章要实现的整体效果如下&#xff1a; QEvent::Paint ​ 当窗口/控件需要重绘时&#xff0c;触发该事件&#xff0c;它对应的子类是 QPaintEvent 本节通过一个向 QLabel 上绘制…

“揭秘!如何通过京东商品详情接口轻松获取海量精准商品信息!“

京东商品详情接口可以通过HTTP GET请求获取商品详情信息。 请求参数包括num_iid&#xff0c;表示JD商品ID。 请求示例&#xff1a; GET /jd/item_get/?num_iid10335871600 HTTP/1.1 Host: api-vx.Taobaoapi2014.cn Connection: close Accept-Encoding: gzip 点击获取…

决策树深度探索: 从基础构建到机器学习应用

机器学习 第六课 决策树 概述决策树的基本概念决策树的应用决策树的基本构建节点 (Node)分支 (Branch)决策树的构造过程 信息增益熵 (Entropy)条件熵 (Conditional Entropy)信息增益 (Information Gain) 信息熵计算计算数据集的熵计算在给定属性条件下的熵计算信增益 (Informat…

深入剖析Java类加载过程:探寻类加载器的奥秘

摘要: 一个java文件从被加载到被卸载这个生命过程&#xff0c;总共要经历4个阶段&#xff1a; 加载->链接&#xff08;验证准备解析&#xff09;->初始化&#xff08;使用前的准备&#xff09;->使用->卸载 其中类加载过程包括加载、验证、准备、解析和初始化五个阶…

如何使用Abaqus import进行预应力跌落仿真

跌落测试除了单次跌落外&#xff0c;根据不同的标准需求&#xff0c;还有多次跌落或者预应力跌落&#xff0c;上次我们进行了单次跌落在Abaqus中的实现过程&#xff0c;今天我们使用Abaqus Import功能&#xff0c;进行卡扣的预应力跌落。 首先进行卡扣的装配仿真&#xff0c;在…

Note——time

time import import datetime import timeDefinition of time from 1970-01-01 00:00:00 UTC Coordinated Universal Time as the float format of ‘seconds’ For example use structured time lists [ year,month,day,hours,minutes,seconds…] 表示从1970-01-01 00:00:…

当苹果铅笔不能工作时,不一定都是苹果铅笔的问题!苹果铅笔不工作时如何修复

你的苹果铅笔没有按预期工作,可能有几个原因;大多数都有相当简单的修复方法。苹果铅笔的故障排除技巧在两代配件中基本相同。 本文中的信息适用于兼容iPad上的苹果铅笔(第二代)和苹果铅笔(第一代)。 检查蓄电池 苹果铅笔的电池必须充电才能工作。要检查iPad上的电池状…

云表:为什么要使用低代码开发?低代码选择指南

随着信息技术的不断发展&#xff0c;我们进入了一个数字化的时代。在这个时代&#xff0c;IT技术已经成为推动全球信息化浪潮的重要力量。然而&#xff0c;随着应用程序开发技术的不断发展&#xff0c;开发效率并没有像摩尔定律一样快速提升&#xff0c;反而成为了瓶颈。因此&a…

Django实现音乐网站 (21)

使用Python Django框架做一个音乐网站&#xff0c; 本篇音乐播放器功能完善及原有功能修改。 目录 播放列表修改 视图修改 删除、清空播放器 设置路由 视图处理 修改加载播放器脚本 模板修改 脚本设置 清空功能实现 删除列表音乐 播放列表无数据处理 视图修改 播放…

uniapp自定义右击菜单

效果图&#xff1a; 代码&#xff1a; 1、需要右击的view: <view class"answer-box" contextmenu.stop.prevent.native"showRightMenu($event, item, content)"> </view>2、右击弹出层&#xff1a; <view v-if"visible" :styl…

001.第一个C语言项目

Visual studio2022的使用 创建第一个C语言项目和源文件 https://blog.csdn.net/qq_45037165/article/details/124520286 第一个C语言项目 #include<stdio.h> int main() {printf("Hello World");return 0; }运行结果&#xff1a; 第一行为库函数&#xff0…

docker容器健康状态健康脚本

代码&#xff1a; #!/bin/bash# 定义要监控的容器名称 container_name"mysql-container"# 使用Docker命令来检查容器的运行状态 container_status$(docker inspect --format"{{.State.Status}}" "$container_name")# 检查容器状态并进行相应操作…