yid | author | year | source | accession | study | genotype | tissue | n | ASE | stress | RIL | Run |
---|---|---|---|---|---|---|---|---|---|---|---|---|
rn20b | Zhou | 2020 | local | sp065 | heterosis | 4 inbred + 6 hybrids | 3 tissues | T | C | |||
rn20b2 | local | sp068a | RIL | B, M, BxM, MxB, 4 RILs | leaf | T C |
E:\文章代码\玉米中的元基因调控网络突出了功能上相关的调控相互作用。\rnaseq-master\rnaseq-master\nf\zm.rn20b
design.csv
- SampleID: 样本编号
- Tissue: 组织类型
- Genotype: 基因型
- Treatment: 处理类型
- Replicate: 实验重复次数
- paired: 数据类型(双端测序,PE)
- r0: 空白列,可根据需要补充内容
- r1 和 r2: 分别是双端测序的两个FASTQ文件路径
SampleID | Tissue | Genotype | Treatment | Replicate | paired | r0 | r1 | r2 |
---|---|---|---|---|---|---|---|---|
mBR502 | seedling_root | B73 | m | 2 | PE | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR502_S19_R1_001.fastq.gz | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR502_S19_R2_001.fastq.gz | |
mBR503 | seedling_root | B73 | m | 3 | PE | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR503_S20_R1_001.fastq.gz | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR503_S20_R2_001.fastq.gz | |
mBR504 | seedling_root | B73 | m | 4 | PE | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR504_S21_R1_001.fastq.gz | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR504_S21_R2_001.fastq.gz | |
mBR506 | seedling_root | B84 | m | 2 | PE | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR506_S22_R1_001.fastq.gz | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR506_S22_R2_001.fastq.gz | |
mBR507 | seedling_root | B84 | m | 3 | PE | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR507_S23_R1_001.fastq.gz | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR507_S23_R2_001.fastq.gz | |
mBR508 | seedling_root | B84 | m | 4 | PE | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR508_S24_R1_001.fastq.gz | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR508_S24_R2_001.fastq.gz | |
mBR510 | seedling_root | Mo17 | m | 2 | PE | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR510_S25_R1_001.fastq.gz | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR510_S25_R2_001.fastq.gz | |
mBR511 | seedling_root | Mo17 | m | 3 | PE | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR511_S26_R1_001.fastq.gz | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR511_S26_R2_001.fastq.gz | |
mBR512 | seedling_root | Mo17 | m | 4 | PE | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR512_S27_R1_001.fastq.gz | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR512_S27_R2_001.fastq.gz | |
mBR514 | seedling_root | A682 | m | 2 | PE | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR514_S28_R1_001.fastq.gz | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR514_S28_R2_001.fastq.gz | |
mBR515 | seedling_root | A682 | m | 3 | PE | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR515_S29_R1_001.fastq.gz | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR515_S29_R2_001.fastq.gz | |
mBR516 | seedling_root | A682 | m | 4 | PE | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR516_S30_R1_001.fastq.gz | /home/springer/zhoux379/projects/s3/zhoup-barn/zm.rn20b/191023_A00223_0239_AHGLLLDRXX/Springer_Project_065_Pool6/mBR516_S30_R2_001.fastq.gz |
Nextflow 脚本
好的,以下是对你提供的 Nextflow 脚本的逐部分分析。我们可以分为几个主要部分:1) 参数定义,2) check_max
函数,3) 配置文件的引入。首先,我们先讲解 参数定义 部分。
1. 参数定义 (params
block)
这一部分是设置 Nextflow 工作流程的参数,它包含了整个流程的基本配置信息。这些参数将在工作流执行时被动态引用和传递,控制着流程的执行行为。解释如下:
params {genome = 'Zmays_B73v5' // 基因组的名称,这里指定的是玉米(Zmays)B73v5版本name = 'zm.rn20b' // 流程名称design = 'design.tsv' // 实验设计文件的路径,通常包含样本和条件的映射source = 'local' // 数据来源,本例中指定为“local”read_type = 'illumina' // 测序平台类型,这里指定为Illuminapaired = 'PE' // 数据的配对类型,这里指定为双端测序(PE: Paired-End)outdir = "./raw" // 输出目录,用于存储原始数据文件tracedir = "./pipeline_info" // 追踪信息存储目录,通常用于保存工作流执行过程的日志文件stranded = 'no' // 是否为链特异性数据,'no'表示非链特异性interleaved = false // 是否为交替合并的双端数据,设置为false表示不是save_fastq = false // 是否保存原始的FASTQ文件,设置为false表示不保存trimmer = "trim_galore" // 使用的测序数据修剪工具save_trimmed = false // 是否保存修剪后的数据aligner = "hisat2" // 对齐工具,这里使用的是HISAT2saveBAM = false // 是否保存BAM文件,设置为false表示不保存skip_preseq = true // 是否跳过PreSeq步骤,用于预测测序深度skip_markdup = true // 是否跳过标记重复步骤run_salmon = false // 是否运行Salmon进行转录本定量run_stringtie = false // 是否运行StringTie进行转录本拼接和定量count_multi = false // 是否计算多重映射的readsase = false // 是否进行等位基因表达(ASE)分析ril = false // 是否进行RIL(重组自交系)分析cage = false // 是否进行CAGE(Cap Analysis of Gene Expression)分析
}
- genome: 指定了用于比对的基因组版本,这里使用的是玉米(Zmays)B73v5。
- name: 设定了工作流的名字,用于识别和组织工作流的输出。
- design: 指定了实验设计文件路径,通常该文件定义了不同样本之间的对照组信息。
- read_type 和 paired: 表示使用的测序平台和数据类型,这里选择的是 Illumina 平台和配对末端测序(PE)。
- trimmer: 选择了修剪工具,
trim_galore
是常见的一个修剪工具,主要用于去除低质量的序列。 - aligner: 选择了比对工具,这里使用的是
hisat2
,它广泛用于基因组比对。 - skip_preseq 和 skip_markdup: 设置为
true
,意味着跳过了测序深度预测和重复序列标记这两个步骤。 - run_salmon 和 run_stringtie: 两者都设为
false
,表示不运行这两个基于转录本的分析工具。 - ase, ril, cage: 这些参数控制是否执行特定的分析,当前都设为
false
。
这些参数为整个工作流的执行提供了灵活的配置,可以根据需要调整。
很好,接下来我们讲解 check_max
函数 部分。
2. check_max
函数
该函数的作用是检查和比较不同的资源限制(内存、时间、CPU),确保所需资源不会超过工作流设定的最大值。该函数会根据传入的类型(内存、时间或CPU)返回一个合适的值。具体实现如下:
def check_max(obj, type) {if (type == 'memory') { // 如果请求的是内存资源try {if (obj.compareTo(params.max_memory as nextflow.util.MemoryUnit) == 1) // 比较当前请求的内存是否超过最大限制return params.max_memory as nextflow.util.MemoryUnit // 返回最大内存限制elsereturn obj // 否则返回当前请求的内存} catch (all) {println " ### ERROR ### Max memory '${params.max_memory}' is not valid! Using default value: $obj"return obj // 如果比较失败,则输出错误并返回当前请求的内存}} else if (type == 'time') { // 如果请求的是时间资源try {if (obj.compareTo(params.max_time as nextflow.util.Duration) == 1) // 比较当前请求的时间是否超过最大限制return params.max_time as nextflow.util.Duration // 返回最大时间限制elsereturn obj // 否则返回当前请求的时间} catch (all) {println " ### ERROR ### Max time '${params.max_time}' is not valid! Using default value: $obj"return obj // 如果比较失败,则输出错误并返回当前请求的时间}} else if (type == 'cpus') { // 如果请求的是CPU资源try {return Math.min(obj, params.max_cpus as int) // 返回请求的CPU数和最大限制中的较小者} catch (all) {println " ### ERROR ### Max cpus '${params.max_cpus}' is not valid! Using default value: $obj"return obj // 如果比较失败,则输出错误并返回当前请求的CPU数}}
}
功能解析:
-
内存(
memory
):obj
是当前请求的内存大小,params.max_memory
是工作流中定义的最大内存。函数通过compareTo
比较两者,若请求的内存超过了最大内存限制,函数返回最大内存值。- 如果
compareTo
比较失败,则打印错误信息并返回当前请求的内存大小。
-
时间(
time
):- 与内存类似,函数会比较当前请求的时间和最大时间,确保请求不会超过最大限制。
-
CPU(
cpus
):- 通过
Math.min
返回请求的 CPU 数和最大 CPU 数的较小者。
- 通过
错误处理:
每个 if
分支中都有一个 try-catch
结构来捕获可能的错误,如果传入的资源限制不合法(比如格式不正确),则会输出错误提示,并返回默认的请求值。
总结:
check_max
函数通过限制资源使用,确保不会请求超出配置中允许的最大值,防止资源过载或不必要的资源浪费。它可以在任务调度时提供更高效的资源管理。
好的,接下来我们讲解 配置文件的引入 部分。
3. 配置文件的引入
在 Nextflow 中,includeConfig
用来引入外部的配置文件。这些文件通常包含一些共享的参数或流程配置,能够简化和集中管理工作流设置。你提供的代码中有三行引入配置文件:
includeConfig "$nf/configs/nextflow.config"
includeConfig "$nf/configs/fastq.config"
includeConfig "$nf/configs/rnaseq.config"
解释:
$nf/configs/nextflow.config
: 这是工作流的主配置文件,通常包含一些全局设置,例如工作目录、资源配置、日志记录等。它可以包含常用的默认配置,供其他配置文件引用。$nf/configs/fastq.config
: 该文件可能用于处理与 FASTQ 文件相关的配置,包括数据输入路径、FASTQ 文件格式相关的设置等。$nf/configs/rnaseq.config
: 这个配置文件可能专门用于 RNA-seq 流程的设置,包括测序类型、比对工具、转录本定量工具等。
工作流配置的组织:
通过引入这些配置文件,用户可以将工作流的设置模块化,并且避免在代码中硬编码过多的参数。这样,如果需要修改某个配置,直接修改对应的配置文件即可,而不需要改变工作流的主代码。
总结:
includeConfig
用于将外部的配置文件加载到当前工作流中,支持模块化配置管理。- 这种做法有助于提高代码的可维护性和灵活性,尤其是当多个流程共享相同的配置时,可以通过引入公共的配置文件来简化管理。
rn20b.R
output.md
这是关于 RNA-seq 数据分析结果的一些输出文件和其对应内容的概述。你提供的链接和文件主要围绕样本的质量控制(QC)、基因型特异性表达(ASE)分析等方面的可视化结果。以下是这些文件的详细解读和它们在数据分析中的作用:
1. Raw Samples
Raw samples 包含了原始的 RNA-seq 数据,这些数据未经任何清理或过滤,主要用于分析原始样本的质量和数据分布。
-
sample meta:
该文件通常包含有关样本的基本信息,如样本 ID、基因型、处理条件、重复样本信息等。这是数据分析中非常重要的一部分,帮助定义不同的实验组和处理方式。 -
hierarchical clustering w. pearson correlation 和 hierarchical clustering w. spearman correlation:
这两个文件是基于原始 RNA-seq 数据进行层次聚类(Hierarchical Clustering)分析的可视化结果。- Pearson correlation:使用 Pearson 相关系数衡量样本间的相似性,常用于评估样本间的线性关系。
- Spearman correlation:使用 Spearman 等级相关系数衡量样本间的关系,适用于非线性或非正态分布的数据。
这两个图的目的是帮助理解样本间的相似性或差异性,通常通过颜色区分聚类结果,显示哪些样本彼此相似或属于同一类。
-
PCA clustering
- mRNA 和 total RNA:
PCA(主成分分析)是一种降维技术,用于简化高维数据,帮助我们理解样本之间的主要差异。在此,mRNA
和total RNA
分别代表不同类型的 RNA 样本。PCA 可视化帮助判断样本在主要维度上的分布情况,如是否存在明显的群体或处理效果。
- mRNA 和 total RNA:
-
tSNE clustering
- mRNA 和 total RNA:
tSNE(t-distributed Stochastic Neighbor Embedding)是一种非线性降维方法,通常用于探索高维数据的局部结构,尤其适用于更复杂的数据模式。和 PCA 相似,tSNE 可帮助理解样本的聚类情况。
- mRNA 和 total RNA:
2. Cleaned Samples
Cleaned samples 是经过质量控制和预处理(如去除低质量的读数、过滤掉冗余数据等)的数据。这部分数据是经过清理后,用于更精确的下游分析。
-
sample meta:
与原始样本的元数据类似,01.meta.tsv
文件包含了清理后样本的详细信息,通常包括数据清洗后的样本信息和相应的处理细节。 -
hierarchical clustering w. pearson correlation 和 hierarchical clustering w. spearman correlation:
这两个文件与原始样本的层次聚类图类似,但这次是在数据清理后的结果。目的是查看数据清理是否改变了样本间的关系,检查清理后数据是否更为一致。 -
PCA clustering
- mRNA 和 total RNA:
清理后的 PCA 分析结果,帮助我们查看数据清理后的样本间差异。通常,清理后的数据应显示更明确的群体划分。
- mRNA 和 total RNA:
-
tSNE clustering
- mRNA 和 total RNA:
清理后的 tSNE 聚类图,与原始样本相比,清理后的数据可能表现出更好的聚类效果。
- mRNA 和 total RNA:
3. ASE (Allele-Specific Expression) Analysis
ASE分析 主要关注基因型特异性表达(即不同等位基因的表达差异),并生成与基因表达相关的结果。
-
SNP-level allele frequency distribution:
这是在单核苷酸多态性(SNP)位点上的基因型特异性表达分析结果。该图展示了不同 SNP 位点的等位基因频率分布,可以用于分析不同基因型对基因表达的影响。 -
gene-level allele frequency distribution:
这是在基因层面进行的 ASE 分析,展示了不同基因型在基因表达水平上的差异。该图可帮助理解不同基因型对整体基因表达的影响。
文件位置
- MSI上文件路径:
/home/springer/zhoux379/projects/rnaseq/data/11_qc/rn**/01.rds
- 这表示文件在 MSI(可能是一个高性能计算集群或服务器)上的存储位置。
01.rds
文件通常是 R 语言的数据存储文件,保存了 RNA-seq 分析的中间结果。
- 这表示文件在 MSI(可能是一个高性能计算集群或服务器)上的存储位置。
Result file walk through
这个链接指向一个详细的结果文件 walkthrough,提供了如何解释这些分析结果的具体指导。它将帮助你深入理解每个分析步骤的目的、方法和结果。
总结
这些分析结果文件为 RNA-seq 数据的质量控制、样本聚类、基因型特异性表达分析等提供了丰富的信息。每个步骤的可视化图表都帮助你更好地理解不同实验组之间的差异,进而为进一步的生物学分析奠定基础。如果你有任何特定问题或需要进一步分析某个部分,随时可以告诉我!
第一部分:读取数据与数据处理
代码:
yid = 'rn20b'
dirw = file.path(dird, '11_qc', yid)
if(!dir.exists(dirw)) system(sprintf("mkdir -p %s", dirw))#{{{ read in
res = rnaseq_cpm_raw(yid)
th = res$th; tm = res$tm; tl = res$tl; th_m = res$th_m; tm_m = res$tm_m
解释:
-
yid = 'rn20b'
:这是给定的物种或数据集的标识符(例如,rn20b 可能代表某个基因组版本)。 -
dirw = file.path(dird, '11_qc', yid)
:指定数据输出目录。dird
应该是预定义的路径,而yid
是项目标识符,路径拼接后形成完整的文件夹路径。 -
if(!dir.exists(dirw)) system(sprintf("mkdir -p %s", dirw))
:如果指定的文件夹路径dirw
不存在,则创建该文件夹。system
函数执行命令行操作,这里是用来创建目录。 -
res = rnaseq_cpm_raw(yid)
:调用rnaseq_cpm_raw
函数,传入yid
(数据集标识符)并读取原始的 RNA-seq 数据,返回的结果res
包含多个数据框:th
(样本信息)、tm
(基因表达矩阵)、tl
(某些相关数据),以及其他与处理相关的数据框(th_m
、tm_m
)。
结果:
th
: 样本信息,包含样本的详细信息(如组织类型、基因型、处理等)。tm
: 基因表达矩阵,包含基因在不同样本中的表达值(通常是CPM)。tl
: 其他数据。th_m
和tm_m
: 这些可能是经过处理的th
和tm
的变体,通常在后续分析中会使用。
第二部分:数据处理与合并
代码:
thl = th %>% arrange(Tissue, Genotype, Treatment) %>%select(Tissue, Genotype, Treatment, Replicate) %>%group_by(Tissue, Genotype, Treatment) %>% slice(1) %>% ungroup() %>%mutate(elab = Genotype)
解释:
-
arrange(Tissue, Genotype, Treatment)
:首先,按Tissue
(组织类型)、Genotype
(基因型)和Treatment
(处理类型)对th
数据框进行排序,确保数据按照这些列的顺序排列。 -
select(Tissue, Genotype, Treatment, Replicate)
:选择Tissue
(组织类型)、Genotype
(基因型)、Treatment
(处理类型)和Replicate
(重复次数)这几列,去除其他不需要的列。 -
group_by(Tissue, Genotype, Treatment)
:将数据按Tissue
、Genotype
和Treatment
分组,以便后续对每组数据进行操作。 -
slice(1)
:在每个组内,选择第一行。因为我们可能希望每个不同的Tissue
、Genotype
和Treatment
组合只有一个代表样本,通常这代表了每个组的第一个(或任意一个)样本。 -
ungroup()
:去除分组信息,使得后续操作不再受到分组影响。 -
mutate(elab = Genotype)
:创建一个新的列elab
,其值与Genotype
相同,用于后续可视化和标注。
结果:
thl
:处理后的数据框,包含每种Tissue
、Genotype
和Treatment
组合的一个代表样本,并增加了elab
列,用于存储基因型信息。
接下来的部分是将样本信息和基因表达矩阵进行合并。
代码:
th = res$th %>%mutate(grp = str_c(Tissue, Genotype, Treatment, sep="_")) %>%left_join(thl, by=c('Tissue', 'Genotype', 'Treatment', 'Replicate')) %>%replace_na(list(elab='')) %>%mutate(lab = str_c(Treatment, Tissue, Genotype, Replicate, sep='_'))
解释:
-
mutate(grp = str_c(Tissue, Genotype, Treatment, sep="_"))
:为th
数据框创建一个新的列grp
,该列是由Tissue
、Genotype
和Treatment
拼接而成的字符串,用下划线连接。这样做可以帮助后续的分组与可视化。 -
left_join(thl, by=c('Tissue', 'Genotype', 'Treatment', 'Replicate'))
:将thl
数据框与th
进行左连接。通过Tissue
、Genotype
、Treatment
和Replicate
四列进行连接。连接后,th
将包含来自thl
的elab
列。 -
replace_na(list(elab=''))
:如果在合并过程中thl
中的某些elab
值缺失,则用空字符串''
填充这些缺失值。 -
mutate(lab = str_c(Treatment, Tissue, Genotype, Replicate, sep='_'))
:创建一个新的列lab
,它由Treatment
、Tissue
、Genotype
和Replicate
拼接而成,用下划线分隔。这通常用于给样本加标签,方便后续分析和可视化。
结果:
th
:处理后的样本信息数据框,其中包含新的列grp
和lab
,方便后续的分析和可视化。
接下来的部分是对基因表达矩阵的处理。
代码:
tm = res$tm %>% filter(SampleID %in% th$SampleID) %>%mutate(value=asinh(CPM))
解释:
-
filter(SampleID %in% th$SampleID)
:过滤tm
(基因表达矩阵)中的样本,只保留SampleID
在th
(样本信息)中的那些样本。这确保了基因表达数据和样本信息的一致性。 -
mutate(value=asinh(CPM))
:对CPM
(每百万映射值)取反双曲正弦变换(asinh
)。这通常用于对表达值进行平滑,以减少极端值对结果的影响。
结果:
tm
:处理后的基因表达矩阵,其中value
列包含了经过变换的CPM
值,适合进行后续分析。
好的,接下来的部分是代码的第三部分:
第三部分:数据可视化
这一部分主要是用于可视化基因表达数据,通过层次聚类(hclust)、PCA 和 tSNE 进行样本间的相似性分析。你将通过这些分析探索不同样本之间的关系,帮助你理解数据的潜在结构。
代码:
#{{{ hclust & tSNE
p1 = plot_hclust(tm, th, pct.exp=.7, cor.opt='pearson', var.col='Tissue', expand.x=.25)
ggsave(file.path(dirw, '11.hclust.p.pdf'), p1, width=8, height=15)p1 = plot_hclust(tm, th, pct.exp=.7, cor.opt='spearman', var.col='Tissue', expand.x=.25)
ggsave(file.path(dirw, '11.hclust.s.pdf'), p1, width=8, height=15)
解释:
-
plot_hclust
:这个函数用于绘制层次聚类图。层次聚类是一种将数据对象根据相似性进行分组的无监督学习方法。tm
:基因表达矩阵。th
:样本信息数据框。pct.exp=.7
:过滤掉低表达的基因,只保留那些在至少 70% 样本中有表达的基因。cor.opt='pearson'
或cor.opt='spearman'
:指定用于计算相似性的相关性方法。pearson
是皮尔逊相关系数,spearman
是斯皮尔曼等级相关系数。var.col='Tissue'
:样本的分类变量,这里是根据Tissue
(组织类型)来给样本上色。expand.x=.25
:控制x轴的扩展,调整聚类图的布局。
-
ggsave(file.path(dirw, '11.hclust.p.pdf'), p1, width=8, height=15)
:将绘制的层次聚类图保存为 PDF 文件,文件名为11.hclust.p.pdf
。 -
第二个聚类图与第一个类似,只不过它使用了不同的相关性计算方法
spearman
。
结果:
- 生成两张层次聚类图,分别使用皮尔逊和斯皮尔曼相关性来展示样本间的相似性。
接下来的 PCA 和 tSNE 可视化:
p2 = plot_pca(tm, th[th$Treatment=='m',], pct.exp=.7, pca.center=T, pca.scale=F,var.shape='Tissue', var.col='Genotype', var.lab='elab', var.ellipse='grp',legend.pos='top.left', legend.dir='v', pal.col='aaas')
ggsave(file.path(dirw, '11.pca.m.pdf'), p2, width=6, height=6)p3 = plot_tsne(tm, th[th$Treatment=='m',], pct.exp=.7, perp=4, iter=1000, seed=42,var.shape='Tissue', var.col='Genotype', var.lab='elab', var.ellipse='grp',legend.pos='top.left', legend.dir='v', pal.col='aaas')
ggsave(file.path(dirw, '11.tsne.m.pdf'), width=6, height=6)p2 = plot_pca(tm, th[th$Treatment=='t',], pct.exp=.7, pca.center=T, pca.scale=F,var.shape='Tissue', var.col='Genotype', var.lab='elab', var.ellipse='grp',legend.pos='top.left', legend.dir='v', pal.col='aaas')
ggsave(file.path(dirw, '11.pca.t.pdf'), p2, width=6, height=6)p3 = plot_tsne(tm, th[th$Treatment=='t',], pct.exp=.7, perp=4, iter=1000, seed=42,var.shape='Tissue', var.col='Genotype', var.lab='elab', var.ellipse='grp',legend.pos='top.left', legend.dir='v', pal.col='aaas')
ggsave(file.path(dirw, '11.tsne.t.pdf'), width=6, height=6)
解释:
-
plot_pca
:主成分分析(PCA)是一种将高维数据降维到二维或三维的技术,用于探索数据中的主要变异源。pct.exp=.7
:选择在至少 70% 样本中有表达的基因。pca.center=T
:在进行PCA之前对数据进行中心化,即减去均值。pca.scale=F
:不对数据进行缩放(标准化)。var.shape='Tissue'
:样本点的形状根据Tissue
(组织类型)进行区分。var.col='Genotype'
:样本点的颜色根据Genotype
(基因型)进行区分。var.lab='elab'
:样本点的标签使用elab
列(即基因型)进行标注。var.ellipse='grp'
:样本点的分组信息用于绘制置信椭圆。
-
plot_tsne
:t-分布随机邻居嵌入(tSNE)是一种降维方法,主要用于探索高维数据中的群体结构。perp=4
:设置 tSNE 的参数perplexity
,它决定了每个点的邻居数量。iter=1000
:设置迭代次数,决定优化的精度。seed=42
:设置随机种子以确保结果可重复。- 与
plot_pca
类似,tSNE 的结果根据Tissue
和Genotype
来区分样本点的形状和颜色。
结果:
- 生成四张图:
- PCA 和 tSNE 图分别展示了处理为
m
和t
的样本。 - 图中使用不同的颜色和形状来表示不同的组织类型和基因型。
- PCA 和 tSNE 图分别展示了处理为
好的,接下来是代码的最后一部分,它主要进行基因表达数据的进一步分析,并生成相应的可视化图。
第四部分:基因表达数据的进一步处理与可视化
这一部分主要处理基因表达数据,并绘制一些与基因表达水平相关的图表,包括基因型的表达分析(ASE,Allele-specific expression)。
代码:
#{{{ ase
pa1 = plot_ase(res$ase_gene, th, val.col='Genotype', pal.col='aaas')
fo = file.path(dirw, '31.afs_gene.pdf')
ggsave(fo, pa1, width=7, height=15)pa2 = plot_ase(res$ase_snp, th, val.col='Genotype', pal.col='aaas')
fo = file.path(dirw, '32.afs_site.pdf')
ggsave(fo, pa2, width=7, height=15)
#}}}
解释:
-
plot_ase(res$ase_gene, th, val.col='Genotype', pal.col='aaas')
:plot_ase
:该函数用于绘制基因型特异性表达(ASE,Allele-Specific Expression)图,展示不同基因型在基因表达上的差异。res$ase_gene
:包含基因型特异性表达的基因数据。th
:样本信息数据框。val.col='Genotype'
:图中使用基因型信息进行颜色区分。pal.col='aaas'
:指定颜色调色板。
该图展示了不同基因型在基因层面的表达差异,帮助理解是否存在基因型特异性表达。
-
ggsave(fo, pa1, width=7, height=15)
:- 将上一步绘制的图保存为 PDF 文件,文件名为
31.afs_gene.pdf
。
- 将上一步绘制的图保存为 PDF 文件,文件名为
-
plot_ase(res$ase_snp, th, val.col='Genotype', pal.col='aaas')
:-
这一行代码与前面的
plot_ase
类似,但此处绘制的是单核苷酸多态性(SNP)层面的基因型特异性表达分析图。 -
res$ase_snp
:包含SNP位点的基因型特异性表达数据。 -
其他参数与上一步类似。
-
-
ggsave(fo, pa2, width=7, height=15)
:- 将 SNP 层面的 ASE 图保存为 PDF 文件,文件名为
32.afs_site.pdf
。
- 将 SNP 层面的 ASE 图保存为 PDF 文件,文件名为
结果:
31.afs_gene.pdf
:展示了基因层面的基因型特异性表达(ASE)。32.afs_site.pdf
:展示了 SNP 层面的基因型特异性表达(ASE)。
总结
- 这段代码涉及了 RNA-seq 数据的多个分析步骤:
- 数据读取和整理:将 RNA-seq 数据进行预处理,整理成适合后续分析的格式。
- 数据可视化:通过层次聚类、PCA 和 tSNE 等方法,探索样本间的关系。
- 基因型特异性表达分析(ASE):分析不同基因型在基因和 SNP 位点的表达差异。