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),并给 ...
随机推荐
- 【js操作url参数】获取指定url参数值、取指定url参数并转为json对象
获取指定url参数值 /* 获取某url中的某参数值 调用:GetUrlQueryString("[url地址]","[参数名]"); */ function ...
- linux下启动多个php,分别监听不同的端口。
在工作中,我们可能会遇到,服务器集群的搭建. 这个时候,我们不可能,每一台服务器都是lnmp的环境,我们会把nmp分别放在不同的服务器上,不同的服务器负责不同的功能.比如我们下面要说的php 加入ng ...
- MyBatis批量更新
逐条更新 这种方式显然是最简单,也最不容易出错的,即便出错也只是影响到当条出错的数据,而且可以对每条数据都比较可控. 代码 updateBatch(List<MyData> datas){ ...
- UUID实现之一twitter的分布式自增IDsnowflake算法
Twitter的分布式自增ID算法snowflake (Java版) 概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点 ...
- 使用liner、feather、multiband对已经拼接的数据进行融合(下)
理解mulitband.所谓的mulitband,其实就是一种多尺度的样条融合,其实现的主要方法就是laplace金字塔. 高斯金字塔是向下采样,而laplace金字塔式向上采样(也就是恢复),采用的 ...
- MS08_067漏洞渗透攻击实践
MS08_067漏洞渗透攻击实践 实验前准备 1.两台虚拟机,其中一台为kali,一台为windows xp sp3(英文版). 2.在VMware中设置两台虚拟机网络为NAT模式,自动分配IP地址, ...
- NOIP 车站分级 (luogu 1983 & codevs 3294 & vijos 1851) - 拓扑排序 - bitset
描述 一条单向的铁路线上,依次有编号为 1, 2, ..., n 的 n 个火车站.每个火车站都有一个级别,最低为 1 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车 ...
- 【Python31--pickle函数】
一.含义 1.pickle的实质是什么 答:利用一些算法把数据对象转换成“二进制文件”,存储在硬盘上,当然也可以放在数据库或者是另外一台计算机上 2.存放:picking,读取:unpicking 3 ...
- CentOS7学习记录(工具使用篇)
一. 远程连接终端中文乱码:如xShell 检查当前系统语言:echo $LANG 查看系统安装语言包:locale ,如果包含zh_CN.UTF-8表示已经安装中文语言.如果没有中文包,使用命令 ...
- HDU 1392 Surround the Trees(凸包)题解
题意:给一堆二维的点,问你最少用多少距离能把这些点都围起来 思路: 凸包: 我们先找到所有点中最左下角的点p1,这个点绝对在凸包上.接下来对剩余点按照相对p1的角度升序排序,角度一样按距离升序排序.因 ...