因子分析的一个小例子

这是学习笔记的第 1997 篇文章


  今天做了下因子分析中的东东,本来想找一些公共网站的数据,限于时间和要做一些数据整理,时间来不及,就找了一个现成的数据源。 

这是洛杉矶等十二个大都市的人口调查获得的,包含了5个社会以经济变量:人口总数,居民受教育年限,佣人总数,服务行业人数,中等的房价。

为了方便我把数据集先提供出来。

人口(X1)教育年限(X2)佣人数(X3)服务人数(X4)房价(X5)
570012.8250027025000
100010.96001010000
34008.81000109000
380013.6170014025000
400012.8160014025000
82008.326006012000
120011.44001016000
910011.533006014000
990012.5340018018000
960013.7360039025000
96009.633008012000
940011.4400010013000

 我们把数据存储在excel里面,然后使用R语言来做分析。

首先导入数据,如果程序包openxlsx没有的话,就在R语言里安装下依赖。假设文件的路径是   D:\\yinzifenxi.xlsx

library(openxlsx)

读取excel的数据

data1 <- read.xlsx("D:\\yinzifenxi.xlsx" )

输出部分信息

> head(data1)

  人口(X1) 教育(X2) 佣人(X3) 服务(X4) 房价(X5)

1     5700     12.8     2500      270    25000

2     1000     10.9      600       10    10000

3     3400      8.8     1000       10     9000

4     3800     13.6     1700      140    25000

5     4000     12.8     1600      140    25000

6     8200      8.3     2600       60    12000

> data1_cor <- cor(data1)

> head(cor(data1),5)

         

> head(cor(data1),5)

           人口(X1)   教育(X2)  佣人(X3)  服务(X4)   房价(X5)

人口(X1) 1.00000000 0.00975059 0.9724483 0.4388708 0.02241157

教育(X2) 0.00975059 1.00000000 0.1542838 0.6914082 0.86307009

佣人(X3) 0.97244826 0.15428378 1.0000000 0.5147184 0.12192599

服务(X4) 0.43887083 0.69140824 0.5147184 1.0000000 0.77765425

房价(X5) 0.02241157 0.86307009 0.1219260 0.7776543 1.00000000

> library(psych)

确定因子数量

> fa.parallel(data1_cor, n.obs = 112, fa = "both", n.iter = 100)

Parallel analysis suggests that the number of factors =  2  and the number of components =  2 

There were 18 warnings (use warnings() to see them)

得到的碎石图如下:

640?wx_fmt=png

从这样的数据分析可以看到前2个会占据主要的部分,保留2个主成分即可。

接下来要做因子分析了,第一个参数是数据,第二个参数说明要保留两个主成分,第三个参数为旋转方法,为none,先不进行主成分旋转,第四个参数表示提取公因子的方法为最大似然法,不是机器学习的意思。 

> fa_model1 <- fa(data1_cor, nfactors = 2, rotate = "none", fm = "ml")

输出分析的结果内容:

> fa_model1

Factor Analysis using method =  ml

Call: fa(r = data1_cor, nfactors = 2, rotate = "none", fm = "ml")

Standardized loadings (pattern matrix) based upon correlation matrix

           ML2  ML1   h2    u2 com

人口(X1) -0.03 1.00 1.00 0.005 1.0

教育(X2)  0.90 0.04 0.81 0.193 1.0

佣人(X3)  0.09 0.98 0.96 0.036 1.0

服务(X4)  0.78 0.46 0.81 0.185 1.6

房价(X5)  0.96 0.05 0.93 0.074 1.0

                       ML2  ML1

SS loadings           2.34 2.16

Proportion Var        0.47 0.43

Cumulative Var        0.47 0.90

Proportion Explained  0.52 0.48

Cumulative Proportion 0.52 1.00

Mean item complexity =  1.1

Test of the hypothesis that 2 factors are sufficient.

The degrees of freedom for the null model are  10  and the objective function was  6.38

The degrees of freedom for the model are 1  and the objective function was  0.31 

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

The df corrected root mean square of the residuals is  0.05 

Fit based upon off diagonal values = 1

Measures of factor score adequacy             

                                                   ML2  ML1

Correlation of (regression) scores with factors   0.98 1.00

Multiple R square of scores with factors          0.95 1.00

Minimum correlation of possible factor scores     0.91 0.99

为了减少误差,需要做因子旋转,这里使用的是正交旋转法,

> fa_model2 <- fa(data1_cor, nfactors = 2, rotate = "varimax", fm = "ml")

分析结果如下:

> fa_model2

Factor Analysis using method =  ml

Call: fa(r = data1_cor, nfactors = 2, rotate = "varimax", fm = "ml")

Standardized loadings (pattern matrix) based upon correlation matrix

          ML2  ML1   h2    u2 com

人口(X1) 0.02 1.00 1.00 0.005 1.0

教育(X2) 0.90 0.00 0.81 0.193 1.0

佣人(X3) 0.14 0.97 0.96 0.036 1.0

服务(X4) 0.80 0.42 0.81 0.185 1.5

房价(X5) 0.96 0.00 0.93 0.074 1.0

                       ML2  ML1

SS loadings           2.39 2.12

Proportion Var        0.48 0.42

Cumulative Var        0.48 0.90

Proportion Explained  0.53 0.47

Cumulative Proportion 0.53 1.00

Mean item complexity =  1.1

Test of the hypothesis that 2 factors are sufficient.

The degrees of freedom for the null model are  10  and the objective function was  6.38

The degrees of freedom for the model are 1  and the objective function was  0.31 

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

The df corrected root mean square of the residuals is  0.05 

Fit based upon off diagonal values = 1

Measures of factor score adequacy             

                                                   ML2  ML1

Correlation of (regression) scores with factors   0.98 1.00

Multiple R square of scores with factors          0.95 1.00

Minimum correlation of possible factor scores     0.91 0.99

可以看到方差比例不变,但在各观测值上的载荷发生了改变

使用factor.plot函数对旋转结果进行可视化:

> factor.plot(fa_model2)

640?wx_fmt=png

继续渲染,得到一个较为清晰的列表

> fa.diagram(fa_model2, simple = FALSE)

640?wx_fmt=png

到了这里,我们可以看到,因子1和房价,教育年限和服务人口数相关,可以抽象为经济发展因子,而因子2和人口数,佣人数相关,我们可以抽象成人口规模因子。

以上仅供参考。 

640?

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: R语言中有许多数据集可以用来进行因子分析。下面以UC Irvine Machine Learning Repository上的Iris数据集为例说明。 首先,我们可以使用R中的datasets包中的函数来加载Iris数据集。通过执行以下代码可以加载该数据集: ```R library(datasets) data(iris) ``` Iris数据集包含了150个样本,每个样本有4个特征变量和一个类别变量。其中特征变量包括花萼长度(Sepal.Length)、花萼宽度(Sepal.Width)、花瓣长度(Petal.Length)和花瓣宽度(Petal.Width),类别变量为花的类型(Species)。 在因子分析中,我们通常会关注样本的特征变量,并试图找出它们背后的潜在因子。下面以花的特征变量为例,我们可以使用R中的psych包中的fa函数来进行因子分析: ```R library(psych) result <- fa(iris[, 1:4]) ``` 在以上代码中,我们使用了fa函数对Iris数据集的前4列进行因子分析,并将结果保存在result对象中。 最后,我们可以使用summary函数来查看因子分析的结果。例如,执行以下代码可以显示因子载荷矩阵、公共因子方差和特殊因子方差等信息: ```R summary(result) ``` 通过执行以上代码,我们可以得到花的特征变量在潜在因子上的载荷值,以及潜在因子的方差贡献率等信息。 总之,上述介绍了如何使用R语言进行因子分析,并以UC Irvine Machine Learning Repository上的Iris数据集为例进行了说明。 ### 回答2: R语言是一种用于统计分析和数据可视化的编程语言,它提供了丰富的函数和工具包来处理各种数据分析任务。因子分析是一种常用的统计方法,用于分析多个变量之间的潜在结构和相关性。以下是一个使用R语言进行因子分析的数据集例子。 假设我们有一个包含10个变量(例如,身高、体重、年龄、学历等)的数据集,共有100个样本。我们的目标是通过因子分析找出这些变量之间的潜在结构。 首先,我们需要加载R中的相关包,如psych和GPArotation,这些包提供了执行因子分析所需的函数和工具。 接下来,我们将读取数据集并进行预处理,包括变量的缺失值处理和数据的标准化。 然后,我们可以使用psych包中的fa函数执行因子分析。该函数将数据集作为输入,并允许我们指定因子的数量、旋转方法等参数。例如,我们可以选择使用最大似然估计方法来估计因子载荷,并使用Varimax旋转方法来使因子之间的相关性尽可能小。 执行因子分析后,我们可以检查结果,包括因子载荷表、方差解释能力和因子得分。因子载荷表显示了每个变量与每个因子的相关性,方差解释能力可以告诉我们每个因子解释了多少的总方差,而因子得分可以为每个样本提供每个因子的得分。 最后,我们可以对得到的因子进行解释和解读,了解它们代表的潜在结构和变量之间的关系。这可以通过观察因子载荷和变量的含义以及根据研究问题和领域知识来进行。 总之,通过使用R语言进行因子分析,我们可以从多个变量中提取潜在结构和相关性,并进一步理解数据集中的数据。这个例子展示了如何使用R语言进行因子分析的基本步骤和操作。 ### 回答3: R语言因子分析是一种用于探索和理解数据集中潜在因素结构的统计方法。下面是一个使用R语言进行因子分析的数据集示例。 假设有一个关于消费者购物偏好的数据集,包含了20个不同的商品和1000个消费者对这些商品的评分。数据集的结构如下: 商品1 商品2 商品3 ... 商品20 消费者1 5 4 3 ... 1 消费者2 2 3 4 ... 5 ... ... ... ... ... ... 消费者1000 1 5 2 ... 4 首先,我们需要将这个数据集读入R语言中。假设数据集保存为名为"shopping_data.csv"的csv文件,可以使用以下代码将其读入为一个数据框(data frame): data <- read.csv("shopping_data.csv") 接下来,我们需要对数据集进行因子分析。假设我们希望提取出3个潜在因素。我们可以使用R语言的psych包来进行因子分析。首先,我们需要安装和加载该包: install.packages("psych") library(psych) 然后,我们可以使用fa函数来执行因子分析: result <- fa(data, 3) 最后,我们可以使用summary函数查看因子分析的结果: summary(result) 结果将会包含各个因子的解释方差比例、因子载荷矩阵、共同度和特殊方差等信息,帮助我们理解数据集中的潜在因素结构。 这只是一个简单的例子,实际应用中还需要根据具体问题和数据集的特点进行一系列的数据预处理、参数选择和结果解释等步骤。因子分析是一种非常有用的统计分析方法,在市场调研、心理学等领域有广泛应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jeanron100

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值