当前位置: 首页 > news >正文

【R语言】主成分分析与因子分析

一、主成分分析

主成分分析(Principal Component Analysis, PCA)是一种常用的无监督数据降维技术,广泛应用于统计学、数据科学和机器学习等领域。它通过正交化线性变换将(高维)原始数据投影到一个新的坐标系(低维空间),同时保留数据的主要变异信息,使得新坐标系中的第一个坐标轴(主成分1)上的方差最大,第二个坐标轴(主成分2)上的方差次大,并且各个坐标轴之间相互正交(即不相关)。PCA 的目标是通过保留数据的主要变异方向来减少数据的维度,同时尽可能少地丢失信息。

psych扩展包能提供很丰富和有用的函数,它的输出结果也更接近商业统计分析软件,如SAS和SPSS等,所使用的函数为principal()函数

principal()函数

# 准备数据(以 iris 数据集为例)
head(iris)
# 去除标签列,只保留数值列
iris_data <- iris[, 1:4]
head(iris_data)

 principal()函数的nfactors用来指定各种主成分,iris_data里面有4种变量,所以指定为4。

library(psych)
pcal_iris <- principal(iris_data, nfactors=4)
pcal_iris

从上面的结果可知,前三个成分(RC1+RC3+RC2)的累计解释比例(Cumulative Proportion)为99%,前两个成分(RC1+RC3)的累计解释比例(Cumulative Proportion)为72%,所以选择这两个或三个主要成分是合适的。 

pcal_iris1 <- principal(iris_data, nfactors=3)
pcal_iris1

从上面结果可知,当nfactors为3时,累计比例能近似达到100%,说明用三个主成分代替原有变量的信息是足够的。 

二、因子分析

因子分析(Factor Analysis)是一种降维技术,它用于研究变量之间的内在关系,试图通过少数几个“潜在变量”(或称“因子”)来解释多个观测变量之间的相关性,其核心思想是降维结构探测。这些潜在变量是不可直接观测的,但可以通过它们对观测变量的影响来推断。因子分析在心理学、社会学、市场研究、生物学等多个领域都有广泛应用。

根据是否已知潜在结构,可以将因子分析分为探索性因子分析(Exploratory Factor Analysis,EFA)和验证性因子分析(Confirmatory Factor Analysis,CFA)。

1、注意事项

在进行因子分析,需要注意以下两个方面。

保证有足够的样本量。一般认为样本量小于50时,不适合做因子分析;样本量至少在100以上;样本量达到1000时,效果会比较好。而且,样本量的选择还受原始变量数量的影响,一般样本量至少是原始变量数量的5倍以上,10倍更好。

原始变量之间应该要有足够的相关性。如果所有或者大部分原始变量是相互独立或者相关系数都小于0.3,则不能从中提取公共因子,即数据不适合进行因子分析。

原始变量之间的相关性可以使用KMO(Kaiser-Meyer-Oklin)检验Bartlett球形检验

因子分析可以使用psych扩展包中的fa()函数

fa(r, nfactors, n.obs, rotate, scores, fm)

  1. r:相关系数矩阵或者原始数据矩阵;
  2. nfactor:因子数,默认为1;
  3. n.obs:观测数,当r为相关系数矩阵时需手动输入;
  4. rotate:设定因子旋转的方法,默认为promax(斜交旋转);还有 varimax(正交旋转)旋转有助于更好地解释因子结构。
  5. scores:是否计算因子得分,默认为FALSE,且要求r为原始数据矩阵;
  6. fm:因子提取方法,默认为minres,一般选择ml(最大似然法)。

2、分析步骤

下面使用R语言中的内置数据集mtcars做演示:

2.1 准备数据

library(psych)
library(GPArotation) # 支持因子旋转
head(mtcars)
data <- mtcars[,c("mpg", "disp", "hp", "drat", "wt", "qsec")]
head(data)

2.2 检查数据的适用性

检验相关性:如果变量间相关性较低(绝对值<0.3),可能不适合因子分析

cor_data <- cor(data)
cor_data

从下面结果可知,绝大多数的绝对值都大于0.3。 

 KMO检验KMO值>0.6表示数据适合做因子分析。

KMO(data)

从下面结果可知,Overall MSA=0.76>0.6。 

 Bartlett球形检验: p<0.05时适合做因子分析。

cortest.bartlett(cor_data, n = nrow(data)) 

从下面结果可知,p=1.332068e-30 < 0.05。 

 2.3 确定因子数量

特征值(Eigenvalues):碎石图,选择特征值>1的因子

eigen_values <- eigen(cor_data)$values
plot(eigen_values, type = "b", main = "Scree Plot")

从以下结果可知,只能选择2个因子。 

 

 平行分析(Parallel Analysis):

fa.parallel(cor_data, n.obs=nrow(data), fm="ml", fa = "fa", n.iter=100)

从以下碎石图结果可知,建议取2个因子(虚线上面的小三角形个数) 

2.4 进行因子分析

使用正交旋转。

#   数据为相关矩阵 
#   nfactors: 因子数
#   最大迭代次数为100次
#   rotate: 旋转方法("varimax"正交旋转,"oblimin"斜交旋转)
#   fm: 因子提取方法("pa"主成分,"ml"极大似然)
result <- fa(r = cor_data, nfactors = 2, n.obs = nrow(data), n.iter=100, rotate = "varimax", fm = "ml")
result

从以下结果可知,2个因子一共解释了100%的变异。 

使用斜交旋转。

result <- fa(r = cor_data, nfactors = 2, n.obs = nrow(data), n.iter=100, rotate = "promax", fm = "ml")
result

 2.5 可视化结果

# 绘制因子载荷图
fa.diagram(result)

相关文章:

【R语言】主成分分析与因子分析

一、主成分分析 主成分分析&#xff08;Principal Component Analysis, PCA&#xff09;是一种常用的无监督数据降维技术&#xff0c;广泛应用于统计学、数据科学和机器学习等领域。它通过正交化线性变换将&#xff08;高维&#xff09;原始数据投影到一个新的坐标系&#xff…...

ROS-相机话题-获取图像-颜色目标识别与定位-目标跟随-人脸检测

文章目录 相机话题获取图像颜色目标识别与定位目标跟随人脸检测 相机话题 启动仿真 roslaunch wpr_simulation wpb_stage_robocup.launch rostopic hz /kinect2/qhd/image_color_rect/camera/image_raw&#xff1a;原始的、未经处理的图像数据。 /camera/image_rect&#xff…...

STM32 如何使用DMA和获取ADC

目录 背景 ‌摇杆的原理 程序 端口配置 ADC 配置 DMA配置 背景 DMA是一种计算机技术&#xff0c;允许某些硬件子系统直接访问系统内存&#xff0c;而不需要中央处理器&#xff08;CPU&#xff09;的介入&#xff0c;从而减轻CPU的负担。我们可以通过DMA来从外设&#xf…...

【JAVA实战】JAVA实现Excel模板下载并填充模板下拉选项数据

背景 有这样一个场景&#xff1a;前端下载Excel模板&#xff0c;进行数据导入&#xff0c;这个下载模板过程需要经过后端接口去数据库查询数据进行某些列的下拉数据填充&#xff0c;下拉填充的数据过程中会出现错误String literals in formulas can’t be bigger than 255 cha…...

java面试笔记(一)

1. 一万个string类型的数据&#xff0c;设计一个算法如何按照String长度来排序 以使用 Arrays.sort() 方法&#xff0c;并结合一个自定义的比较器。以下是实现的示例代码: public class StringLengthSort {public static void main(String[] args) {// 定义一万个字符串的示例…...

【C++】36.C++IO流

文章目录 1. C语言的输入与输出2. 流是什么3. CIO流3.1 C标准IO流3.2 C文件IO流 4. stringstream的简单介绍 1. C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据&#xff0c;并将值存放在变量中。pri…...

Qt5开发入门指南:从零开始掌握跨平台开发

目录 Qt框架概述 开发环境搭建 基础语法与核心机制 第一个Qt窗口程序 常见问题解答 一、Qt框架概述 1.1 什么是Qt&#xff1f; Qt是一个1995年由挪威Trolltech公司开发的跨平台C图形用户界面应用程序框架。最新Qt5版本主要包含&#xff1a; GUI模块&#xff1a;支持Wind…...

Rook-ceph(1.92最新版)

安装前准备 #确认安装lvm2 yum install lvm2 -y #启用rbd模块 modprobe rbd cat > /etc/rc.sysinit << EOF #!/bin/bash for file in /etc/sysconfig/modules/*.modules do[ -x \$file ] && \$file done EOF cat > /etc/sysconfig/modules/rbd.modules &l…...

深度学习在蛋白质-蛋白质相互作用(PPI)领域的研究进展(2022-2025)

一、蛋白质-蛋白质相互作用(PPI)的定义与生物学意义 蛋白质-蛋白质相互作用(Protein-Protein Interaction, PPI)是指两个或多个蛋白质通过物理结合形成复合物,进而调控细胞信号传导、代谢、免疫应答等生命活动的过程。PPI是生物体内复杂功能网络的核心,例如酶与底物的结…...

网络安全学习架构 网络安全架构内容

网上买的《信息安全原理及应用》的书还没到&#xff0c;就找了一本《密码编码学与网络安全》的电子书&#xff0c;写的也不错&#xff0c;计划今天和明天把第一章绪论和第二章的数论给看完 1. 计算机网络安全概念 计算机安全的三个核心是&#xff1a;完整性&#xff08;只要特…...

硕成C语言24

不管风吹浪打&#xff0c;胜似闲庭信步&#xff01; 1.选择排序&#xff1a; 不管风吹浪打&#xff0c;胜似闲庭信步&#xff01;1.选择排序&#xff1a; // 这个宏定义用于忽略 Visual Studio 中一些安全相关的警告&#xff0c;使得可以使用像 scanf 这样的函数而不产生警告…...

《Stable Diffusion绘画完全指南:从入门到精通的Prompt设计艺术》-配套代码示例

第一章&#xff1a;模型加载与基础生成 1.1 基础模型加载 from diffusers import StableDiffusionPipeline import torch# 加载SD 1.5基础模型&#xff08;FP32精度&#xff09; pipe StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5",…...

Linux下为Intel核显安装OpenCL

实验环境 CPU&#xff1a;N5105运行内存&#xff1a;32G系统&#xff1a;almalinux 8 &#xff08;类似CentOS系统&#xff09; 安装过程 检查i915驱动 输入命令dmesg | grep i915查看驱动的加载信息。 我这里没接显示器&#xff0c;输出正确的驱动加载信息如下图所示&…...

用deepseek学大模型04-机器学习建模过程

https://metaso.cn/s/7tEmBHr 目前已经学完深度学习的数学基础&#xff0c;给出机器学习建模的基本过程 好的&#xff0c;我现在需要回答用户的问题&#xff1a;已经学完深度学习的数学基础&#xff0c;现在要给出机器学习建模的基本过程。我需要结合我搜索到的资料来构建一个详…...

【ClickHouse】Ubuntu下离线安装ClickHouse数据库并使用DBeaver连接

目录 0. 安装前准备1 安装ClickHouse1.1 下载安装包1.2 离线安装1.3 配置密码1.4 启动ClickHouse服务 2 DBeaver连接配置2.1 下载ClickHouse驱动2.2 DBeaver配置2.2.1 配置主要参数2.2.2 配置驱动 2.3 常见问题处理2.3.1 修改远程登录配置2.3.2 更新驱动配置 0. 安装前准备 有…...

Unity3D实现接入DeepSeek对话

系列文章目录 unity知识点 文章目录 系列文章目录👉前言👉一、使用第一步👉1-1、登录注册DeepSeek👉1-2、创建API-key👉二、使用第二步👉三、使用第三步👉壁纸分享👉总结👉前言 随着人工智能和机器学习技术的不断进步,DeepSeek的未来发展趋势充满了无限可能…...

【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析②】

ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase02 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月15日 关键词&#xff1a;UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023 TC10-002测试用例 用例ID测试场景验证要点参考条款预期…...

前端新手必看:10 大 UI 组件库全面解析,快速搭建高质量 Web 应用」 「从零开始:Vue 和 React 最受欢迎的 UI 组件库入门指南」 「超实用!PC 端和移动端 UI 组件库推荐与实战

前端新手必看&#xff1a;10 大 UI 组件库全面解析&#xff0c;快速搭建高质量 Web 应用 目录 什么是 UI 组件库&#xff1f;为什么需要 UI 组件库&#xff1f;PC 端 UI 组件库推荐 Ant DesignElement UIVuetifyBootstrapVueiView (View UI)Quasar FrameworkMaterial-UI (MUI…...

【MySQL高级】17 - MySQL中常用工具

1. mysql 该mysql不是指mysql服务&#xff0c;而是指mysql的客户端工具。语法&#xff1a; mysql [options] [database]1.1 连接选项 参数 &#xff1a; -u, --username 指定用户名-p, --password[name] 指定密码-h, --hostname 指定服务器IP或域名-P, --por…...

【Linux】Linux 文件系统——有关 inode 不足的案例

ℹ️大家好&#xff0c;我是练小杰&#xff0c;今天周二了&#xff0c;明天星期三&#xff0c;还有三天就是星期五了&#xff0c;坚持住啊各位&#xff01;&#xff01;&#xff01;&#x1f606; 本文是对之前Linux文件权限中的inode号进行实例讨论&#xff0c;看到博客有错误…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1&#xff1a;HTML/CSS 前端高频面试题2&#xff1a;浏览器/计算机网络 前端高频面试题3&#xff1a;JavaScript 1.什么是强缓存、协商缓存&#xff1f; 强缓存&#xff1a; 当浏览器请求资源时&#xff0c;首先检查本地缓存是否命中。如果命…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...

零基础在实践中学习网络安全-皮卡丘靶场(第十一期-目录遍历模块)

经过前面几期的内容我们学习了很多网络安全的知识&#xff0c;而这期内容就涉及到了前面的第六期-RCE模块&#xff0c;第七期-File inclusion模块&#xff0c;第八期-Unsafe Filedownload模块。 什么是"遍历"呢&#xff1a;对学过一些开发语言的朋友来说应该知道&…...

【见合八方平面波导外腔激光器专题系列】用于干涉光纤传感的低噪声平面波导外腔激光器2

----翻译自Mazin Alalus等人的文章 摘要 1550 nm DWDM 平面波导外腔激光器具有低相位/频率噪声、窄线宽和低 RIN 等特点。该腔体包括一个半导体增益芯片和一个带布拉格光栅的平面光波电路波导&#xff0c;采用 14 引脚蝶形封装。这种平面波导外腔激光器设计用于在振动和恶劣的…...