R 语言 ggplot2 PCA 主成分分析(虚拟数据集)

news2024/9/21 14:48:48

生成虚拟数据集

library(ggplot2)

data.matrix <- matrix(nrow = 100, ncol = 10)

colnames(data.matrix) <- c(
  paste("wt",1:5,sep = ""),
  paste("ko",1:5,sep = "")
)


rownames(data.matrix) <- paste("gene",1:100,sep = "")

head(data.matrix)

以上代码生成了100行基因,10列样本的矩阵
前五列命名wt开头+1-5,表示正常基因
后五列命名ko开头+1-5,表示缺少基因的样本(knock-out)

给每行基因都统一命名gene+1-100

head()函数默认查看前6行

在这里插入图片描述
现在只是定义了矩阵的shape和name,还没填充数值

for (i in 1:100){
  wt.values <- rpois(5, lambda = sample(x=10:1000, size = 1))
  ko.values <- rpois(5, lambda = sample(x=10:1000, size = 1))
  data.matrix[i,] <- c(wt.values, ko.values)
}

head(data.matrix)

这段代码的作用是生成一个大小为100x10的数据矩阵data.matrix,其中前5列是"wt"(wild-type)样本的值,后5列是"ko"(knockout)样本的值。

在循环中,对于每个i的取值(从1到100),首先使用sample(x=10:1000, size = 1)从10到1000之间的整数中随机抽取一个数作为泊松分布的参数lambda。然后,使用rpois(5, lambda)函数生成一个具有泊松分布的随机数向量,其中每个元素表示一个基因在"wt"样本中的表达量。同样的过程也用于生成"ko"样本中的表达量。

最后,通过c(wt.values, ko.values)将"wt"和"ko"样本的表达量合并为一个长度为10的向量,并将其赋值给data.matrix的第i行。

for循环给依次给1-100行的前五列和后五列赋值,填充值介于10-1000之间。

在这里插入图片描述
初始虚拟数据集创建完毕,接下来用prcomp()函数分析各样本之间关系。该函数默认情况下以基因为列,样本为行,和我们创建的矩阵互为转置,因此需要用到转置函数t()

pca <- prcomp(t(data.matrix), scale = TRUE)

plot(pca$x[,1], pca$x[,2])

pca.var <- pca$sdev^2
pca.var.per <- round(pca.var/sum(pca.var)*100, 1)

barplot(pca.var.per, main = "Screen Plot", xlab ="principal component", ylab = "percent variation")

prcomp(, scale = TRUE)表示对数据进行标准化
每一列表示一个基因所对应的10个样本,即一列只有十个数据
plot 生成一个2D的图,前两个主成分的散点图
在这里插入图片描述
pca.var 表示 标准差的平方

pca.var.per 表示 每个变量所占的百分比,保留小数点后一位
在这里插入图片描述
可以看到前两个成分所占比例最大,尤其是第一个成分

用 barplot 来直观每个成分所占比例

在这里插入图片描述

ggplot2绘图

pca.data <- data.frame(sample = rownames(pca$x),
                       X = pca$x[,1],
                       Y = pca$x[,2]
                       )

ggplot(data = pca.data, aes(x = X, y = Y,label = sample))+
  geom_text()+
  xlab(paste("pc1-", pca.var.per[1], "%", sep = ""))+
  ylab(paste("pc2-", pca.var.per[2], "%", sep = ""))+
  theme_bw()+
  ggtitle("my pac graph")

先按 ggplot2 需要的方式格式化数据,x轴用第一个成分,y轴用第二个成分

在这里插入图片描述
可以发现数据分布在了两侧,我们用prcomp()调用负载得分loading scores 的参数rotation

通过分析pca$rotation,可以了解该主成分与哪些基因相关性较高,哪些基因对主成分的贡献较大。这对于解释主成分分析的结果和理解数据的结构和变化模式非常有帮助。

loading_scores <- pca$rotation[,1]

gene_score <- abs(loading_scores)
gene_score_ranked <- sort(gene_score,decreasing = TRUE)
top_10_genes <- names(gene_score_ranked[1:10])


pca$rotation[top_10_genes, 1]

这里我们查看 PC1 的负载得分,因为 PC1 解释原始数据的 93.6%的方差

loading_scores <- pca$rotation[,1] 这行代码的作用是将PCA分析结果中第一个主成分(即第一列)的负载得分(即100个基因数据)提取出来并赋值给loading_scores变量。

在这里插入图片描述

abs()取绝对值,再从小大到小排序,选取排名靠前的前十个基因top_10_genes

在这里插入图片描述
若想显示每个基因对应的 rotation,用以下代码即可,展示的是带正负值的

pca$rotation[top_10_genes, 1]

排名前10的基因在第一主成分上的负载得分

总的来说,本文对基因表达数据进行了主成分分析,并可视化结果。
通过PCA主成分分析,可以降维并找到影响数据变化最大的主要因素,进而进行数据的可视化和分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/708748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue安装|win11系统

1.安装node.js https://nodejs.org/en/download 下载对应系统对应位数的.msi文件&#xff0c; 下载完成后&#xff0c;一直点击next进行安装 自定义安装路径&#xff0c;我的安装路径为**“D:\nodejs”** # 检查node.js版本 node -V# 检查npm版本 npm -V在D:\nodejs下新建两…

DataGrip连接clickhouse

首先保证ClickHouse启动了&#xff1a; 先建一个工程&#xff1a; 建立数据库源连接&#xff1a; 用户名和密码可以不写&#xff1a; 添加ClickHouse驱动&#xff1a;最好不用自己下载的驱动&#xff0c;会出现一些错误以及连接失败&#xff0c;用在线下载的。 选择一个版…

《深入浅出SSD:固态存储核心技术、原理与实战》----学习记录(三)

第3章 SSD存储介质&#xff1a;闪存 3.1 闪存物理结构 3.1.1 闪存器件原理 1978年诞生的世界上第一块固态硬盘就是基于DRAM的。但由于保存在DRAM中的数据有掉电易失性&#xff0c;当然还有成本因素&#xff0c;所以现在的固态硬盘一般都不采用DRAM&#xff0c;而是使用闪存…

JS对象的浅拷贝与深拷贝

一. 浅拷贝 定义&#xff1a;浅拷贝是按位拷贝对象&#xff0c;它会创建一个新对象&#xff0c;这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型&#xff0c;拷贝的就是基本类型的值&#xff1b;如果属性是内存地址&#xff08;引用类型&#xff09;&#xff0c…

DETRs Beat YOLOs on Real-time Object Detection论文详解

论文题目&#xff1a;DETRs Beat YOLOs on Real-time Object Detection 论文地址&#xff1a;https://arxiv.org/abs/2304.08069 论文代码&#xff1a;mirrors / facebookresearch / ConvNeXt GitCode 等我毕业再打败吧&#xff0c;别打败YOLO&#xff0c;广大研究生们不同…

ROS:通信机制实操

目录 ROS&#xff1a;通信机制一、话题发布实操1.1需求1.2分析1.3实现流程1.4实现代码1.4.1C版1.4.2Python版 1.5执行 二、话题订阅实操2.1需求2.2分析2.3流程2.4实现代码2.4.1启动无辜GUI与键盘控制节点2.4.2C版 ROS&#xff1a;通信机制 一、话题发布实操 1.1需求 编码实现…

Airtest:Windows桌面应用自动化测试一

Airtest&#xff1a;Windows桌面应用自动化测试一 一、为什么选择Airtest?二、官方文档三、环境搭建四、简易操作1、模拟双击桌面应用2、连接应用窗口&#xff08;1&#xff09;嵌入方式连接&#xff08;2种方式连接应用窗口&#xff09;&#xff08;2&#xff09;非嵌入方式连…

设计模式学习之代理模式

设计模式系列往期文章 设计模式学习之策略模式设计模式学习之策略模式在前端的应用设计模式学习之简单工厂模式设计模式学习之工厂方法模式设计模式学习之抽象工厂模式设计模式学习之策略模式和简单工厂模式的对比设计模式学习之观察者模式设计模式学习之模板方法模式 代理模…

怎么把录音转文字?录音转文字怎么操作

以前在采访过程中&#xff0c;总是需要及时记录采访者的回答&#xff0c;并把这些回答准确地记录到笔记本上。然而手写记录不仅效率低下&#xff0c;还可能因为笔迹潦草而导致记录错误。 后来在前辈的指导下&#xff0c;我才知道可以使用录音转文字工具来解决这些问题&#xf…

[安洵杯 2019]game

前言 llvm混淆&#xff0c;第一次接触到&#xff0c;没找到可以直接反混淆的工具&#xff0c;但看了相关知识后&#xff0c;发现有效代码依旧是原有的那一小部分&#xff0c;所以可以直接看有意义的部分代码&#xff0c;有时间好好了解下吧 代码分析 v8是我们输入的&#xff…

设计模式篇(Java):适配器模式

设计模式篇(Java)&#xff1a;建造者模式 八、适配器模式 8.1 适配器模式基本介绍 生活中的适配器例子 比如生活中的插座&#xff0c;在不同国家插座有着不同的规格&#xff0c;如果我们从一个国家去另外一个国家需要使用插座时就需要一个中间转换器把两种不同规则的插座适配一…

【数据结构导论】第 3 章:栈、队列和数组

目录 一、栈 &#xff08;1&#xff09;栈的基本概念 ① 定义 ② 示意图 ③ 栈的特点 ④ 栈的基本运算 &#xff08;2&#xff09;栈的顺序实现 ① 顺序栈及常用名词 ② 顺序栈的类型定义 ③ 顺序栈的基本运算 Ⅰ. 初始化 Ⅱ. 判栈空 Ⅲ. 进栈 Ⅳ. 出栈 Ⅴ. …

【JavaSE】程序逻辑控制

目录 【1】概念 【2】顺序结构 【3】分支结构 【3.1】if 语句 【3.2】switch 语句 【4】循环结构 【4.1】while 循环 【4.2】for 循环 【4.3】do while 循环 【4.4】break 关键字 【4.5】continue 关键字 【5】输入输出 【5.1】输出到控制台 【5.2】从键盘输入 …

第38节:cesium 风场效果(含源码+视频)

结果示例: 完整源码: <template><div class="viewer"><vc-viewer @ready="ready" :logo="false"><!

抖音seo矩阵系统源码开发部署|抖音小程序接入(一)

一、 开发部署步骤&#xff1a; &#xff08;1&#xff09;申请开放平台服务商 &#xff08;2&#xff09;申请开放平台网站应用 &#xff08;3&#xff09;申请开放平台应用权限 &#xff08;4&#xff09;提交各个API接口申请文档 &#xff08;5&#xff09;审核通过技…

JVM实战-2023线上项目突发OOM以及快速定位解决全过程

现象描述&#xff1a; 用户在进行报表下载过程中&#xff0c;每隔几天系统就会报错500&#xff0c;导致无法进行报表下载。 原因分析: 通过查看系统log日志以及gc日志&#xff0c;发现是因为下载报表过程中JVM频繁进行Full GC&#xff0c;而且老年代的堆内存不断增加且无法回…

chatgpt赋能python:Python彻底删除指南:为什么需要彻底删除Python?

Python彻底删除指南&#xff1a;为什么需要彻底删除Python&#xff1f; Python是一种高级编程语言&#xff0c;它广泛用于各种应用程序的开发。但是&#xff0c;对于某些开发者来说&#xff0c;可能需要从他们的计算机中彻底删除Python。这可能是因为他们需要将Python版本更新…

Linux--打印内容或者插入内容:echo

语法&#xff1a; echo 内容 作用&#xff1a;打印内容到显示器echo 内容 > 不存在的文件 作用&#xff1a;文件创建&#xff0c;并将内容插入新创建的文件中echo 内容 > 存在的文件 作用&#xff1a;覆盖文件原有的内容 echo 内容 >> 存在的文件 作用&#xff1a…

Redis的持久化机制(2)

AOF 以独立日志的方式记录每次写命令&#xff08;读操作不记录&#xff09;&#xff0c;重启时再重新执行AOF文件中的命令来恢复数据。AOF会先把命令追加在AOF缓冲区&#xff0c;然后根据对应策略写入硬盘&#xff08;appendfsync&#xff09;&#xff0c;它只许追加文件但不可…

【vue:淘宝rem自适应 】

vue:淘宝rem自适应 1.安装lib-flexible&#xff1a;cnpm install lib-flexible --save 2.在main.js中引入&#xff1a;import lib-flexible/flexible.js’ 3.配置flexible找到vue-cli路径node_modules/lib-flexible/flexible.js&#xff0c;然后修改rem换算单位 4.配置px to re…