PCA分析和因子分析
#由此说明使用prcomp函数时,必须使用标准化过的原始数据。如果使用没有标准化的raw数据(不是相关系数矩阵或者协方差矩阵),必须将参数scale. = T
<result>$sdev #表示标准差,意思是 <result>$sdev[1] = sqrt(var(<result>$x))
<result>$rotation #表示的是特征向量矩阵,也可以由eigen(<输入的原数据>)$vector 得到
<result>$x #表示的是主成分结果矩阵,可以由<输入的原数据>%*%<result>$rotation得到
==============================================================
p1 = princomp(scr,cor = T);p1 ###看来,必须把cor = T加上才可以得到正确的值,否则是使用cov计算的结果,并且计算过程中有新的参数加入
#cor = False :cv <- covmat$cov * (1 - 1/n.obs)
#cor = True: cv <- covmat$cov * (1 - 1/n.obs),sds <- sqrt(diag(cv)),cv <- cv/(sds %o% sds)
#sdev = sqrt(eigen(cv, symmetric = TRUE)$value)
#下面的证明表明,使用cov和使用cor的结果还是十分的不一样的
<result>$sdev #主成分结果矩阵每一列的标准差
<result>$loading #特征向量矩阵
<result>$scores # 主成分结果矩阵
注意:在使用princomp函数时,必须使用标准化后的原始矩阵(不能是相关系数矩阵或者协方差矩阵);如果使用未被标准化的原始数据,必须加入参数:cor = T 。
=================================================================================================
library(psych)
p32 = principal(scr,nfactors = 5,rotate = "varimax");p32
p3 = principal(scrcor,nfactors = 5,rotate = "varimax");p3
这两个运行的结果一样,说明在principal函数中,可以使用原始数据或相关系数矩阵。这个可以使用相关系数矩阵或者协方差矩阵,是十分不同于之前的两个主成分求值函数的。
p32$values #特征值,等同于结果矩阵的方差值
scr是经过标准化的数据集;r是原始矩阵,没有经过标准化的数据。
cor(scr)
cov(scr)
cor(r)
cov(r)
结果证明,经过标准化的原始矩阵的相关系数矩阵和协方差矩阵一样;但是没有经过标准化的数据集的协方差和相关系数矩阵是不一样的。
ep3 = eigen(cor(scr))
loading = ep3$vectors %*% sqrt(diag(ep3$values))
sign.tot <- vector(mode = "numeric", length = 5);sign.tot
sign.tot <- sign(colSums(loading));sign.tot
sign.tot[sign.tot == 0] <- 1;sign.tot
loadings <- loading %*% diag(sign.tot);loadings
varimax(loadings)$loadings
最后的loadings值就是上面的过程得到的,当然此处参数是 nfactors = 5, rotate = "varimax" , r = scr.
=====================================================================
以下内容来自于网址:https://site.douban.com/182577/widget/notes/11806604/note/262310174/
最常用的求解PCA的函数是stats包的
prcomp()和princomp( )。
前者采用观测阵的奇异值分解方法,后者采用相关系数阵的特征值分解方法。
输出结果上,包括特征值,载荷,主成分得分等,结果基本相似。
同时可以利用print( ),summary( )显示输出结果。
plot( )画scree plot,biplot( )绘制biplot。
SciViews包的pcomp()综合了上面两个函数的方法。
psych包的相关函数
这个包是关于心理计量的包,其中有关于主成分的函数principal( )
这个函数是作为因子分析的主成分解法存在的,要和fa.parallel()结合使用。
还有一个心理学的包:psy包,也有相关的函数
====================================================
我想说的是,principal()函数得到结果中,$value 是特征值,$loading是由因子载荷矩阵,是因子分析的主成份解法中的概念,$scores是因子得分系数。
============
http://blog.csdn.net/lilanfeng1991/article/details/36190841#
还可以参考上文
原谅我,现在还是有点模糊,都花了好几天了,算了,以后再慢慢弄明白
PCA分析和因子分析的更多相关文章
- 利用pca分析fmri的生理噪声
		A kernel machine-based fMRI physiological noise removal method 关于,fmri研究中,生理噪声去除的价值:一.现在随着技术的提升,高场fm ... 
- plink 进行PCA分析
		当我们进行群体遗传分析时,得到vcf后,可利用plink进行主成分(PCA)分析: 一.软件安装 1 conda install plink 二.使用流程 第一步:将vcf转换为plink格式 1 p ... 
- PCA分析的疑问
		R 与python scikit-learn PCA的主成分结果有部分是反的 通过R和python分别计算出来的PCA的结果存在某些主成分的结果是相反的,这些结果是没有问题的,只是表示这个分量被反转了 ... 
- 14、PCA分析
		做芯片PCA主成分分析可以选择使用affycoretools包的plotPCA方法,以样品"GSM363445_LNTT.CEL"."GSM362948_LTT.CEL& ... 
- PCA分析,及c++代码实现
		本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fengbingchun/article/details/79235028 主成分分析(Principal Co ... 
- R 语言实战-Part 4 笔记
		R 语言实战(第二版) part 4 高级方法 -------------第13章 广义线性模型------------------ #前面分析了线性模型中的回归和方差分析,前提都是假设因变量服从正态 ... 
- 因子分析和PCA总结
		因子分析和PCA 定义 因子分析就是数据降维工具.从一组相关变量中删除冗余或重复,把相关的变量放在一个因子中,实在不相关的因子有可能被删掉.用一组较小的“派生”变量表示相关变量,这个派生就是新的因子. ... 
- Eigensoft-smartpca分析PCA报错:warning (mapfile): bad chrom: Segmentation fault
		目录 问题 解决 问题 一直以来用Eigensoft的smartpca来做群体遗传的PCA分析很顺畅,结果也比较靠谱. 但今天报错如下: $ ~/miniconda3/bin/smartpca -p ... 
- 第七篇:数据预处理(四) - 数据归约(PCA/EFA为例)
		前言 这部分也许是数据预处理最为关键的一个阶段. 如何对数据降维是一个很有挑战,很有深度的话题,很多理论书本均有详细深入的讲解分析. 本文仅介绍主成分分析法(PCA)和探索性因子分析法(EFA),并给 ... 
随机推荐
- EDK II之DXE Core的事件管理
			本文简单介绍一下UEFI中的事件管理: UEFI是不支持多进程的,但是UEFI支持多事件分发机制.UEFI只支持时钟中断,并基于时钟中断实现事件分发.类似于OS中基于时钟中断来实现基于时间片的多任务调 ... 
- K8S学习笔记之Flannel解读
			0x00 概述 我们知道docker官方并没有提供多主机的容器通信方案,单机网络的模式主要有host,container,brige,none.none这种模式,顾名思义就是docker本身不去管理网 ... 
- 深度挖掘,Html5的 Range 滑动刻度的坑,兼容全平台,将任性进行到底!
			最近2天一直在弄一个滑动的刻度效果,由于项目是基于Web App开发的,于是考虑到 移动端和pc端 的兼容性问题,考虑的比较多,尝试采用 Html5的Range 来做,目前已经兼容 pc端和移动端! ... 
- jq  svg 修改image的xmlns:xlink及图片的显隐
			<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ... 
- linux下 GCC编译链接静态库&动态库
			静态库 有时候需要把一组代码编译成一个库,这个库在很多项目中都要用到,例如libc就是这样一个库, 我们在不同的程序中都会用到libc中的库函数(例如printf),也会用到libc中的变量(例如以后 ... 
- docker 给运行的容器映射本地端口
			1.提交运行中的容器为一个镜像 (这样不会丢失在容器的各种操作) docker commit tang tang1 ### tang(运行容器名称) tang1(生成镜像名称) 2 ... 
- python  --- 23 模块       os      sys       pickle       json
			一. os模块 主要是针对操作系统的 用于文件操作 二. sys 模块 模块的查找路径 sys.path 三.pickle 模块 1. pickle.dumps(对象) 序列化 把对 ... 
- Hacker
			https://hackertarget.com/nikto-website-scanner/ 
- topcoder srm 662 div1
			problem1 link 首先枚举差值$d$,判断是否存在一个序列任意连续两个之间的差值小于$d$. 首先将数字排序,然后从小到大依次放置每一个数字.每个当前的数字有两个位置可以放,当前序列的前面或 ... 
- topcoder srm list
			300 305 310 315 320 325 330 335 340 350 360 370 380 390 400 410 415 420 425 430 435 440 445 450 455 ... 
