主成分分析和因子分析

#包载入
library(corrplot)
library(psych)
library(GPArotation)
library(nFactors)
library(gplots)
library(RColorBrewer)

主成分分析

主成分分析(PCA)是对针对大量相关变量提取获得很少的一组不相关的变量,这些无关变量也成为主成分变量。

数据探索

#本部分引入消费者品牌感知的问卷数据集作为数据pca <- read.csv("http://r-marketing.r-forge.r-project.org/data/rintro-chapter8.csv")summary(pca)
#可以看到,该数据除了一个字符变量外,其他都是1~10的数字变量
head(pca)
library(corrplot)
#检查两两变量之间的相关关系
corrplot(cor(pca[,1:9]), order = "FPC")
#"FPC" for the first principal component order.


可以大致发现聚成了三个类别,分别是latest/trendy/fun,serious/leader/perform,bargain/rebuy/value三类,而这也是接下来的分析所要验证的。

提取主成分

#数据表度化
pca.sc <- pca
pca.sc[,1:9] <- scale(pca.sc[,1:9])
#提取主成分
pca.pc <- prcomp(pca.sc[,1:9])
summary(pca.pc)
#判断成分数量
plot(pca.pc, type = "l")

对于主成分数量,scree图可看到在3类之后,每个主成分解释的方差增值减少。

主成分得分获取

#psych包也有不错的PCA分析输出
library(psych)
fa.parallel(pca.sc[,1:9],fa = "pc") #principal()需要事先知道大致多少成分,该包的碎石图输出
pca.psy <- principal(pca.sc[,1:9], nfactors = 3,rotate = "none")
round(unclass(pca.psy$weights),2) #获取主成分得分

此处的获得的各个主成分的构成系数,可以导出:PC1 = 0.14*perform + 0.12 leader + latest(-0.21)….

品牌感知图

与此同时,主成分分析运用的另一个重要方面是,通过双标图(biplot)考察不同类别(品牌)之间的关系可视化

#对主成分中的前两个成分映射到二维,但因为直接投射数据主体会面临散点太多,可视度差的问题
biplot(pca.pc)
#所以,可对其类别(品牌)进行映射
pca.mean <- aggregate(.~ brand, pca.sc, mean)
rownames(pca.mean) <- pca.mean[,1]
pca.mean.pc <- prcomp(pca.mean[,-1], scale = T)
summary(pca.mean.pc)
biplot(pca.mean.pc) #品牌感知图


从这张图上就可以考到各个分类(品牌)的调性和位置。

可进一步考察不同品牌间的差异:

pca.mean["a",] - pca.mean["j",]

解释性因子分析

因子分析(EFA)是用来发现一组变量潜在结构的方法,主要针对无法观测的因子变量,提取获得可观测的显变量。

EFA因子数量确定

# 碎石图和特征值确定因子数目
library(nFactors)
# 多种碎石图方案
nScree(pca.sc[,1:9])#  noc naf nparallel nkaiser
#  1   3   2         3       3# >1 的特征值数量
eigen(cor(pca.sc[,1:9]))#$values
#[1] 2.9792956 2.0965517 1.0792549 0.7272110 0.6375459 0.5348432 0.3901044
#[8] 0.3120464 0.2431469

从以上结果可知,因子数在2和3之间选择。

#使用psych包提取公因子
#公因子数量为2的方案
fa(pca.sc[,1:9], nfactors = 2, rotate = "none",fm = "ml") #因子化方法选择最大似然法ml


2因子方案的只解释了44%的方差。

#公因子数量为3的方案
fa(pca.sc[,1:9], nfactors = 3, rotate = "none",fm = "ml") 


上升到了57%的方差解释度。由此可认为3因子方案更胜一筹。

EFA旋转

两种方法进行旋转

#使用psych的fa来进行正交旋转
#正交旋转
fa.vaf <- fa(pca.sc[,1:9], nfactors = 3, rotate = "varimax",fm = "ml")
fa.vaf
#斜交旋转
#使用GPArotation的oblimin斜交旋转,factanal的结果相对简练。
library(GPArotation)
fa.ob <- factanal(pca.sc[,1:9], factors = 3, rotation = "oblimin")
fa.ob
#获得未列出的因子结构矩阵,通过因子模型矩阵*因子关联矩阵获得
fsm <- function(oblique) {
if (class(oblique)[2]=="fa" & is.null(oblique$rotmat)) {warning("Object doesn't look like oblique EFA")
} else {P <- unclass(oblique$loading)F <- P %*% oblique$rotmatreturn(F)
} }
fsm(fa.ob)

正交旋转

斜交旋转

正交旋转将人为的强制因子间不相关,并且关注的结果集中在因子结构矩阵(correlations of the variables with the factors)。斜交旋转则关注三个矩阵:
* 因子模式矩阵(pattern matrix),结果中的(loading)列出了各个变量和因子变量的标准化回归系数。
* 因子关联矩阵(Factor Correlations matrix),因子间的关联性考察。
* 因子结构矩阵(structure matrix),即因子载荷矩阵,衡量变量与因子间的相关系数。

#相应的替代方案
#正交旋转
fa.va <- factanal(pca.sc[,1:9], factors = 3, rotation = "varimax")
#斜交旋转
fa.promax <- fa(pca.sc[,1:9], nfactors = 3, rotate = "promax",fm = "ml") fsmfa <- 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$Phireturn(F)
} }fsmfa(fa.promax)

EFA旋转结果的可视化

使用路线图展示潜因子和单独因子之间的关系。

fa.diagram(fa.promax,simple = T,digits = 2)

使用热图更直观的展示潜因子和变量之间的关系。

library(gplots)
library(RColorBrewer)
heatmap.2(fa.ob$loadings,col=brewer.pal(9, "GnBu"), trace="none", key=FALSE, dend="none",Colv=FALSE, cexCol = 1.5,main="\n\n\nFactor loadings for brand adjectives")

不同品牌因子得分

#获得各个品牌的三个因子均值
fa.ob <- factanal(pca.sc[,1:9], factors = 3, rotation = "oblimin",scores = "Bartlett")
fa.score <- data.frame(fa.ob$scores)
fa.score$brand <- pca.sc$brand
fa.score.mean <- aggregate(.~ brand, fa.score, mean)
fa.score.mean
#根据因子均值做热图
rownames(fa.score.mean) <- fa.score.mean[, 1]           # brand names
fa.score.mean <- fa.score.mean[, -1]heatmap.2(as.matrix(fa.score.mean),col=brewer.pal(9, "GnBu"), trace="none", key=FALSE, dend="none",cexCol=1.2, main="\n\n\n\nMean factor score by brand")

市场研究中的数据分析知识整理 (四)-主成分分析和因子分析相关推荐

  1. 市场研究中的数据分析知识整理 (三)-聚类分析

    4 聚类分析 聚类和判别作为统计学习(通过拟合统计模型,从数据中学习)的分类之一,同样可以分为有监督式和无监督式. 市场研究中,聚类和判别更多适用有监督式.即目标对象的在营销活动后的反应已知,通过目标 ...

  2. 市场研究中的数据分析知识整理 (七)-结构方程模型

    结构方程模型 结构方程模型有极其复杂的数学背景知识要求,模型形成过程繁复且陷阱众多,结果的解释力也很大程度取决于数据质量和分析角度,同时,他又对于以问卷调查形式获得的数据,并对产品涉入度评估量级和产品 ...

  3. python数据分析知识整理_Python基础知识点总结:数据分析从0到大师必Mark的一篇!(上)...

    原标题:Python基础知识点总结:数据分析从0到大师必Mark的一篇!(上) TK | 作者 LearnKu | 翻译 https://www.freecodecamp.org/news/learn ...

  4. unity 一些有用的碎片知识整理 之 二 (之 四 持续更新中...)

    -- 系列文章链接 Unity 一些有用的碎片知识整理 之 一 点击可跳转链接 Unity 一些有用的碎片知识整理 之 三 点击可跳转链接 Unity 一些有用的碎片知识整理 之 四 点击可跳转链接 ...

  5. Unity 一些有用的碎片知识整理 之 三(之 四 更新中...)

    -- 系列文章链接 Unity 一些有用的碎片知识整理 之 一 点击可跳转链接 Unity 一些有用的碎片知识整理 之 二 点击可跳转链接 Unity 一些有用的碎片知识整理 之 四 点击可跳转链接 ...

  6. 不定积分知识结构图_大一上学期《高等数学》知识整理-第四章 不定积分

    镇文图 ☆说在前面☆ 本章内容应该紧跟着第三章的知识整理发布的,但是中间出了点问题,所以鸽了.不定积分的公式你要说有多少,那是真的多.我在一本教材的附录上找到了不定积分表,里面有140多个公式.最初我 ...

  7. 高教版《管理学》(第四版)重点知识整理

    高等教育出版社<管理学>(第四版)重点知识整理 **注:只含本书1-13章课程,其中不包含第四章和第九章 v 第一章·管理活动与管理理论 Ø 第一节 管理活动 一.管理的定义 管理是指组织 ...

  8. 前端基础知识整理汇总(中)

    前端基础知识整理汇总(中) Call, bind, apply实现 // call Function.prototype.myCall = function (context) {context = ...

  9. -%3e运算符在c语言中的作用,C语言逻辑运算符知识整理

    在高中数学中,我们学过逻辑运算,例如p为真命题,q就假命题,那么"p且q"为假,"p或q"为真,"非q"为真. 在C语言中,也有类似的逻辑运 ...

  10. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

最新文章

  1. 刚刚!最新大学专业排名出炉:北大、清华和浙大居前三!
  2. 诺奖得主克鲁格曼:比特币是庞氏骗局,但不一定很快走向崩溃
  3. ubuntu系统写路由指令_ubuntu/linux下设置永久路由
  4. 一起来开发Android的天气软件(一)——功能规格介绍
  5. Mysql 获取当月和上个月第一天和最后一天的解决方案
  6. 【机器学习算法-python实现】决策树-Decision tree(1) 信息熵划分数据集
  7. Java面试你必须要知道的那些知识,深夜思考
  8. 【飞秋怎么用】高速文件传输
  9. OpenShift 4 - DevSecOps Workshop (3) - 从PipelineResource、Task到一个简单的Pipeline
  10. Excel基础(13)日期函数
  11. 1071: 不容易系列
  12. 渔乡朱朱的三农短视频账号运作和变现方法
  13. 用python爬取网易云评论最多的歌_巧用Python爬取网易云音乐歌曲全部评论
  14. 【java并发探赜索隐】判断标志、死锁、守护进程
  15. 2020移动apn接入点哪个快_手机资讯:5G 网络和现在 iPhone 使用的 Wi-Fi 有什么区别速度会更快吗...
  16. Docker快速入门总结笔记
  17. react路由传参的几种方式
  18. conda env create -f environment.yml报错ResolvePackageNotFound和Found conflicts的解决方案【已解决】
  19. 独自一人,怒发AI顶会论文
  20. 自采集在线电脑壁纸php源码v2.0自适应端

热门文章

  1. 手把手全面解读思科(Cisco)网络技术学院 考试折扣号申请说明
  2. sql join与笛卡尔积
  3. java 气象数据_中国天气预报数据API收集
  4. 软件工程 -- 用例图
  5. 主编编辑器怎么把文章转成长图?
  6. NTP、PTP时间同步服务器(时钟系统)
  7. Python计算点到直线距离的两种方法
  8. 项目管理工具之SWOT分析法
  9. tomcat自定义错误页面
  10. 【论文译文】BigGAN