主成分分析R语言实现

2023-11-20

主成分分析是一种常见的降维统计方法,它通过适当的变量替换,使得新变量成为原变量的线性组合,并且新变量间彼此独立,从而可从错综复杂的关系中寻求主要成分信息,揭示变量内在关系。本次主要分享的是该方法的R语言实现。

数据集展示

31省份的9项家庭支出指标,部分数据如下
在这里插入图片描述

一、计算相关系数矩阵

主成分分析法的前提是需要变量具有相关性,因此,我们需要先查看下各个变量的相关程度。

raw_data<-read.csv("data.csv",header=T)
new_data<-raw_data[,-1]
options(digits=2)  
cor(new_data)

在这里插入图片描述
纵观整个相关系数矩阵,各个变量之间均存在一定的相关性,可进行后续的主成分分析

二、确定主成分个数

一般地,在计算相关系数矩阵后,通过求出其特征值与特征向量,进而计算方差贡献率与累计方差贡献率,这两步操作均可以由R中的princomp函数一步实现。

确定主成分准则:特征值大于1累计方差贡献率大于80%(这个值具体需要根据主成分的个数与保留信息综合考虑确定)

PCA=princomp(new_data,cor=T)
summary(PCA)
screeplot(PCA,type="lines")

左侧为各主成分的标准差方差贡献率累计方差贡献率;右侧为碎石图,其为一种确定主成分的可视化图,将特征值从大到小排列,选择一个拐点对应的序号,此序号后的特征值全部较小且彼此相差不大,则该序号则可定位主成分的个数。(注意:各个主成分的方差与它对应的特征值是相等的!

按照确定准则,左侧显示两个主成分即包含了原变量的84%的信息,而右侧的碎石图也显示出自第二个主成分后,其余主成分的特征值彼此差异不大。因此,最终确定为2个主成分。

三、主成分载荷分析

PCA$loadings[,1:2] #选择前两个主成分即可

在这里插入图片描述
从载荷矩阵来看,主成分Comp.1在设备、交通、教育、居住、杂项上载荷值较大,可视为非必须消费主成分;主成分Comp.2食品、衣着、医疗上载荷值很大,可视为反映日常必须消费的主成分

四、主成分得分

(一)计算综合得分
综合得分=各主成分的得分*各主成分方差/各主成分的方差和,在本次案例中,可将最终得分PC写为
P C = ( 2.38 8 2 ∗ C o m p . 1 + 1.101 4 2 ∗ C o m p . 2 ) / ( 2.38 8 2 + 1.101 4 2 ) PC=(2.388^2*Comp.1+1.1014^2*Comp.2)/(2.388^2+1.1014^2) PC=(2.3882Comp.1+1.10142Comp.2)/(2.3882+1.10142)
其中,Comp.1为主成分1的得分,Comp.2为主成分2的得分。现通过自编函数,进行综合得分的求解。

#m为主成分个数
caculate_score<-function(PCA,m){
  comp_sd<-summary(PCA)$sdev[1:m] #各主成分标准差
  comp_score_matrix<-PCA$scores[,1:m] #各主成分得分矩阵
  comp_score<-data.frame(comp_score_matrix)
  
  #计算综合得分
  comp_score$PC<-as.numeric(comp_score_matrix%*%comp_sd^2/sum(comp_sd^2))
  
  #计算排名
  comp_score$rank<-rank(-comp_score$PC)
  return(comp_score)
}
score<-caculate_score(PCA,2)
rownames(score)<-raw_data[,1]
head(score)

在这里插入图片描述

(二)主成分得分图分析

plot(score$Comp.1,score$Comp.2,
     xlab='Comp.1',ylab='Comp.2',main='主成分得分图')
abline(h=0,lty=3);abline(v=0,lty=3)
text(score$Comp.1,score$Comp.2,rownames(score))

在这里插入图片描述
从得分图可知,在非必需消费主成分上comp.1得分最高的五个地区为上海、北京、广东、浙江、天津,且上海、北京的绝对值明显高于其他地区,表明在以设备、交通、教育、居住、杂项为主的非日常必需消费而言,上海、北京的消费水平远远高于其他省份。

在日常必需消费comp.2得分上,最高的五个地区为广东、海南、福建、广西、上海,可见这部分地区对于食品、衣着、医疗方面的消费较大。

全部代码

raw_data<-read.csv("data.csv",header=T)
new_data<-raw_data[,-1]
options(digits=2)  
cor(new_data)

PCA=princomp(new_data,cor=T)
summary(PCA)
screeplot(PCA,type="lines")  

#计算综合得分
caculate_score<-function(PCA,m){
  comp_sd<-summary(PCA)$sdev[1:m] #各主成分标准差
  comp_score_matrix<-PCA$scores[,1:m] #各主成分得分矩阵
  comp_score<-data.frame(comp_score_matrix)
  
  #计算综合得分
  comp_score$PC<-as.numeric(comp_score_matrix%*%comp_sd^2/sum(comp_sd^2))
  
  #计算排名
  comp_score$rank<-rank(-comp_score$PC)
  return(comp_score)
}
score<-caculate_score(PCA,2)
rownames(score)<-raw_data[,1]
head(score)

#绘制得分图
plot(score$Comp.1,score$Comp.2,
     xlab='Comp.1',ylab='Comp.2',main='主成分得分图')
abline(h=0,lty=3);abline(v=0,lty=3)
text(score$Comp.1,score$Comp.2,rownames(score))

以上就是本次分享的全部内容~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

主成分分析R语言实现 的相关文章

  • Navicat for MySQL客户端启动报missing required library libmysq_e.dll126 错误

    Navicat for MySQL客户端启动报missing required library libmysq e dll126 错误 是因为缺少libmysq e dll 文件所致 下载libmysq e dll 文件拷贝到到Navica
  • R语言系列教程-----一起来学shiny吧(1)

    什么是shiny Shiny是一个R包 可让您轻松地直接从 R 构建交互式 Web 应用程序 应用程序 本系列是个长教程 带你由浅入深学习shiny 我们先使用系统自带的一个例子来介绍一下shiny 我们先导入shiny包 library
  • R语言的Rattle可视化BI数据挖掘分析工具

    Rattle介绍 Rattle是一个免费的开源数据挖掘工具包 使用 Gnome 图形界面以统计语言 R编写 它在GNU Linux Macintosh OS X和MS Windows下运行 Rattle正在澳大利亚和国际上用于商业 政府 研
  • R语言与机器学习中的回归方法学习笔记

    来源 http blog sina com cn s blog 62b37bfe0101hom5 html key word lars rpart randomForest cp svm data diabetes prune boosti
  • 如何用R分析CNKI文献关键词词频?

    疑惑 如何用VOSviewer分析CNKI数据 一文发布后 有同学问我 王老师 我有个问题 我用cnki导出关键词后 想统计关键词的词频 我应该用什么样的工具 如果不利用citespace和python 做出excel那种的统计表格 该怎么
  • 802.11K/V/R协议介绍

    802 11K V R协议介绍 1 传统无线漫游介绍 1 1 什么是无线漫游 一台无线终端备 STA 通过连接Wi Fi获取上网体验 Wi Fi名称 又称为SSID 是由无线接入网 AP 提供的 因为一台AP设备的覆盖范围有限 所以无线网络
  • 如何编写R函数

    转载自http blog sciencenet cn blog 255662 501317 html R语言实际上是函数的集合 用户可以使用base stats等包中的基本函数 也可以自己编写函数完成一定的功能 但是初学者往往认为编写R函数
  • 使用R语言中的survival包进行生存分析是一种常见的统计方法

    使用R语言中的survival包进行生存分析是一种常见的统计方法 在生存分析中 我们经常需要创建一个生存对象来存储事件发生时间和事件状态 在本文中 我们将介绍如何使用survival包中的Surv函数来创建生存对象 并解读其结果 Surv函
  • 【报错解决办法】bad restore file magic number (file may be corrupted) -- no data loaded

    今天在服务器上load一个Rdata的时候出现了这个报错 这还是第一次 之前load的都没问题 重装过一次R 上网一搜 发现是r的版本不对 检查之后发现确实如此 windows的R是4 1 2的版本 而linux上是3 6 于是我就重新在l
  • 使用R语言构建泊松回归模型

    使用R语言构建泊松回归模型 泊松回归是一种广泛应用于计数数据分析的回归模型 它是基于泊松分布的概率模型 用于描述事件在一定时间或空间范围内发生的次数 在本文中 我们将学习如何使用R语言构建泊松回归模型 并提供相应的源代码示例 1 数据准备
  • R语言中用于计算Rsquare的包rsq

    文章目录 理论介绍 线性模型情形 广义线性模型情形 函数介绍 rsq 的介绍 实例 rsq partial 的介绍 相关文献 pcor 函数介绍 vresidual 函数介绍 实例 理论介绍 线性模型情形 R squared 值范围 0 1
  • r如何让新增加的列出现在第一列 r如何调整新增加的列的位置

    https www cnblogs com liujiaxin2018 p 16211983 html 1 任意位置插入列 复制代码 gt a lt letters 1 5 gt b lt LETTERS 1 5 gt c lt sampl
  • R语言 write.xlsx() 写入同一excel,及同一sheet注意

    write xlsx x file sheetName Sheet1 col names TRUE row names TRUE append FALSE showNA TRUE 1 想要将data1写da xlsx的sheet1 data
  • R数据科学-第九章使用lubridate处理日期和时间

    本章将会使用以下三个包 gt library tidyverse gt library lubridate gt library nycflights13 一 创建日期或时间 表示日期或时间的数据有三种 日期 在tibble中显示为date
  • R----stringr包介绍学习

    1 stringr介绍 stringr包被定义为一致的 简单易用的字符串工具集 所有的函数和参数定义都具有一致性 比如 用相同的方法进行NA处理和0长度的向量处理 字符串处理虽然不是R语言中最主要的功能 却也是必不可少的 数据清洗 可视化等
  • [R语言] R语言PCA分析教程 Principal Component Methods in R

    R语言PCA分析教程 Principal Component Methods in R 代码下载 主成分分析Principal Component Methods PCA 允许我们总结和可视化包含由多个相互关联的定量变量描述的个体 观察的数
  • 不同kNN模型在R语言中的比较

    不同kNN模型在R语言中的比较 k近邻 k Nearest Neighbors 简称kNN 是一种常见的机器学习算法 被广泛用于分类和回归问题 它基于一个简单的假设 与某个样本集中距离最近的k个样本具有相似的特征和标签 本文将探讨在R语言中
  • R语言实现推荐系统

    目录 1 理论基础 1 1 推荐系统 1 2 R语言 2 数据准备 2 1 数据获取 2 2 数据读取
  • 主成分分析R语言实现

    主成分分析是一种常见的降维统计方法 它通过适当的变量替换 使得新变量成为原变量的线性组合 并且新变量间彼此独立 从而可从错综复杂的关系中寻求主要成分信息 揭示变量内在关系 本次主要分享的是该方法的R语言实现 目录 数据集展示 一 计算相关系
  • 4. 统计描述和基线表格绘制

    目录 1 连续型变量统计描述 单变量统计描述 1 summary函数 2 psych包中的describe 函数 3 Hmisc包中的describe 函数 4 pastecs包的stat desc 的函数 分组统计描述 1 doBy包的s

随机推荐

  • ClassUtils.getClassFileName()方法具有什么功能呢?

    转自 ClassUtils getClassFileName 方法的功能简介说明 下文笔者讲述ClassUtils getClassFileName方法的功能简介说明 如下所示 ClassUtils getClassFileName 方法的
  • 异或运算总结

    其实主要是想介绍一些关于异或的一些例题 方便自己的复习 目录 什么是异或运算 异或运算的性质 异或性质的应用 什么是异或运算 异或 xor 是一个数学运算符 它应用于逻辑运算 异或的数学符号为 计算机符号为 xor 其运算法则为 a b a
  • GPT系列训练与部署——GPT2环境配置与模型训练

    本文为博主原创文章 未经博主允许不得转载 本文为专栏 Python从零开始进行AIGC大模型训练与推理 系列文章 地址为 https blog csdn net suiyingy article details 130169592 Colo
  • APP INVENTOR调用HTTPClient

    APP INVENTOR调用HTTPClient APP中使用HTTPClient调用api 这里使用的是聚合数据提供的API 使用所有的API都是大同小异 参数的参数有所不同 我们这里使用post方式 传回的是json格式 在解析了以后
  • malloc、calloc、realloc、free函数的使用

    malloc realloc calloc free函数大部分在 stdlib h 文件中 malloc 函数 从堆上分配内存 calloc 函数 从堆上分配内存并清零 realloc 函数 在之前分配的内存块的基础上 将内存重新分配为更大
  • anaconda虚拟环境

    1 先看有哪些虚拟环境 conda env list 或者 conda info e 2 创建虚拟环境 conda create n 环境名 python X X X X是python版本 比如3 7 3 激活制定虚拟环境 linux so
  • HighLight

    前言 今天给大家介绍下Highlight Highlight相关属性 the x value of the highlighted value private float mX Float NaN the y value of the hi
  • 用DART来实现远程控制WinPE(类似于teamview)

    In the new Dart 7 release part of MDOP 2011 R2 Microsoft added a remote connection application to WinPE it allows you to
  • APT攻击流程图画法参考

    APT攻击流程图画法参考 画图网站 多组件多阶段 多文件多次网络连接行为 ATTCK Kill Chain 画图网站 我用免费的ProcessOn 图标比较多也好看 个人免费文件是9个 如果不够用只能删了 花钱是不可能花钱的 删之前可以保存
  • vue实现批量打印

  • 数据压缩实验之 H.264编解码实验

    文章目录 1 将两个 264文件进行解码 得到相应的YUV文件 2 将上述两个视频序列编码为 264文件 2 1 固定码率 以不同的GOP长度及形状编码 2 1 1 GOP 15 2B帧 2 1 2 GOP 12 2B帧 2 1 3 GOP
  • Golang三剑客之Pflag、Viper、Cobra

    如何构建应用框架 想知道如何构建应用框架 首先你要明白 一个应用框架包含哪些部分 在我看来 一个应用框架需要包含以下 3 个部分 命令行参数解析 主要用来解析命令行参数 这些命令行参数可以影响命令的运行效果 配置文件解析 一个大型应用 通常
  • Jupyter notebook的使用

    1 参考博客 https www cnblogs com nxld p 6088003 html 一 两种方式 1 启动cmd 然后输入命令 jupyter notebook 就可以直接调转到网页 因为这是在网页上直接运行的 2 一般启动程
  • 试题 B: 顺子日期

    问题描述 小明特别喜欢顺子 顺子指的就是连续的三个数字 123 456 等 顺子日 期指的就是在日期的 yyyymmdd 表示法中 存在任意连续的三位数是一个顺 子的日期 例如 20220123 就是一个顺子日期 因为它出现了一个顺子 12
  • Git代码拉取与同步

    1 git clone email protected xxx xxx git 2 git checkout b dev origin dev 创建本地dev分支 并与远程dev分支关联 3 git remote add upstream
  • 如何做单元测试

    如何做单元测试 一 定义 二 为什么要做单元测试 三 单元测试用例 四 阿里单元测试规约 五 测试框架的使用 Junit 下面以Junit4 为例来介绍 1 1 什么是Junit 1 2 为何使用Junit 1 3 Junit的快速入门 导
  • 学习笔记——SVG.js中形状元素的创建及其相关方法

    CreateElement 1 创建svg元素 在svg js中 每个元素都是一个对象 可以通过构造它来创建 import Rect from svgdotjs svg js var rect new Rect size 100 100 a
  • Unity3d中脚本无法编译问题(Monodevelop)

    使用Monodevelop打开脚本 编译时报错 具体错误忘记了 原因是 net框架引起 升级到 net框架4 5后解决
  • centos 7安装BBR加速报错:sysctl: setting key “net.ipv4.tcp_congestion_control“: 没有那个文件或目录的修复方法

    uname r 查看一下内核是什么版本 这个报错无非就是你内核不是4 9以上 从以下链接进去重启系统更新超过4 9内核就好 我升级后是5 14 成功运行 CentOS 7 启动 BBR 教程
  • 主成分分析R语言实现

    主成分分析是一种常见的降维统计方法 它通过适当的变量替换 使得新变量成为原变量的线性组合 并且新变量间彼此独立 从而可从错综复杂的关系中寻求主要成分信息 揭示变量内在关系 本次主要分享的是该方法的R语言实现 目录 数据集展示 一 计算相关系