10.常用统计分析方法——主成分分析和因子分析

基础知识:

主成分分析概念

主成分分析PCA:是一种数据降维的技巧,将大量相关变量转化为一组很少的不相关变量,这些无关变量称为主成分。

在特征选择方法中有一种方法是方差过滤,即如果一个特征的方差很小,则意味着这个特征上很可能有大量取值都相同,那这一个特征的取值对样本而言就没有意义(即不带有效信息)。从方差的这种应用可以推断出,如果一个特征的方差很大,则说明这个特征上带有大量的信息。因此,在降维中,PCA使用的信息量衡量指标就是样本方差,方差越大,特征所带的信息量越多。

 Var代表一个特征的方差,n代表样本量,xi代表一个特征中的每个样本取值,代表这一列样本的均值。(方差计算公式中除的是n-1,是为了得到样本方差的无偏估计)

因子分析概念

探索性因子分析(EFA):是用一系列用来发现一组变量的潜在结构的方法。通过寻找一组更小、更隐蔽的或隐藏的结构来解释已观测到的,显式的变量间的关系。

主成分PC1,PC2是观测变量(X1到X5)的线性组合。形成线性组合的权重都是通过最大化各主成分所解释的方差来获得的,同时还要保证各主成分间不相关。

因子F1,F2被当作观测变量的结构基础或“原因”,而不是他们的线性组合。代表观测变量方差的误差(e1到e5)无法用因子解释。

样本量

因子分析需要5-10倍的于变量数的样本量。如果你有几百个观测,样本量已充足。

PCA和EFA的分析函数

推荐psych()包中的函数

pschy包中的有用的因子分析函数
函数描述
principle()函数含有多种可选的方差旋转方法的主成分分析
fa()函数可用主轴、最小残差、加权最小平方或最大似然法估计因子分析
fa.parallel ( )函数含平行分析的碎石图
factor.plot( )函数绘制因子分析或主成分分析的结果
fa.diagram( )函数绘制因子分析或主成分分析的负荷矩阵
scree()函数因子分析和主成分分析的碎石图

主成分分析

主成分分析的基本步骤

 

 


 psych包主成分分析

案例:数据集USJudegeRatings包含了律师对美国高等法院法官的评分。数据框包含了43各观测,12各变量。

CONT:律师与法官的接触次数;

INTG:法官的正直程度;

DMNR:风度;

DILG:勤勉度;

CFMG:案例流程管理水平;

DECI:决策效率;

PREP:审理前的准备工作

FAMI:对法律的熟悉程度;

ORAL:口头裁决的可靠度;

WRIT:书面裁决的可靠度;

PHYS:体能;

RTEN:是否值得保留。

判断主成分个数

因为需要使用更少的变量来评估法官,目标是简化数据,所以使用PCA。数据保持原始得分形式,没有缺失值。因此下一步是要判断需要多少个主成分?

判断PCA需要多少个主成分的准则:

  • 根据先验经验和理论知识判断主成分数;
  • 根据要解释变量方差的累计值的阈值来判断需要的主成分数;
  • 通过检查变量间K*K的相关系数矩阵来判断保留的主成分数。

方法一:最常见的是基于特征值的方法:主成分都与相关系数矩阵的特征值相关联,第一个主成分与最大的特征值相关联,第二个主成分与第二大的特征值相关联,依次类推。Kaiser-Harris准则建议保留特征值大于1的主成分

方法二:Cattle碎石检验则描绘了特征值与主成分数的图形,这类图形可以清晰的展示图形的弯曲状况,在图形变化最大处之上的主成分都可以保留。

方法三:平行分析:进行模拟,依据与初始矩阵相同大小的随机数据矩阵来判断要提取的特征值,若基于真实数据的某个特征值大于一组随机数据矩阵相应的平均特征,那么主成分可以保留。

data(USJudgeRatings)
library(psych)
fa.parallel(USJudgeRatings[,-1],fa="pc",n.iter = 10,
            show.legend = F,
            main = "Scree plot with parallel analysis")

利用fa.parallel()函数对三种特征值判别准则进行评价。对于11种评分(删除CONT)。

 基于观测特征值的碎石检验(由线段和x符合组成)。根据100个随机数据矩阵推到出来的特征均值线(虚线),以及大于 1的特征准则(y=1的水平线)。

结果解读:三种准则都提示一个主成分既可以保留数据集的大部分信息。

提取主成分

基本函数格式

principle\left ( r, nfactors= ,rotate= ,scores= \right )

r是相关系数矩阵或原始数据框矩阵

nfactors设定主成分个数,默认为1

rotate指定旋转的方法(默认最大方差旋转variman)

scores设定需要计算主成分得分(默认不需要)

pc <- principal(USJudgeRatings[,-1],nfactors = 1)
pc

 由于PCA只对相关系数矩阵进行分析,在获取主成分之前,原始数据将会被自动转换为相关系数矩阵。

PC1栏中包含了成分载荷,指观测变量与主成分的相关系数。如果不止一个主成分的话,就会由PC2,PC3等。从结果中PC1与各个变量之间都高度相关,则说明他是一个可用来进行一般性评价维度。

h2栏指成分公因子方差,即每个主成分对每个变量的方差解释度。u2栏指成分唯一性,即方差无法被主成分解释的比例(1-h2)。

ss loading行包含了与主成分相关联的特征值,指的是与特定主成分相关联的标准化后的方差值。本案例中PC1为10。proprotion Var表示每个主成分对整体数据的解释程度。也即是pc1解释了11个变量的92%的方差。

主成分得分

从原始数据中提取成分得分

pc <- principal(USJudgeRatings[,-1],nfactors = 1,scores = T)
head(pc$scores)

案例二:Harman.cor数据集是305个女孩的8个身体测量指标,该数据是相关系数组成,而不是原始数据集。

(1)判断主成分个数:

library(psych)
fa.parallel(Harman23.cor$cov,n.obs = 302,
            fa = "pc",n.iter = 100,
            show.legend = F,
            main = "Scree plot with parallel analysis")

根据图形中K-H准则,碎石检验和平行分析都建议选择两个主成分。

(2)进行主成分分析

pc <- principal(Harman23.cor$cov,nfactors = 2,rotate = "none")
pc

从结果中可以看到第一个主成分解释了身体测量指标58%的方差,而第二个主成分解释了22%的方差,两者综合一共解释了81%的方差,对于height,两者共解释了其88%的方差。

负荷阵解释了成分和因子的含义,第一主成分与每个身体测量指标都呈正相关,第二个主成分与前四个变量呈负相关,与后四个变量呈正相关。当提取多个成分时,对他们进行旋转可以使结果更具解释性

旋转:

是一系列将成分载荷阵变得更容易解释的数学方法,他们尽可能地对成分去噪。

旋转的方法:

正交旋转:使选择的成分保持不相关

斜交旋转:使选择的成分变得相关

最流行的正交旋转是方差极大旋转。

rc <- principal(Harman23.cor$cov,nfactors = 2,rotate = "varimax")
rc

 

 列名由pc变成了rc表明已经被旋转,第一个主成分主要由前四个变量来解释(长度变量),rc2栏的载荷表示第二个主成分主要有变量5-8来解释(容量变量)。两个主成分仍不相关。两个变量的总的解释度81%没有改变,只是rc1由pc1的58%降为了44%,rc2由原来的pc222%升高到37%。准确来说我们此时称呼他们作为成分而不是主成分。

获得主成分得分系数

当主成分分析是基于相关系数矩阵时,原始数据便不可再用,也不可能获取每个观测的主成分得分,但是你可以得到用来计算的主成分得分的系数。

round(unclass(rc$weights),2)

 可以得到以下主成分得分公式:

PC1= 0.28*height+0.30*arm.span +0.30*forearm +0.29*lower.leg-0.06*weight-0.08*bitro.diameter-0.10*chest.girth-0.04*chest.width

PC2= -0.05*height-0.08*arm.span -0.09*forearm -0.06*lower.leg+0.33*weight+0.32*bitro.diameter+0.34*chest.girth+0.27*chest.width

 

基础包主成分分析

 对相关系数矩阵进行特征分解:

cor.matrix <- Harman23.cor$cov
eigen(cor.matrix)

values中显示各个主成分的特征值,前两个特征值大于1,且前两个特征值之和占总特征值总和(总和为变量的个数8)的(80.5%),所以保留前两个主成分。

前两个主成分可以表示为:

Z1=-0.398X1-0.389X2+\cdots -0.310X8

Z2=-0.280X1-0.331X2+\cdots +0.314X8

 

还可以使用stat包中的函数princomp()函数完成。

PCA <- princomp(covmat=cor.matrix)
summary(PCA,loadings = T)

leading=T表示显示载荷矩阵,载荷矩阵中绝对值小于0.1的数值没有显示。如果想要全部显示,可以将参数cutoff设置为0。

绘制碎石图:

screeplot(PCA,type = "lines")
abline(h=1)

 

后面6个主成分的散点形成平台,且特征值均小于1,因此仅保留前两个。

主成分分析注意事项

(1)当原始变量之间的相关性较小时,应用主成分分析是没有意义的。

(2)主成分分析可以基于协方差矩阵或相关系数矩阵,得到的结果通常是不同的,当指标之间的取值范围彼此相差不大时,可以用协方差矩阵进行主成分分析,这样可以尽量保留了原始变量的意义。而当指标之间的取值范围相差较大或者量纲不同时,应采用相关系数矩阵进行主成分分析。

(3)主成分分析的主要目的时降维,虽然主成分分析的结果就可以解释一些问题,但是更多情况主成分分析并不是最终目的。

因子分析

EFA的目的时通过发掘隐藏在数据下的一组较少、更为基本的无法观测的变量,来解释一组可观测变量的相关性。

 这些虚拟的、不可观测的变量称作因子。(每个因子被认为可解释多个观测变量间共有的方差,因此也称作公因子)

模型的基本形式:

 F是表示公因子,Ui是Xi变量独有的部分(无法被公因子解释)。ai可以认为是每个因子对复合而成的可观测变量的贡献值。

案例:112个人参加了六个测验,包括非语言的普通智力测验(general1)、画图测验(picture)、积木图案测验(blocks)、迷宫测验(maze)、阅读测验(reading)和词汇测验(vocab)。如何用一组较少、潜在的心理学因素来解释参与者的测验得分。

数据集ability.cov提供了变量的协方差矩阵,可以转化用cov2cor()函数将其转化为相关系数矩阵。

options(digits = 2)
covariances <- ability.cov$cov
correlations <- cov2cor(covariances)

判断提取的公共因子数

fa.parallel(correlations,n.obs = 112,fa = "both",
            n.iter = 100,
            main = "Scree plots with parallel analysis")

fa设置为both,同时展示主成分和公共因子分析的结果。

如果是PCA分析,可能会选择一个成分(碎石检验和平行分析)或者两个成分(特征值大于1),当摇摆不定时,高估因子数会比低估因子数的结果好,因为高估因子数一般较少曲解真实情况。

如果进行EFA分析,碎石检验前两个特征值都在拐角处之上,并且大于基于100次模拟数据矩阵的特征值均值。对于EFA,Kaiser-Harris准则的特征值数大于0而不是1。所以该准则中建议选择两个因子。

提取公因子

fa()函数可以提取公因子

fa(r,nfactor=,n.obs=,rotate=,scores=,fm=)

r是相关系数矩阵或原始数据矩阵

nfactor设定提取的因子数目(默认为1);

n.obs是观测数;

rotate设定旋转的方法,默认为互变异数最小法;

scores设定是否计算因子得分;

fm设定因子话的方法(默认极小残差法)

与PCA不同,提取公共因子的方法很多,包括最大似然法(ml),主轴迭代法(pa),加权最小二乘法(wls),广义加权最小二乘法(gls)和最小残差法(minres)

(1)提取未旋转的主轴迭代因子法

fa <- fa(correlations,nfactors = 2,rotate = "none",fm="pa")
fa

两个因子解释了六个心理学测试60%的方差,不过不太好解释。

(2)用正交旋转提取因子

fa <- fa(correlations,nfactors = 2,rotate = "varimax",fm="pa")
fa

这样结果就便于解释,第一个因子在阅读和词汇上载荷较大,画图、积木图案和迷宫在第二个因子上载荷较大,非语言的普通治理测量在两个因子上载荷较为平均,这表明存在一个语言智力因子和一个非语言智力因子。

(3)用斜交旋转提取因子

正交旋转,因子分析的重点在于因子结构矩阵(变量与因子的相关系数);斜交旋转,因子分析会考虑三个矩阵:因子结构矩阵,因子模式矩阵和因子关联矩阵。

因子模式矩阵即标准化的回归系数矩阵,它列出因子预测变量的权重。因子关联矩阵即因子相关系数矩阵。

fa <- fa(correlations,nfactors = 2,rotate = "promax",fm="pa")
fa

PA1和PA2栏中的值组成了因子模式矩阵,他们是标准化的回归系数,而不是相关系数。

因子关联矩阵显示PA1和PA2的相关系数为0.55,相关性较大。

fsm <- function(oblique){
  if(class(oblique)[2]=="fa" & is.null(oblique$Phi)){
    warning("Object doesn't look like oblique EFA")
  } else{
    P <- unclass(oblique$loading)
    F <- P %*% oblique$Phi
    colnames(F) <- c("PA1","PA2")
    return(F)
  }
}
fsm(fa)

F为因子载荷矩阵,P为因子模式矩阵,Phi为因子关联矩阵,因此因子结构矩阵(载荷矩阵)F=P*Phi

 现在展示的是变量与因子之间的相关系数,将他们与正交旋转得到的因子载荷阵相比,该载荷阵的噪音较大,这是因为之前你允许潜在因子相关。

绘制正交/斜交的结果:

factor.plot(fa, labels = rownames(fa$loadings))

 

fa.diagram(fa,simple = F)

simple设置为TRUE,仅显示每个因子下最大的载荷,以及因子间的相关系数。

 

因子分析与主成分分析的关系

主成分分析严格来说不是一种模型,而是一种线性变换。

因子分析模型是将原始变量表示为公共因子和特殊因子的线性组合,因此其初始因子载荷中包含了特殊因子的影响。同时,因子载荷不是唯一的,因子旋转便于对因子载荷进一步简化,使得各个公共因子具有明确的实际意义。当特殊因子变差为0时,主成分分析和因子分析时等价。主成分分析的重点是在综合原始变量的信息,而因子分析的重点在于解释原始变量之间的关系

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ckman:非常好用的ClickHouse可视化集群运维工具

概述 什么是ckman ckman&#xff0c;全称是ClickHouse Management Console&#xff0c; 即ClickHouse管理平台。它是由擎创科技数据库团队主导研发的一款用来管理和监控ClickHouse集群的可视化运维工具。目前该工具已在github上开源&#xff0c;开源地址为&#xff1a;github…

免费SSL申请和自动更新

当前是在mac下操作 安装certbot # mac下brew安装即可 brew install certbotcentos 安装 centos安装文档 申请泛解析证书 sudo certbot certonly --manual --preferred-challengesdns -d *.yourdomain.com## 输出 Saving debug log to /var/log/letsencrypt/letsencrypt.lo…

民用激光雷达行业简析

01. 激光雷达是“机器之眼” • 激光雷达是一个通过发射激光并接受发射激光同时对其进行信号处理&#xff0c;从而获得周边物体距离等信息的主动测量装置。 • 激光雷达主要由光发射、光扫描、光接收三大模块组成。光发射模块集成了驱动、开关和光源等芯片。光接收模块集成了…

构筑双品牌矩阵背后,广汽埃安讲出能源生态闭环的“新故事”

“一路繁花”用来形容广汽埃安的2023年并不为过。 2023年12月28日&#xff0c;埃安达成累计产销百万辆的目标&#xff0c;成为全球最快破百万的纯电品牌、新能源品牌以及汽车品牌&#xff1b;全年累计销量超48万辆&#xff0c;同比增长77%。 值得一提的是&#xff0c;2023年以…

APUE学习之信号(Signal)

目录 一、信号 1、基本概念 2、用户处理信号的方式 3、查看信号 4、可靠信号和不可靠信号 5、信号种类 6、终止进程信号的区别 二、进程对信号的处理 1、signal&#xff08;&#xff09;函数 2、sigaction&#xff08;&#xff09;函数 3、代码演示 4、运行结果…

鸿蒙开发案例002

1、目标需求 界面有增大字体按钮&#xff0c;每次点击增大字体按钮&#xff0c;“Hello ArkTS”都会变大 2、源代码 Entry Component struct Page {textValue: string Hello ArkTSState textSize: number 50myClick():void{this.textSize 4}build() {Row() {Column() {//…

基于若依的ruoyi-nbcio流程管理系统一种简单的动态表单模拟测试实现(五)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/n…

日志级别与配置

日志的级别 FATAL致命信息表明严重的问题&#xff0c;可能导致应用程序崩溃。ERROR错误信息指示应用程序遇到了一个错误&#xff0c;可能导致功能受损。通常用于记录异常信息。WARN警告信息表明可能存在问题&#xff0c;但不会导致应用程序失败。仍然可以正常运行&#xff0c;…

【数据结构四】栈与Stack详解

目录 栈与Stack 1.实现一个自己的栈 2.Stack的基本使用 3.栈的一些oj题训练 4.栈&#xff0c;虚拟机栈&#xff0c;栈帧的区别 栈与Stack 栈 &#xff1a;一种特殊的线性表&#xff0c;其 只允许在固定的一端进行插入和删除元素操作 。进行数据插入和删除操作的一端称为栈顶…

uvicorn日志清空问题以及uvicorn日志配置

uvicorn日志清空问题 1、配置&#xff1a; uvicorn starlette 2、现象描述&#xff1a; 当我使用uvicorn starlette进行Python web开发的时候&#xff0c;本来想把所有的日志都打印到一个文件里面&#xff0c;于是我写了一个启动脚本&#xff0c;所有的日志都输出到log.t…

jQuery语法知识(表单)

表单 1、:button Selector 描述:选择所有按钮元素和类型为按钮的元素 语法 :jQuery(":button") <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"wid…

C++:C/C++内存管理

C&#xff1a;C/C内存管理 C语言C语言内存分配回顾malloc & calloc & realloc & free Cnew & deletenew[ ] & delete[ ]定位newnew & delete原理 malloc / free 与 new / delete对比 C语言 C语言内存分配回顾 我们先回顾一下C语言的内存分配&#xf…

分享一个剧本(改编自我)

不知道是不是错过了一个喜欢我的女孩&#xff0c;一个很不错的女孩&#xff0c;当初没勇气表白。去年表白过但女孩表示仅想是永远的朋友&#xff0c;今天翻他的朋友圈发现2021年我生日时&#xff0c;她分享了这首歌曲&#xff0c;还评论Best wishes!!!&#xff0c;高中有一次我…

抖音怎么引导到公众号丨数灵通

抖音是一款非常流行的社交媒体应用程序&#xff0c;用户可以在其中分享短视频和互动内容。许多用户希望通过抖音来引流到他们的微信公众号&#xff0c;以扩大影响力并吸引更多粉丝。以下是一些关于如何在抖音上跳转到微信公众号的科普信息&#xff1a; 1.信息流广告&#xff1a…

PPP协议原理介绍+报文分析+配置指导-RFC1661

个人认为&#xff0c;理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息&#xff0c;更加便于理解协议。 因此本文将在PPP协议报文的基础上进行介绍。 关于PPP协议基本原理&#xff0c;可参考RFC1661-The Point-to-Point Protocol (PPP)。 关于P…

Linux的奇妙冒险———vim的用法和本地配置

vim的用法和本地配置 一.vim的组成和功能。1.什么是vim2.vim的多种模式 二.文本编辑&#xff08;普通模式&#xff09;的快捷使用1.快速复制&#xff0c;粘贴&#xff0c;剪切。2.撤销&#xff0c;返回上一步操作3.光标的控制4.文本快捷变换5.批量化操作和注释 三.底行模式四.v…

响应拦截器的 return Promise.reject(res.data.message)

今天在看老师讲解代码的时候,解决了我心中的一些疑惑。 在做excel文件导出的时候,没有告诉浏览器文件的格式是Blod产生了报错。 看下图: 可以看到下面的内容:如果业务成功 返回 res.data 如果业务失败,给出错误信息的提示&#xff0c;将这个错误抛出去。 因此我们在发送一个…

2023春秋杯冬季赛 --- Crypto wp

文章目录 前言Cryptonot_wiener 前言 比赛没打&#xff0c;赛后随便做一下题目 Crypto not_wiener task.py: from Crypto.Util.number import * from gmpy2 import * import random, os from hashlib import sha1 from random import randrange flagb x bytes_to_long(f…

面试题合集

目录 二叉树和动态规划的框架图内容补充数组为什么下标从0开始&#xff1f;windows内存上存储数据采用是什么模式&#xff1f;atoi 和itoa函数的实现字节对齐方式&#xff0c;为什么进行内存对齐&#xff1f;结构体的大小二分查找有重复数字中最左边的数 最右边的数工厂模式 单…

幻兽帕鲁PalWorld服务器搭建详细教程

幻兽帕鲁PalWorld是一款由Pocketpair开发的游戏&#xff0c;融合了多种玩法&#xff0c;其独特的题材和画风吸引了很多玩家。为了更好地进行游戏体验&#xff0c;很多玩家选择自行搭建服务器。本文将详细介绍如何搭建幻兽帕鲁PalWorld服务器。 第一步&#xff1a;购买服务器 根…
最新文章