R语言实现PCA主成分分析图的示例代码

目录
  • 简介
  • 开始作图
    • 1. PCA 分析图本质上是散点图
    • 2. 为不同类别着色
    • 3. 样式微调

简介

主成分分析(Principal Component Analysis,PCA)是一种无监督的数据降维方法,通过主成分分析可以尽可能保留下具备区分性的低维数据特征。主成分分析图能帮助我们直观地感受样本在降维后空间中的分簇和聚合情况,这在一定程度上亦能体现样本在原始空间中的分布情况,这对于只能感知三维空间的人类来说,不失为一种不错的选择。

再举个形象的栗子,假如你是一本养花工具宣传册的摄影师,你正在拍摄一个水壶。水壶是三维的,但是照片是二维的,为了更全面的把水壶展示给客户,你需要从不同角度拍几张图片。下图是你从四个方向拍的照片:

PCA形象解释说明

第一张图里水壶的背面可以看到,但是看不到前面。

第二张图是拍前面,可以看到壶嘴,这张图可以提供了第一张图缺失的信息,但是壶把看不到了。

第三张俯视图既可以看到壶嘴,也可以看到壶把,但是无法看出壶的高度。

第四张图是你打算放进目录的,水壶的高度,顶部,壶嘴和壶把都清晰可见。

PCA的设计理念与此类似,它可以将高维数据集映射到低维空间的同时,尽可能的保留更多变量。

开始作图

使用 R 语言能做出像 SIMCA-P 一样的 PCA 图吗?

答案是肯定的,使用 R 语言不仅能做出像 SIMCA-P 一样的 PCA 图,还能做出比 SIMCA-P 更好看的图,而且好看的上限仅取决于个人审美风格。

1. PCA 分析图本质上是散点图

主成分分析图 = 散点图 + 置信椭圆,散点的横纵坐标对应 PCA 的第一主成分、第二主成分。

library(ggplot2)

# 数据准备
data = subset(iris, select = -Species)
class = iris[["Species"]]

# PCA
pca = prcomp(data, center = T, scale. = T)
pca.data = data.frame(pca$x)
pca.variance = pca$sdev^2 / sum(pca$sdev^2)

ggplot(pca.data, aes(x = PC1, y = PC2)) +
    geom_point(size = 3) +
    geom_hline(yintercept = 0) +
    geom_vline(xintercept = 0) +
    stat_ellipse(aes(x = PC1, y = PC2), linetype = 2, size = 0.5, level = 0.95) +
    theme_bw()

散点图+椭圆

2. 为不同类别着色

接下来想给散点加上分类颜色:

library(ggplot2)

# 数据准备
data = subset(iris, select = -Species)
class = iris[["Species"]]

# PCA
pca = prcomp(data, center = T, scale. = T)
pca.data = data.frame(pca$x)
pca.variance = pca$sdev^2 / sum(pca$sdev^2)

ggplot(pca.data, aes(x = PC1, y = PC2, color = class)) +
    geom_point(size = 3) +
    geom_hline(yintercept = 0) +
    geom_vline(xintercept = 0) +
    stat_ellipse(aes(x = PC1, y = PC2), linetype = 2, size = 0.5, level = 0.95) +
    theme_bw()

给不同类别样本着色

颜色是加上了,但是椭圆咋变成了 3 个?

原来是 stat_ellipse 函数默认对每个类别的数据计算自己的置信区间。如何对多类样本只计算一个置信区间呢?查看 stat_ellipse 的帮助文档:

inherit.aesdefault TRUE, If FALSE, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification,

原来是 stat_ellipse 函数默认会继承 ggplot 中的 aes 设置,如果希望 stat_ellipse 使用自己的 aes 设置,需要将参数 inherit.aes 设置为 FALSE。

library(ggplot2)

# 数据准备
data = subset(iris, select = -Species)
class = iris[["Species"]]

# PCA
pca = prcomp(data, center = T, scale. = T)
pca.data = data.frame(pca$x)
pca.variance = pca$sdev^2 / sum(pca$sdev^2)

ggplot(pca.data, aes(x = PC1, y = PC2, color = class)) +
    geom_point(size = 3) +
    geom_hline(yintercept = 0) +
    geom_vline(xintercept = 0) +
    stat_ellipse(aes(x = PC1, y = PC2), linetype = 2, size = 0.5, level = 0.95, inherit.aes = FALSE) +
    theme_bw()

给不同类别样本着色

3. 样式微调

接下来对样式进行微调:为不同类别样本自定义着色,添加 x 轴、y 轴标题,添加 title:

library(ggplot2)

# 数据准备
data = subset(iris, select = -Species)
class = iris[["Species"]]

# PCA
pca = prcomp(data, center = T, scale. = T)
pca.data = data.frame(pca$x)
pca.variance = pca$sdev^2 / sum(pca$sdev^2)

# 自定义颜色
palette = c("mediumseagreen", "darkorange", "royalblue")

ggplot(pca.data, aes(x = PC1, y = PC2, color = class)) +
    geom_point(size = 3) +
    geom_hline(yintercept = 0) +
    geom_vline(xintercept = 0) +
    stat_ellipse(aes(x = PC1, y = PC2), linetype = 2, size = 0.5, level = 0.95, inherit.aes = FALSE) +
    theme_bw() +
    scale_color_manual(values = palette) +
    theme(panel.grid.major.x = element_blank(),
          panel.grid.minor.x = element_blank(),
          panel.grid.major.y = element_blank(),
          panel.grid.minor.y = element_blank()) +
    labs(x = paste0("PC1: ", signif(pca.variance[1] * 100, 3), "%"),
         y = paste0("PC2: ", signif(pca.variance[2] * 100, 3), "%"),
         title = paste0("PCA of iris")) +
    theme(plot.title = element_text(hjust = 0.5))

样式微调

将作图结果和 SIMCA-P 对比,散点、椭圆基本完全一致,只是比它更顺眼一些罢了~

到此这篇关于R语言实现PCA主成分分析图的示例代码的文章就介绍到这了,更多相关R语言 PCA主成分分析图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python机器学习之PCA降维算法详解

    一.算法概述 主成分分析 (Principal ComponentAnalysis,PCA)是一种掌握事物主要矛盾的统计分析方法,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题. PCA 是最常用的一种降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中,并期望在所投影的维度上数据的方差最大,以此使用较少的维度,同时保留较多原数据的维度. PCA 算法目标是求出样本数据协方差矩阵的特征值和特征向量,而协方差矩阵的特征向量的方向就是PCA需要投影的方向.使样本

  • Python使用三种方法实现PCA算法

    主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域.它的主要作用是对高维数据进行降维.PCA把原先的n个特征用数目更少的k个特征取代,新特征是旧特征的线性组合,这些线性组合最大化样本方差,尽量使新的k个特征互不相关.关于PCA的更多介绍,请参考:https://en.wikipedia.org/wiki/Principal_component_analysis. 主成分分析(PCA) vs 多元判别式分析(MD

  • Python PCA降维的两种实现方法

    目录 前言 PCA降维的一般步骤为: 实现PCA降维,一般有两种方法: 总结 前言 PCA降维,一般是用于数据分析和机器学习.它的作用是把一个高维的数据在保留最大信息量的前提下降低到一个低维的空间,从而使我们能够提取数据的主要特征分量,从而得到对数据影响最大的主成分,便于我们对数据进行分析等后续操作. 例如,在机器学习中,当你想跟据一个数据集来进行预测工作时,往往要采用特征构建.不同特征相乘.相加等操作,来扩建特征,所以,当数据处理完毕后,每个样本往往会有很多个特征,但是,如果把所有数据全部喂入

  • python实现PCA降维的示例详解

    概述 本文主要介绍一种降维方法,PCA(Principal Component Analysis,主成分分析).降维致力于解决三类问题. 1. 降维可以缓解维度灾难问题: 2. 降维可以在压缩数据的同时让信息损失最小化: 3. 理解几百个维度的数据结构很困难,两三个维度的数据通过可视化更容易理解. PCA简介 在理解特征提取与处理时,涉及高维特征向量的问题往往容易陷入维度灾难.随着数据集维度的增加,算法学习需要的样本数量呈指数级增加.有些应用中,遇到这样的大数据是非常不利的,而且从大数据集中学习

  • 详解R语言中的PCA分析与可视化

    1. 常用术语 (1)标准化(Scale) 如果不对数据进行scale处理,本身数值大的基因对主成分的贡献会大.如果关注的是变量的相对大小对样品分类的贡献,则应SCALE,以防数值高的变量导入的大方差引入的偏见.但是定标(scale)可能会有一些负面效果,因为定标后变量之间的权重就是变得相同.如果我们的变量中有噪音的话,我们就在无形中把噪音和信息的权重变得相同,但PCA本身无法区分信号和噪音.在这样的情形下,我们就不必做定标. (2)特征值 (eigen value) 特征值与特征向量均为矩阵分

  • R语言实现PCA主成分分析图的示例代码

    目录 简介 开始作图 1. PCA 分析图本质上是散点图 2. 为不同类别着色 3. 样式微调 简介 主成分分析(Principal Component Analysis,PCA)是一种无监督的数据降维方法,通过主成分分析可以尽可能保留下具备区分性的低维数据特征.主成分分析图能帮助我们直观地感受样本在降维后空间中的分簇和聚合情况,这在一定程度上亦能体现样本在原始空间中的分布情况,这对于只能感知三维空间的人类来说,不失为一种不错的选择. 再举个形象的栗子,假如你是一本养花工具宣传册的摄影师,你正在

  • R语言corrplot相关热图分析美化示例及详细图解

    目录 介绍 1.加载包 2.加载数据 3.绘图 4.个性化设置聚类方法 5.个性化添加矩阵 6.颜色设置 介绍 R corrplot包 提供了一个在相关矩阵上的可视化探索工具,该工具支持自动变量重新排序,以帮助检测变量之间的隐藏模式. corrplot 非常易于使用,并在可视化方法.图形布局.颜色.图例.文本标签等方面提供了丰富的绘图选项.它还提供 p 值和置信区间,以帮助用户确定相关性的统计显著性. corrplot()有大约50个参数,但最常见的参数只有几个.在大多数场景中,我们可以得到一个

  • R语言实现随机森林的方法示例

    目录 随机森林算法介绍 算法介绍: 决策树生长步骤: 投票过程: 基本思想: 随机森林的优点: 缺点 R语言实现 随机森林模型搭建 1:randomForest()函数用于构建随机森林模型 2:importance()函数用于计算模型变量的重要性 3:MDSplot()函数用于实现随机森林的可视化 4:rfImpute()函数可为存在缺失值的数据集进行插补(随机森林法),得到最优的样本拟合值 5:treesize()函数用于计算随机森林中每棵树的节点个数 随机森林算法介绍 算法介绍: 简单的说,

  • R语言UpSet包实现集合可视化示例详解

    目录 前言 一.R包及数据 二.upset()函数 1)基本参数 2)queries参数 3)attribute.plots参数 3.1 添加柱形图和散点图 3.2 添加箱线图 3.3 添加密度曲线图 前言 介绍一个R包UpSetR,专门用来集合可视化,当多集合的韦恩图不容易看的时候,就是它大展身手的时候了. 一.R包及数据 #安装及加载R包 #install.packages("UpSetR") library(UpSetR) #载入数据集 data <- read.csv(&

  • R语言绘制饼状图代码实例

    R编程语言有许多库来创建图表和图表. 饼图是将值表示为具有不同颜色的圆的切片. 切片被标记,并且对应于每个片的数字也在图表中表示. 在R语言中,饼图是使用pie()函数创建的,它使用正数作为向量输入. 附加参数用于控制标签,颜色,标题等. 语法 使用R语言创建饼图的基本语法是 pie(x, labels, radius, main, col, clockwise) 以下是所使用的参数的描述 x是包含饼图中使用的数值的向量. labels用于给出切片的描述. radius表示饼图圆的半径(值-1和

  • R语言可视化存储矢量图实现方式

    目录 1. R 中自带的默认绘图 1) PDF 格式 2) EPS 格式 2. ggplot 绘图 1) PDF 格式 2) EPS 格式 之前写的博客中有提及过如何在 R 语言中绘制矢量图,然后用于论文引用.但没有专门开一篇博客来进行说明比较,这里重新开一篇博客来进行说明. 通常保存为矢量图可能大多数时候是为了论文中的引用,所以格式一般为 EPS, PDF 这两种格式,这里也主要针对这两种格式进行说明. 1. R 中自带的默认绘图 通常我们使用 plot(), lines(), points(

  • R语言学习之线图的绘制详解

    目录 线图 单线图 多线图 横轴文本线图 线图 线图是反映趋势变化的一种方式,其输入数据一般也是一个矩阵. 单线图 假设有这么一个矩阵,第一列为转录起始位点及其上下游5 kb的区域,第二列为H3K27ac修饰在这些区域的丰度,想绘制一张线图展示. profile="Pos;H3K27ac -5000;8.7 -4000;8.4 -3000;8.3 -2000;7.2 -1000;3.6 0;3.6 1000;7.1 2000;8.2 3000;8.4 4000;8.5 5000;8.5"

  • R语言模拟疫情传播图RVirusBroadcast展示疫情数据

    目录 前言 效果展示 小结 参考 附录:RVirusBroadcast代码 前言 前几天微博的一个热搜主题是**“计算机仿真程序告诉你为什么现在还没到出门的时候!!!”**,该视频用模拟的疫情数据告诉大家“不要随便出门(宅在家)”对战胜疫情很重要,生动形象,广受好评. 所用的程序叫VirusBroadcast,源码已经公开,是用Java写的.鉴于画图是R语言的优势,所以笔者在读过源码后,写了一个VirusBroadcast程序的R语言版本,暂且叫做RVirusBroadcast.与VirusBr

  • C语言实现绘制绕线画的示例代码

    目录 绕线画简介 算法简介 示例 绕线画简介 简单点来说,就是在木板上钉一圈钉子,通过绕线进行构图,最终呈现出一幅图像. 算法简介 可以总结概括一下, 首先需要有一张图,可以是彩色的,但是必须颜色比较分明. 对图像进行灰度处理. 随机生成 n 组数,就是每两个钉子的组合. 计算 n 组数据连线所过图像像素的平均数,求出最小的一组. 连接该组钉子,并对这条线经过的像素值分别加 m. 重复前面步骤 3 到步骤 5 直到绘制 z 条线结束循环. 示例 #include<graphics.h> #in

  • 如何用Matplotlib 画三维图的示例代码

    用Matplotlib画三维图 最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平面上呈现出立体感 三维的线图和散点图 #绘制三角螺旋线 from mpl_toolkits import mplot3d %matplotlib inline import matplotlib.pyplot as plt import numpy as np ax = plt.axes(proje

随机推荐