RStudio数据分析及简单作图

news2025/1/26 15:29:41

       R语言是一种用于统计计算与绘图的编程语言,它免费、开源,被广泛应用于统计分析、数据挖掘等领域。是应用于统计计算和统计制图的优秀工具。

完整代码放在最后 

一、数据收集

       所使用数据下载自GEO(https://www.ncbi.nlm.nih.gov/geoprofiles/)网站,以保证真实性。

       GSM基因表达矩阵预览。其中,第一列为探针名,第一行为样本名,其余为不同样本中各个基因的表达量统计。

二、数据处理及数据清洗

       通过第一部分中下载好的平台数据对表达矩阵进行预处理和数据清洗。将探针ID替换为基因名,处理掉重复的基因表达量,为后续的limma数据分析流程做准备。

*第一列已经替换为基因ID

三、数据分析

       通常处理高通量数据输出差异表达分析会使用DESeq2、edgeR、limma等数据处理包,适用于处理不同特点的数据。它们都可输出logFC和P-value值。

*这里使用的是limma包,这是一个标准化的过程 

       标准limma流程会生成两个矩阵,分别为基因表达差异矩阵和分组矩阵,我们会在后续基因差异分析中使用到。

*差异矩阵 

       分组矩阵将样本分为肿瘤组和非终究组作为对照,并赋予一个唯一的整数编码。

                       *分组矩阵 

根据limma分析得到的logFC值和p值对上调基因和下调基因进行筛选并保存到tempOutput表达差异矩阵中。

四、作图

  1. PCA主成分分析

*可明显看出Tumro组和Non_Tumor组基因表达量分为两个维度并存在较大差异。

2、火山图

*根据logFC和-log10(p-value)值生成,位于图表上方且远离中心的点表示的是那些具有显著统计差 异且变化幅度大的基因。

3、箱线图

*由火山图可以看出KPNA2基因的表达明显上调,我们可以利用箱线图来进一步研究 

4、热图

*常用于展示大量数据的二维矩阵,其中矩阵的每一个元素用颜色的深浅来表示数值的大小,可快速识别数据中的模式和趋势。

# 2023_03_31
# by myc_0718

rm(list = ls())
options(stringsAsFactors = F)
library(GEOquery)
library(limma)
library(affy)

gse_nam <- "GSE14520_eSet.Rdata"
if (!file.exists(gse_nam)) {
  gset <- getGEO("GSE14520",
    destdir = ".", # 目的地目录
    AnnotGPL = T, # 注释文件
    getGPL = T # 平台文件
  )
  setwd("/Users/mayichen/Desktop/demo_2")
  save(gset, file = gse_nam)
}

load("GSE14520_eSet.Rdata")
gset[[1]]
class(gset[[1]])
# ExpressionSet中包含了基因表达矩阵和相关的样本信息
data_1 <- exprs(gset[[1]]) # 使用函数exprs获取样本表达矩阵
pd_1 <- pData(gset[[1]]) # 使用函数pData获取样本临床信息(如性别、年龄、肿瘤分期等等)
# ifelse会对向量中每个元素执行一次
# group list1 是分组信息后面有用
# data_1 <- data_1[-c(1001:22268),]
data_1 <- data_1[, -c(101:445)]
group_list1 <-
  ifelse(
    pd_1$characteristics_ch1 == "Tissue: Liver Tumor Tissue" |
      pd_1$characteristics_ch1 == "tissue: Liver Tumor Tissue",
    "Tumor",
    "Non_Tumor"
  )
group_list1 <- group_list1[1:100]
save(data_1, group_list1, file = "Expreset_1.Rdata")

# 探针ID转换为基因ID
rm(list = ls())
options(stringsAsFactors = F)
load("GSE14520_eSet.Rdata")
load(file = "Expreset_1.Rdata")
dat_gpl <- fData(gset[[1]])
dat_gpl_new <- dat_gpl[c(1, 3)]
colnames(dat_gpl_new) <- c("probe_id", "Gene symbol")
data_1 <- as.data.frame(data_1)
# 把探针id添加到最后一列 行名赋值给新列
data_1$probe_id <- rownames(data_1)
# merge()函数将data_1的探针id与芯片平台探针id相匹配,合并到data_1
data_1 <- merge(data_1, dat_gpl_new, by = "probe_id")
# 基因名有重复所以按基因ID取平均
data_1 <- avereps(data_1[, -c(1, 102)], ID = data_1$`Gene symbol`)
data_1 <- as.matrix(data_1)
save(data_1, group_list1, file = "Expreset_1.Rdata")

rm(list = ls())
options(stringsAsFactors = F)
load(file = "Expreset_1.Rdata")

# 标准的limma流程(生成表达矩阵和分组矩阵)
library(limma)
# factor() 创建一个分组的因子变量,每个类别会被赋予一个唯一的整数编码
design <- model.matrix(~ 0 + factor(group_list1))
colnames(design) <- levels(factor(group_list1))
rownames(design) <- colnames(data_1)
head(design)
# 创建差异比较矩阵,这个矩阵声明要对Tumor组和Non_Tumor组进行差异分析比较
contrast.matrix <-
  makeContrasts(paste0(unique(group_list1), collapse = "-"), levels = design)
contrast.matrix
# 线性拟合模型的构建
fit_1 <- lmFit(data_1, design)
fit_2 <- contrasts.fit(fit_1, contrast.matrix)
fit_2 <- eBayes(fit_2)
# topTable 提取limma模型分析后有显著差异表达的基因。
options(digits = 4)
tempOutput <- topTable(fit_2, coef = 1, n = Inf)
tempOutput <- na.omit(tempOutput) # 移除NA值
head(tempOutput)
# 上调基因和下调基因
tempOutput$flag <-
  ifelse(tempOutput$logFC >= 2 & tempOutput$P.Value <= 0.05, "Up",
    ifelse(tempOutput$logFC <= -2 & tempOutput$P.Value <= 0.05, "Down", "Not sig")
  )
table(tempOutput$flag)
save(data_1, group_list1, tempOutput, file = "tempOutput.Rdata")

# PCA主成分分析
rm(list = ls())
options(stringsAsFactors = F)
setwd("/Users/mayichen/Desktop/demo_2")
load(file = "Expreset_1.Rdata")
data_1[1:4, 1:4]
# PCA要求是行名是样本名列名是探针名需要转置
data_1 <- t(data_1)
data_1 <- as.data.frame(data_1)
data_1 <- cbind(data_1, group_list1)
library("FactoMineR")
library("factoextra")
# 进行主成分分析
dat.pca <- PCA(data_1[, -ncol(data_1)], graph = FALSE)
# 画图
fviz_pca_ind(dat.pca,
  geom.ind = "point", # show points only (but not "text")
  # 按照data_1中的分组变量group_list1着色
  col.ind = data_1$group_list1,
  palette = c("#00AFBB", "#E7B800"),
  addEllipses = TRUE, # 添加椭圆
  legend.title = "Groups"
)

# 层次聚类分析
rm(list = ls())
options(stringsAsFactors = F)
setwd("/Users/mayichen/Desktop/demo_2")
load(file = "Expreset_1.Rdata")
data_1[1:4, 1:4] # 每次都要检测数据
data_1 <- t(data_1) # 层次聚类分析要求行名是样本名
data_1[1:4, 1:4]
fit.complete <- hclust(dist(data_1), method = "complete")
plot(fit.complete, labels = FALSE, hang = -1, cex = 0.8)

# for volcano 火山图
rm(list = ls())
options(stringsAsFactors = F)
load(file = "tempOutput.Rdata")
data_vol <- tempOutput
table(data_vol$flag)
data_vol$temp_v <- -log10(data_vol$P.Value) # -log10(P.Value)整理p值
temp_v_2 <- data_vol[data_vol$temp_v >= 23, ]
library(tibble)
temp_v_2 <- rownames_to_column(temp_v_2, var = "gene_name")
dim(temp_v_2)
library(ggplot2)
library(ggrepel)
ggplot(data_vol, aes(x = logFC, y = temp_v)) +
  geom_point(aes(color = flag)) +
  scale_color_manual(values = c("dodgerblue", "gray", "firebrick")) +
  geom_label_repel
    (data = temp_v_2, aes(x = logFC, y = temp_v, label = gene_name)) +
  labs(y = "-log10(pvalue)", x = "log(Fold Change)") +
  theme_bw()

# for heatmap 热图
rm(list = ls())
options(stringsAsFactors = F)
if (!requireNamespace("RColorBrewer", quietly = TRUE)) {
  install.packages("RColorBrewer")
}
load(file = "tempOutput.Rdata")
data_1[1:4, 1:4]
table(group_list1)
x <- tempOutput$logFC # 取logFC这列并将其重新赋值给x
names(x) <- row.names(tempOutput) 
x[1:4]
cg <- c(
  names(head(sort(x), 10)), 
  names(tail(sort(x), 10))
)
head(cg)
library(pheatmap)
# 归一化
data_2 <- t(scale(t(data_1[cg, ])))
data_2[data_2 > 2] <- 2
data_2[data_2 < -2] <- -2
data_2[1:4, 1:4]
# 聚类
library(tibble)
library(forcats)
library(RColorBrewer)
group_list1_select <- data.frame(flag = group_list1)
rownames(group_list1_select) <- colnames(data_2)
group_list1_select <- group_list1_select %>%
  dplyr::mutate(flag = fct_relevel(flag, c("Tumor", "Non_Tumor"))) %>%
  dplyr::arrange(flag)
# 将group_list1_select的行名也就分组信息给到n的列名,即热图中位于上方的分组信息
# 从矩阵或数据框 data_2 中选择与 group_list1_select 数据框的行名相对应的列
data_2 <- data_2[, rownames(group_list1_select)]
anno_color <- list(group = c("Tumor" = "#66C2A5", "Non_Tumor" = "#FC8D62"))
pheatmap(data_2,
  show_colnames = F, show_rownames = F, cluster_cols = F, scale = "row",
  # 样本组别信息 按照列
  annotation_col = group_list1_select,
  annotation_colors = anno_color,
  color = rev(colorRampPalette(brewer.pal(11, "RdBu"))(1000)))

# 基因的差异性分析
rm(list = ls())
options(stringsAsFactors = F)
load(file = "Expreset_1.Rdata")
t.test(data_1[2, ] ~ group_list1)
temp_fun <- function(str) {
  library(ggpubr)
  data_f <- data.frame(gene = str, stage = group_list1)
  p <- ggboxplot(data_f,
    x = "stage", y = "gene",
    color = "stage", palette = "jco",
    add = "jitter"
  )
  #  Add p-value
  p + stat_compare_means()
}
# 调用
temp_fun(data_1["HAMP", ])

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

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

相关文章

开源免费的MySQL和MariaDB图形化管理软件

2024年4月7日&#xff0c;周日凌晨 有很多开源免费的MySQL和MariaDB图形化管理界面可供选择。 以下是一些常用的工具&#xff1a; phpMyAdmin&#xff1a;phpMyAdmin 是一个用 PHP 编写的免费开源的 MySQL 和 MariaDB 管理工具&#xff0c;它提供了一个基于 Web 的界面&#…

GPT-5将在6月发布前进行「红队进攻测试」

“GPT-5将在6月发布”的消息刷屏了AI朋友圈。这则消息之所以被无数人相信并转发&#xff0c;是因为已经有不少技术人员在社交平台上晒出了「红队进攻测试」邀请。 基于 GPT系列庞大的用户体量和影响力&#xff0c;OpenAI 将更加重视GPT-5 的安全性&#xff0c;作为GPT-5上市前的…

Azure runbook 使用用户托管标识查看资源状态

Azure runbook 使用用户托管标识查看资源状态 在托管标识里创建用户托管标识在被查看或变更资源进行授权创建自动化账号和runbook发布脚本添加计划 在托管标识里创建用户托管标识 在被查看或变更资源进行授权 这里是选取的Analysis Services 资源 创建自动化账号和runbook 发布…

如何在 Node.js 中使用 bcrypt 对密码进行哈希处理

在网页开发领域中&#xff0c;安全性至关重要&#xff0c;特别是涉及到用户凭据如密码时。在网页开发中至关重要的一个安全程序是密码哈希处理。 密码哈希处理确保明文密码在数据库受到攻击时也难以被攻击者找到。但并非所有的哈希方法都是一样的&#xff0c;这就是 bcrypt 突…

科技云报道:卷完参数卷应用,大模型落地有眉目了?

科技云报道原创。 国内大模型战场的比拼正在进入新的阶段。 随着产业界对模型落地的态度逐渐回归理性&#xff0c;企业客户的认知从原来的“觉得大模型什么都能做”的阶段&#xff0c;已经收敛到“大模型能够给自身业务带来什么价值上了”。 2023 年下半年&#xff0c;不少企…

【C#】读取指定XML节点

&#x1f4f0;XML文件 <?xml version"1.0" encoding"utf-8"?> <configuration><userSettings><Internal.Settings type"Desktop"><setting name"StatsDisplayCount" serializeAs"String">…

算法设计与分析(实验5)-----图论—桥问题

一&#xff0e;实验目的 掌握图的连通性。掌握并查集的基本原理和应用。 二&#xff0e;实验步骤与结果 1.定义 &#xff08;1&#xff09;图的相关定义 图&#xff1a;由顶点的有穷非空集合和顶点之间的边的集合组成。 连通图&#xff1a;在无向图G中&#xff0c;若对于…

nestjs 全栈进阶--module

视频教程 10_模块Module1_哔哩哔哩_bilibili 1. 模块Module 在 Nest.js 中&#xff0c;Module 是框架的核心概念之一&#xff0c;用于组织和管理应用程序的不同部分&#xff0c;包括服务、控制器、中间件以及其他模块的导入。每个 Nest.js 应用程序至少有一个根模块&#xf…

log4j 集成 ELK环境搭建

一、前言 1.需要准备一台linux服务器&#xff08;最好是CentOS7&#xff09;,内存至少4g以上&#xff08;三个组件都比较占用内存&#xff09; 2.需要有docker使用经验 3. 三个软件的版本要一致 二、安装ElasticSearch 这里先创建一个网络&#xff1a;因为我们还需要部署k…

J基于微信小程序的电影订票、电影购票小程序

文章目录 1 **摘 要**2 技术简介**3 系统功能设计****第4章 系统设计****4.1系统结构设计** 第5章 系统实现**5.1管理员服务端功能模块**5.2用户客户端功能模块 结 论6 推荐阅读7 源码获取&#xff1a; 1 摘 要 本文从管理员、用户的功能要求出发&#xff0c;电影订票系统小程…

Python---Numpy线性代数

1.数组和矩阵操作&#xff1a; 创建数组和矩阵&#xff1a;np.array, np.matrix 基本的数组操作&#xff1a;形状修改、大小调整、转置等 import numpy as np# 创建一个 2x3 的数组 A np.array([[1, 2, 3], [4, 5, 6]]) print("数组 A:\n", A)# 将数组 A 转换为矩阵…

探究“大模型+机器人”的现状和未来

基础模型(Foundation Models)是近年来人工智能领域的重要突破&#xff0c;在自然语言处理和计算机视觉等领域取得了显著成果。将基础模型引入机器人学&#xff0c;有望从感知、决策和控制等方面提升机器人系统的性能&#xff0c;推动机器人学的发展。由斯坦福大学、普林斯顿大学…

javaer 为什么称redis、rabbitmq这些东西为中间件?

中间件&#xff08;Middleware&#xff09;是位于客户端和服务器端之间的软件服务层&#xff0c;它提供了一种通用服务的方式&#xff0c;帮助不同的应用程序、系统组件和服务之间进行交互和数据交换。中间件隐藏了底层的复杂性&#xff0c;使得开发者可以专注于业务逻辑的实现…

基于JSP SSM的社区生活超市管理系统

目录 背景 技术简介 系统简介 界面预览 背景 随着时代步伐的加速&#xff0c;计算机技术已广泛而深刻地渗透到社会的各个层面。随着居民生活水平的持续提升&#xff0c;人们对社区生活超市的期望和管理要求也越来越高。随着社区生活超市数量的稳步增长&#xff0c;开发一个…

Coding and Paper Letter(八十八)

系列重启之CPL。 1 Coding: 1.一个Python库用来分析城市路网的工具箱&#xff0c;城市形态分析工具。 Madina 2.SkyPilot&#xff1a;在任何云上运行 LLM、AI 和 Batch。 通过简单的界面即可实现最大程度的节省性能、最高的 GPU 可用性和托管执行。 skypilot 3.探索美国卫…

Apache-Pulsar安装操作说明

说明 Pulsar 是一种用于服务器到服务器消息传递的多租户高性能解决方案。 Pulsar 的主要特性如下&#xff1a; 对 Pulsar 实例中的多个集群的本机支持&#xff0c;并跨集群无缝地复制消息。 极低的发布和端到端延迟。 无缝可扩展至超过一百万个主题。 一个简单的客户端 API&…

arcgis10.5安装步骤

目录 一、安装License 二、安装ArcGIS_Desktop 三、安装汉化包&#xff0c;解压后&#xff0c;直接双击等待安装即可 一、安装License 双击ArcGIS_License_Manager_Windows_105_154033 选择【Next】 勾选I accept&#xff0c;然后选择【Next】 选择License的安装目录&#x…

实战webSocket压测(三)Jmeter真实接口联调

背景&#xff1a; 接口地址为&#xff1a;ws://sunlei.demo 接口说明&#xff1a;websocket接口&#xff0c;首次连接&#xff0c;通过Text请求设置开启标志&#xff0c;然后通过wav文件流传输&#xff0c;达到后端服务可以根据传输信息进行解析满足指定标准后&#xff0c;web…

SpringBoot响应式RedisClient配置

大多数场景&#xff0c;默认配置的Redis客户端不满足业务场景&#xff0c;根源在于Redis key、value 序列化反序列化问题。因此&#xff0c;有必要配置自定义的客户端来满足需求。 默认配置源码如下&#xff0c;采用jdk序列化/反序列化方式进行&#xff0c;我们只需要配置相同…

SpringMVC数据响应和请求

文章目录 1.SpringMVC简介2. SpringMVC快速入门3. SpringMVC执行的流程4.SpringMVC注解解释5. 视图解析器6.SpringMVC的数据响应6.1返回ModelView对象6.2直接返回字符串6.3返回json字符串 7.SpringMVC获得请求数据7.1 获得基本类型参数7.2获得POJO类型参数7.3获取数组类型参数7…