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

生成虚拟数据集

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.hqwc.cn/news/5117.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Modin 入门学习

Modin 是一个 Python 第三方库&#xff0c;用于加速 Pandas 的 API 执行速度。原始的 Pandas 是单线程执行的&#xff0c;而 Modin 则重新打包了 Pandas 里面的 API&#xff0c;使其同时在多个内核中运行&#xff0c;提高硬件性能的利用率。 使用方法很简单&#xff0c;安装 M…

车载软件架构 —— 闲聊几句AUTOSAR OS(七)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕的就是把别人的眼光当成自己生活的唯一标…

CAD Voronoi 3D三维泰森多边形维诺图插件三维狄利克雷镶嵌(Dirichlet tessellation)

三维Voronoi Voronoi又名泰森多边形或Dirichlet图、维诺图等&#xff0c;三维Voronoi是由连接两邻点直线的垂直平分面组成的连续三维多面体结构。Voronoi在各个学科中应用广泛&#xff0c;如进行区域规划、晶体塑性有限元研究、路径优化、地形简化、多孔结构力学等方面的分析。…

蓝桥杯专题-试题版-【危险系数】【网络寻路】【高僧斗法】【约数倍数选卡片】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

Apollo分布式配置中心(二)

上一篇&#xff1a; 上一篇已经知道Apollo是什么东西了&#xff0c;接下来实践一下 目录 一、创建应用 1、 新增配置 2、创建Namespace ​3、同步配置 4、灰度发布 添加灰度配置项 ​编辑 配置灰度规则 二、删除应用、集群、appNamespace 三、springBoot整合Apollo …

C/C++结构体内存对齐的一些思考

在C中&#xff0c;结构体的内存对齐是为了提高访问结构体成员变量的效率和保证硬件的要求。 结构体对齐 C/C C 结构体内存对齐的示例代码C/C结构体内存对齐的原则结合汇编代码分析结构体的内存对齐问题 C 结构体内存对齐的示例代码 #include <iostream>struct Test_Stru…

C++之GNU C的__attribute__常用属性(一百五十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

Symbol.for()

示例&#xff1a;Symbol() 和 Symbol.for(‘ ’)的区别 Symbol.for("foo"); // 创建一个 symbol 并放入 symbol 注册表中&#xff0c;键为 "foo" Symbol.for("foo"); // 从 symbol 注册表中读取键为"foo"的 symbolSymbol.for("b…

ISE软件基本使用

ISE软件基本使用 基本设置 关联notepad的操作&#xff1a;选择notepad的exe文件路径&#xff0c;并且加 { } 符号&#xff0c;并在结尾加$1。ISE可以设置程序运行的速度等级&#xff0c;该速度等级会影响程序从外部SPI Flash启动的启动速度。JTAG 接口的作用是将编译好的程 序…

Docker中安装Nginx

查看可以安装的Nginx版本: docker search nginx 下载最新版本: docker pull nginx :latest 可以省略 运行容器: docker run -itd --name my_nginx -p 80:80 nginx 在主机通过 https://localhost:80或者 http://192.168.40.100:80可以访问 如果之前创…

java feign的使用详细步骤及okhttp的使用

1、首先创建一个feign的模块并配置依赖&#xff0c;如图&#xff1a; 1、引入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency&g…

基于java的汽车服务管理系统(Car Service Management System)

设计一款基于java的管理和跟踪对车辆所做服务的系统。我们的系统允许服务技术人员跟踪客户、他们的车辆以及对这些车辆所做的服务。 需要项目的朋友私信我&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; Car Service Management System 基本的使用…