因子分析模型R语言实现
前情回顾:因子分析模型Python版本
目录
- 数据集展示
- 一、KMO检验和Barlette检验
- 二、确定公因子个数
- 三、正交旋转
- 四、因子得分
- 全部代码
数据集展示
现有30个省份9项家庭支出指标,部分数据如下所示
现想通过因子分析法评价各省份家庭综合消费支出水平
一、KMO检验和Barlette检验
使用因子分析模型前,需保证各个变量存在相关性,检验的标准如下
library(psych) #KMO和Bartlette检验所需包
data<-read.csv('raw_data.csv')
data1=data[,-1] #去除地区列
KMO(data1)
bartlett.test(data1)
从检验结果来看,KMO值为0.88,Bartlette检验的P值远小于0.05,故该数据集十分适合作因子分析。
二、确定公因子个数
确定一般准则:特征值大于1或累计方差贡献率大于85%(这个值根据实际数据情况可以适当改变)
基本步骤:计算原始矩阵相关系数矩阵——计算相关系数矩阵的特征值——计算累计方差贡献率
这里使用累计方差贡献率确定公因子个数
corr=cor(data1)
eig=eigen(corr)
(ccx=(eig$va)/sum(eig$va)) #贡献率
(cx=cumsum(eig$va)/sum(eig$va)) #累计方差贡献率
从结果可知,当公因子数为3个时,累计方差贡献率可达~90%,包含了原始数据的大部分信息。
三、正交旋转
正交旋转可使因子载荷矩阵中,各因子的值差别更大,有利于解释各因子含义
library(mvstats) #因子分析所需包
Fac0=factpc(scale(data1),3)
Fac1=factpc(scale(data1),3,rot="varimax")#运用旋转因子分析
data.frame(Fac0$loadings,row.names = colnames(data)[-1]) #旋转前的因子载荷矩阵
data.frame(Fac1$loadings,row.names = colnames(data)[-1]) #旋转后的因子载荷矩阵
旋转前的因子载荷矩阵特征:公共因子F1、F2、F3在原变量的载荷值差异不大,各个因子下的变量代表性并不突出
旋转后的因子载荷矩阵特征:公共因子F1在人均食品、教育、交通支出上载荷较大,可反映日常消费因子;F2在人均医疗支出上有很大的载荷,可视为医疗因子;F3在人均衣着支出上有很大的载荷,可视为衣着因子
四、因子得分
score=Fac1$scores #各因子得分
rownames(score)=data$省份
plot.text(score[,1:2]) #因子1和因子2得分图
plot.text(score[,2:3]) #因子2和因子3得分图
从F1与F2的因子得分图来看:在F1因子上得分较高地区是上海、广东、北京、浙江、北京、福建,即这些地区的人均日常消费较高.而在F2因子上得分较高的地区是天津、北京、河北、吉林、辽宁,即这些地区的人均医疗支出较高.
从F2与F3的因子得分图来看:在F3因子上得分较高的地区是北京、上海、浙江、内蒙古、新疆,即这些地区的人均衣着支出较高.像新疆、内蒙古这些地区的人们,由于气候原因,人均衣着支出较多;而像北京、上海、浙江这些经济较发达地区的人们,为了追求更好的生活质量,人均衣着消费也位居前列.
综合F1、F2、F3因子得分情况来看,北京、上海、浙江这三个地区在三个因子上的得分都相对较高,可以知道这三个地区的综合消费水平位于我国消费水平前列.
综合得分及排名
rank=Fac1$Rank #综合得分及排名
rownames(rank)<-data$省份
rank=rank[order(rank$Ri,decreasing=F),]
rank
全部代码
注意:mvstats包是王斌会教授自编的因子分析包,需要自行从网络上下载安装
library(mvstats)
library(psych) #KMO和Bartlette检验所需包
data<-read.csv('raw_data.csv')
data1=data[,-1] #去除地区列
KMO(data1)
bartlett.test(data1)corr=cor(data1)
eig=eigen(corr)
(ccx=(eig$va)/sum(eig$va)) #贡献率
(cx=cumsum(eig$va)/sum(eig$va)) #累计方差贡献率Fac0=factpc(scale(data1),3)
Fac1=factpc(scale(data1),3,rot="varimax")#运用旋转因子分析
data.frame(Fac0$loadings,row.names = colnames(data)[-1])
data.frame(Fac1$loadings,row.names = colnames(data)[-1])score=Fac1$scores
rownames(score)=data$省份
plot.text(score[,1:2])
plot.text(score[,2:3])rank=Fac1$Rank
rownames(rank)<-data$省份
rank=rank[order(rank$Ri,decreasing=F),]
rank
以上初步介绍了R语言版本因子分析的基本过程,后续会将多个年份的批量因子分析代码分享给大家~
因子分析模型R语言实现相关推荐
- r语言c5.0要求因子输出,R语言中因子的创建与使用
原标题:R语言中因子的创建与使用 因子在R语言中可以用来表示名义型变量或有序变量.名义变量一般表示类别,如性别,种族等等.有序变量是有一定排序顺序的变量,如职称,年级等等.在R语言中,名义变量和有序变 ...
- R语言-因子的构造-factor函数
参考内容:教程一, 非数值型变量(类别变量和顺序变量)在R语言中称为因子,也称为因子型变量.因子型变量内的所有非重复值,被称为因子水平(levels). 创建因子 在R语言中可以使用factor()函 ...
- 还在被R语言中的因子factor毒打吗
还在被R语言中的因子 factor毒打吗? 视频教程在B站或者微信里搜这个标题即可. 一.R语言为什么要设计出因子factor? Python中没有因子的概念,为什么R中会有呢? 首先,我们知道,R语 ...
- R语言语法及建模合集
点击下列超链接可进入博客: 一.语法篇: R语言常用包分类 R语言数据导入导出总结 R语言数据探索功能总结 R语言中的离群点检测方法 R语言中的向量使用合集 R语言中的因子类型 R语言中的对象以及它的 ...
- R语言CART决策树、随机森林、chaid树预测母婴电商平台用户寿命、流失可视化
全文链接:http://tecdat.cn/?p=31644 借着二胎政策的开放与家庭消费升级的东风,母婴市场迎来了生机盎然的春天,尤其是母婴电商行业,近年来发展迅猛(点击文末"阅读原文&q ...
- R语言使用psych包的fa函数对指定数据集进行因子分析(输入数据为相关性矩阵)、使用rotate参数指定进行斜交旋转提取因子、使用fa.diagram函数可视化斜交旋转因子分析、并解读可视化图形
R语言使用psych包的fa函数对指定数据集进行因子分析(输入数据为相关性矩阵).使用rotate参数指定进行斜交旋转提取因子.使用fa.diagram函数可视化斜交旋转因子分析.并解读可视化图形 目 ...
- R语言使用psych包的fa函数对指定数据集进行因子分析(输入数据为相关性矩阵)、使用rotate参数指定进行斜交旋转提取因子、使用nfactors参数指定抽取的因子个数、fa函数因子分析结果解读
R语言使用psych包的fa函数对指定数据集进行因子分析(输入数据为相关性矩阵).使用rotate参数指定进行斜交旋转提取因子.使用nfactors参数指定抽取的因子个数.fa函数因子分析结果解读( ...
- R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、编写自定义三线表结构(将因子变量细粒度化重新构建三线图)、为不同的变量显示不同的统计信息
R语言使用table1包绘制(生成)三线表.使用单变量分列构建三线表.编写自定义三线表结构(将因子变量细粒度化重新构建三线图).为不同的变量显示不同的统计信息 目录
- 三线表是什么?R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、编写自定义三线表结构(将因子变量细粒度化重新构建三线图)、编写自定义函数在三线表中添加p值
三线表是什么?R语言使用table1包绘制(生成)三线表.使用单变量分列构建三线表.编写自定义三线表结构(将因子变量细粒度化重新构建三线图).编写自定义函数在三线表中添加p值 目录
- R语言主成分分析PCA和因子分析EFA、主成分(因子)个数、主成分(因子)得分、主成分(因子)旋转(正交旋转、斜交旋转)、主成分(因子)解释
R语言主成分分析PCA和因子分析EFA.主成分(因子)个数.主成分(因子)得分.主成分(因子)旋转(正交旋转.斜交旋转).主成分(因子)解释 目录
最新文章
- linux oracle 关闭防火墙,Linux 下关闭防火墙设置
- 经典树型表结构之SORT_NO
- ML之Medicine:利用机器学习研发药物—《Machine Learning for Pharmaceutical Discovery and Synthesis Consortium》
- 如何设置窗口立即刷新显示
- PHP+JavaScript+HTML实现注册界面表单及日历控件
- 译: 3. RabbitMQ Spring AMQP 之 Publish/Subscribe 发布和订阅
- poj 2251 Dungeon Master (三维bfs)
- 《四世同堂》金句摘抄(四)
- Java OutputStreamWriter flush()方法与示例
- python学生管理系统2.0-python3.6+django2.0开发一套学员管理系统
- NSD cisco高级路由与交换技术--2014.8.16
- await 单步调试 c#_GDB调试指南-单步调试
- 各个版本JDK官方下载地址
- Obsolete特性
- OpenCV 文字检测与识别模块
- 在股东协议中,如何设定关于股权转让的相关规定,如股东优先购买权、股权出售限制、股权转让审批流程等?
- C++课程设计(校车订票系统)
- IOS越狱插件开发一(环境配置搭建)
- 2018年中国安全生产事故总量、较大事故、重特大事故同比实现“三个下降”
- cf 356 - Xenia and Hamming