因子分析(SPSS和Python)

一、源数据

二、SPSS因子分析

2.1.导入数据

2.2.标准化处理

由于指标的量纲不同(单位不一致),因此,需要对数据进行标准化处理

2.3.因子分析

点击“确定”后,再回到“总方差解释”表格,以“旋转载荷平方和”中的各成分因子贡献率为权重,对因子得分做加权平均处理,可计算出综合得分

即:综合得分=(0.72283 * FAC1_1+0.19629 * FAC2_1) / 0.91912

其中,FAC1_1是成分1因子得分,FAC2_1是成分2因子得分,0.72283是成分1方差百分比(成分1因子贡献率),0.19629是成分2方差百分比(成分2因子贡献率),0.91912是累积方差百分比(累计因子贡献率)

2.4.输出结果

皮尔逊相关性矩阵:

通过计算指标之间的线性相关性,了解指标之间的相关性强弱,有助于确定因子个数和处理可能存在的共线性问题,如果相关性矩阵中大部分相关系数小于0.3且未通过充分性检验,则不适用于因子分析

充分性检验(KMO和Bartlett检验):

KMO检验:KMO值介于0和1之间,如果全部变量间相关系数平方和远大于偏相关系数平方和则KMO值接近1,KMO值越接近1越适合作因子分析。一般情况下,当KMO值大于0.6(严格一点就以0.7为阈值进行判断)时,表示指标之间的相关性较强,偏相关性较弱,适合做因子分析

Bartlett检验:原假设相关系数矩阵为单位阵,若得到的概率值小于规定的显著性水平(一般取0.05,严格一点就以0.01为阈值进行判断)则拒绝原假设,认为数据适合做因子分析,通俗来讲,即显著性水平越趋近于0则越适合做因子分析,反之则不能拒绝原假设,即数据不适合做因子分析

公因子方差:

从公因子方差可以看出各原始指标变量间的共同度,即各原始指标变量能被提取出的程度,由图可知,所有指标变量的共同度都在0.6以上,大部分指标变量的共同度在0.95以上,说明因子能解释指标变量中的大部分信息,适合进行因子分析

总方差解释:

在总方差解释表中,可以看出提取2个成分因子时,其累计贡献率即可达到91.912%,说明选取2个成分因子就足以代替原来6个指标变量,能够解释原来6个指标变量所涵盖的大部分信息

碎石图:

在碎石图中,可以看出第一个因子的特征值最高,方差贡献最大,第二个因子其次,第三个因子之后的特征值都较低了,对原来6个指标变量的解释程度也就较低,可以忽略,因此,提取2个成分因子是比较合适的

成分矩阵:

由成分矩阵可知,成分因子1主要解释人均GDP、财政总收入、全体常住居民人均可支配收入、金融机构人民币贷款余额、全社会能耗等5个指标变量的信息,可定义为综合发展因子F1,成分因子2主要解释供应土地这一个指标变量的信息,可定义为资源因子F2

旋转后的成分矩阵:

在旋转之前,原始因子的载荷矩阵通常会产生一些问题,即一些变量与多个因子之间的载荷值都很高,而其他变量则没有明显的载荷值,在这种情况下,因子以及它们的载荷解释可能会变得模糊不清,难以解释或者解释力度不够,旋转后的成分矩阵则是能够更清晰地解释变量与因子之间的关系,从而提高了因子模型的可解释性

成分转换矩阵:

用来说明旋转前后成分因子间的系数对应关系

旋转后的空间中的组件图:

由图可知,人均GDP、财政总收入、全体常住居民人均可支配收入、金融机构人民币贷款余额、全社会能耗等5个指标变量基本是在同一个维度上的(横轴),这与综合发展因子F1是对应的,而供应土地这一个指标变量则是在另一个维度(纵轴),这则是与资源因子F2是对应的,说明提取2个因子是合理的,具有一定的可解释性

成分得分系数矩阵:

综合发展因子F1得分:

资源因子F2得分:

成分得分协方差矩阵:

因子得分:

FAC1_1是成分1因子得分,即综合发展因子F1得分,FAC2_1是成分2因子得分,即资源因子F2得分,具体计算公式在“成分得分系数矩阵”已作说明

综合得分:

综合得分=(0.72283 * 综合发展因子F1得分+0.19629 * 资源因子F2得分) / 0.91912

三、Python因子分析

3.1.导入第三方库

# 导入第三方库
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from factor_analyzer import FactorAnalyzer,calculate_kmo,calculate_bartlett_sphericity
import matplotlib.pyplot as plt
import seaborn as sns# 忽略警告
import warnings
warnings.filterwarnings("ignore")# 绘图时正常显示中文
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

3.2.读取数据

# 读取数据
data=pd.read_excel('数据.xlsx',sheet_name='Sheet1',header=1)
print(data)

3.3.标准化处理

# 数据标准化处理
data_std=pd.DataFrame(StandardScaler().fit_transform(data.iloc[:,1:]),columns=data.columns[1:])
print(data_std)

3.4.皮尔逊相关性检验

# 皮尔逊相关性矩阵
data_corr=data_std.corr(method='pearson')
print(data_corr)

# 皮尔逊相关性热力图
plt.figure(figsize=(8,6))
sns.heatmap(data_corr,cmap='PuBu',annot=True,annot_kws={'fontsize':8})
plt.xticks(fontsize=8)
plt.yticks(fontsize=8)
plt.tight_layout()

3.5.充分性检验(KMO检验和Bartlett检验)

# KMO检验和Bartlett检验
kmo=calculate_kmo(data_std) # KMO>0.6,则通过KMO检验
bartlett=calculate_bartlett_sphericity(data_std) # Bartlett<0.05,则通过Bartlett检验
print('\nKMO检验:',kmo[1],'\nBartlett检验:',bartlett[1],'\n')

3.6.旋转前载荷矩阵

# 旋转前载荷矩阵
matrix=FactorAnalyzer(rotation=None,n_factors=8,method='principal')
matrix.fit(data_std)
f_contribution_var =matrix.get_factor_variance()
matrices_var = pd.DataFrame()
matrices_var["旋转前特征根"] = f_contribution_var[0]
matrices_var["旋转前方差贡献率"] = f_contribution_var[1]
matrices_var["旋转前方差累计贡献率"] = f_contribution_var[2]
print('旋转前载荷矩阵的贡献率:\n',matrices_var,'\n')

3.7.旋转后载荷矩阵

# 旋转后载荷矩阵
matrix_rotated=FactorAnalyzer(rotation='varimax',n_factors=2,method='principal')
matrix_rotated.fit(data_std)
f_contribution_var_rotated = matrix_rotated.get_factor_variance()
matrices_var_rotated = pd.DataFrame()
matrices_var_rotated["旋转后特征根"] = f_contribution_var_rotated[0]
matrices_var_rotated["旋转后方差贡献率"] = f_contribution_var_rotated[1]
matrices_var_rotated["旋转后方差累计贡献率"] = f_contribution_var_rotated[2]
print('旋转后载荷矩阵的贡献率:\n',matrices_var_rotated,'\n')

3.8.公因子方差表

# 公因子方差表
communalities=pd.DataFrame(matrix_rotated.get_communalities(),index=data_std.columns)
print('公因子方差表:\n',communalities)

3.9.绘制碎石图

# 绘制碎石图
ev,v=matrix_rotated.get_eigenvalues()
plt.figure(figsize=(6,6))
plt.scatter(range(1,data_std.shape[1]+1),ev)
plt.plot(range(1,data_std.shape[1]+1),ev)
plt.title('碎石图')
plt.xlabel('因子个数')
plt.ylabel('特征根')

3.10.绘制成分矩阵热力图

# 绘制成分矩阵热力图
component_matrix=pd.DataFrame(np.abs(matrix_rotated.loadings_),index=data_std.columns,columns=['成分因子1','成分因子2'])
plt.figure(figsize=(6,6))
sns.heatmap(component_matrix,annot=True,cmap='Blues')
plt.tight_layout()

3.11.绘制成分矩阵二维空间组件图

# 绘制成分矩阵二维空间组件图
plt.figure(figsize=(6,6))
x=component_matrix.iloc[:,0]
y=component_matrix.iloc[:,1]
plt.scatter(x,y)
for i in range(len(component_matrix)):plt.annotate(component_matrix.index[i],(x[i],y[i]),textcoords='offset points',xytext=(-10,-10),ha='center',fontsize=8)
plt.xlabel(component_matrix.columns[0])
plt.ylabel(component_matrix.columns[1])
plt.title('二维空间组件图')
plt.grid(True)

3.12.计算因子得分

# 计算因子得分
factor_score=pd.DataFrame(matrix_rotated.transform(data_std),columns=['成分1','成分2'])
print(factor_score)

3.13.计算综合得分

# 计算综合得分
weight=matrices_var_rotated["旋转后方差贡献率"]/np.sum(matrices_var_rotated["旋转后方差贡献率"])
factor_score["综合得分"]=np.dot(factor_score,weight)
factor_score=pd.concat([data.iloc[:,0],factor_score],axis=1)
print('原顺序:\n',factor_score)

# 按综合得分从高到低排序
factor_score=factor_score.sort_values(by='综合得分',ascending=False)
factor_score=factor_score.reset_index(drop=True)
factor_score.index=factor_score.index+1
print('按综合得分从高到低排序:\n:',factor_score)

3.14.保存综合得分到excel

# 保存综合得分到新的excel
factor_score.to_excel('综合得分.xlsx',index_label='排名')

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

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

相关文章

点向行列连边的网络流图优化成行列连边的二分图:CF1592F2

https://www.luogu.com.cn/problem/CF1592F2 做完F1&#xff0c;然后用1的结论来思考。 场上推了几个性质。首先op4的操作行列必然两两不同&#xff0c;所以op4最多 max ⁡ ( n , m ) \max(n,m) max(n,m) 次。然后手玩发现只有除 ( n , m ) (n,m) (n,m) 的三个格子都为1&am…

发稿渠道和发布新闻的步骤和技巧,收藏!

在现代社会中&#xff0c;新闻的发布和传播起着至关重要的作用。通过新闻&#xff0c;人们可以获取及时的信息&#xff0c;了解社会动态和事件发展。而对于企业和组织来说&#xff0c;通过新闻发布可以宣传品牌、推广产品&#xff0c;增加曝光度&#xff0c;吸引目标受众的关注…

安卓-APP启动优化技术方案汇总

应用有三种启动状态&#xff1a;冷启动、温启动或热启动。每种状态都会影响应用向用户显示所需的时间。在冷启动中&#xff0c;应用从头开始启动。在另外两种状态中&#xff0c;系统需要将后台运行的应用带入前台。 我们建议您始终在假定冷启动的基础上进行优化。这样做也可以…

分享一下微信付费文章功能怎么做

微信付费文章功能是一种基于微信公众号的文章付费阅读模式&#xff0c;它可以帮助公众号运营者实现文章内容的变现&#xff0c;提高文章的阅读量和收益。本文将介绍微信付费文章功能的制作流程、功能特点、使用流程和推广策略&#xff0c;帮助读者了解如何制作一个高效的微信付…

Postman历史版本下载

1. 下载对应版本的postman 历史版本下载 请把下面链接的"版本号"替换为指定的版本号&#xff0c;例如&#xff1a;8.8.0 Windows64位 ​https://dl.pstmn.io/download/version/版本号/win64​ Windows32位 https://dl.pstmn.io/download/version/版本号…

基于图像的照明(IBL)简明教程

基于图像的照明基本上将图像中的所有像素视为光源。 通常&#xff0c;从全景高动态范围 (HDR) 图像创建的环境贴图&#xff08;通常是立方体贴图&#xff09;将用作纹理获取的源。 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 假设阴影物体是不透明的&#xff0c;我们…

JVM(一)

字节码文件的组成: 基础信息:魔数&#xff0c;字节码文件对应的java版本号&#xff0c;访问表示public final以及父类和接口 常量池:保存了字符串常量&#xff0c;类或者是接口名&#xff0c;字段名&#xff0c;主要在接口中使用 字段:当前类或者是接口声明的字段信息 方法:当…

Spring之IoC

Spring的设计理念和整体架构 一句话概括就是&#xff1a;Spring是一个轻量级的、非侵入式的控制反转(IOC)和面向切面(AOP)的框架。 设计理念&#xff1a; 松散耦合&#xff1a; Spring鼓励开发者编写松散耦合的代码&#xff0c;通过依赖注入和接口抽象等方式来减少组件之间的…

DV SSL证书

随着网站越来越多&#xff0c;数据安全显得尤为重要。保护网站安全的数字证书应运而生&#xff0c;各大品牌的SSL证书可以实现网站http到https的转变&#xff0c;加密传输过程&#xff0c;提升品牌形象&#xff0c;优化SEO等优点。SSL证书按照验证等级分为DV&#xff0c;OV&…

意大利航天飞行器公司【Sidereus】完成510万欧元融资

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;位于意大利萨莱诺的航天飞行器公司Sidereus Space Dynamics今日宣布已完成510万欧元融资。 本轮融资由Primo Space和CDP Venture Capital Sgr领投&#xff0c;通过Italia Venture II - Fondo Impr…

win10 wsl安装步骤

参考&#xff1a; 安装 WSL | Microsoft Learn 一、安装wsl 1.若要查看可通过在线商店下载的可用 Linux 发行版列表&#xff0c;请输入&#xff1a; wsl --list --online 或 wsl -l -o> wsl -l -o 以下是可安装的有效分发的列表。 使用 wsl.exe --install <Distro>…

python结合excel数据轻松实现接口自动化测试

在刚刚进入测试行业的时候&#xff0c;最开始也是做功能测试&#xff0c;我想很多伙伴和我一样&#xff0c;觉得自动化测试都很高端&#xff0c;很神秘。迫不及待的想去学习作自动化测试。 以前比较常用数据库python做自动化&#xff0c;后面发现excel个人觉得更加适合&#x…

Vue开发中Jwt的使用

&#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Vue》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;这个专栏…

缓存的力量:提升API性能和可扩展性

缓存是将频繁访问的数据或资源存储在临时存储位置(例如内存或磁盘)的过程&#xff0c;以提高检索速度并减少重复处理的需要。 缓存的好处 提高性能&#xff1a;缓存消除了每次从原始源检索数据的需要&#xff0c;从而提高了响应时间并减少了延迟。减少服务器负载&#xff1a;通…

OrcaTerm AI

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

MySQL(存储过程,store procedure)——存储过程的前世今生 MySQL存储过程体验 MybatisPlus中使用存储过程

前言 SQL&#xff08;Structured Query Language&#xff09;是一种用于管理关系型数据库的标准化语言&#xff0c;它用于定义、操作和管理数据库中的数据。SQL是一种通用的语言&#xff0c;可以用于多种关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;如MySQ…

spark集群环境下,实现人口平均年龄计算

文章目录 任务目标0. 版本信息1. 计算生成renkou.txt2. 文件上传至spark3. 上传文件时&#xff0c;可能出现的常见错误4. 编写spark文件5. 上传集群6. 集群环境下提交任务 任务目标 在虚拟机上部署spark集群&#xff0c;给定renkou.txt文件&#xff0c;输出平均年龄 renkou.t…

linux C++ vscode连接mysql

1.linux使用Ubuntu 2.Ubuntu安装vscode 2.1 安装的是snap版本,直接打开命令行执行 sudo snap install --classic code 3.vscode配置C 3.1 直接在扩展中搜索C安装即可 我安装了C, Chinese, code runner, 安装都是同理 4.安装mysql sudo apt update sudo apt install mysql-…

软件工程与计算总结(七)需求文档化与验证

目录 一.文档化的原因 二.需求文档基础 1.需求文档的交流对象 2.用例文档 3.软件需求规格说明文档 三.需求文档化要点 1.技术文档协作要点 2.需求书写要点 3.软件需求规格说明文档属性要点 四.评审软件需求规格说明文档 1.需求验证与确认 2.评审需求的注意事项 五…

在SIP 语音呼叫中出现单通时要怎么解决?

在VoIP的环境中&#xff0c;特别是基于SIP通信的环境中&#xff0c;我们经常会遇到一些非常常见的问题&#xff0c;例如&#xff0c;单通&#xff0c;注册问题&#xff0c;回声&#xff0c;单通等。这些问题事实上都有非常直接的排查方式和解决办法&#xff0c;用户可以按照一定…