Seurat的分析流程有两步, 对数据的normalization和scaling. 两种的作用不同,前者是为了处理每个细胞的总count不同的问题,而后者则是让每个基因的表达量的均值为0,方差为1.

normlization对应的函数是NormalizeData,通过数据进行一些列变换,消除文库大小的影响。 它有三种方法, LogNormalize, CLR, RC

默认方法方式是LogNormalize, 即对于每个细胞,将每个基因的count除以总数,然后乘以一个scale.factor, 之后以自然对数进行转换。为了提高效率,Seurat编写了C++代码用于加速

// [[Rcpp::export]]
Eigen::SparseMatrix<double> LogNorm(Eigen::SparseMatrix<double> data, int scale_factor, bool display_progress = true){Progress p(data.outerSize(), display_progress);Eigen::VectorXd colSums = data.transpose() * Eigen::VectorXd::Ones(data.rows());for (int k=0; k < data.outerSize(); ++k){p.increment();for (Eigen::SparseMatrix<double>::InnerIterator it(data, k); it; ++it){it.valueRef() = log1p(double(it.value()) / colSums[k] * scale_factor);}}return data;
}

也就是说,如果你不追求效率,我们是可以用纯R代码实现。

mat <- matrix(data = rbinom(n = 25, size = 5, prob = 0.2), nrow = 5)
mat_norm <- LogNormalize(data = mat)
# LogNormalize等价于
log1p(t(t(mat) / colSums(mat)) * 10000)

Scale这一步对应的函数是ScaleData, 在它处理之后,使得每个基因在所有样本的均值是0,而方差是1。这让每个基因在下游分析中的具有相同的权重,使得高表达基因不那么显著。

而如果需要移除数据集中不需要的变异来源(unwanted sources of variation), ScaleData需要设置额外的参数vars.to.regress,但是作者更加推荐使用SCTransform

尽管ScaleData对应的源代码非常的长,但是和数据处理相关的就是如下这几条

# Currently, RegressOutMatrix will do nothing if latent.data = NULL
data.scale <- scale.function(mat = object[features[block[1]:block[2]], split.cells[[group]], drop = FALSE],scale = do.scale,center = do.center,scale_max = scale.max,display_progress = FALSE
)

其中scale.function是根据数据类型来决定是FastRowScale还是FastSparseRowScale, 而这两个代码Seurat也是通过C++进行提速了。因此,如果不追求效率,还是可以用纯R代码实现。

pbmc_small <- ScaleData(pbmc_small)
GetAssayData(pbmc_small, "scale.data")[c("IGLL5"),1:2]
# 等价于
scaled_data <- t(scale(t(GetAssayData(pbmc_small, "data"))))
scaled_data[c("IGLL5"),1:2]

默认R语言的scale是按列处理,对于行为基因,列为样本的数据,可以直接套用。但是Seurat的输入数据是行为基因,列为样本,那么就需要按行scale。换句话说,如果你需要对行进行scale,那么你可以通过Seurat:::FastRowScale()的方式调用Seurat写的FastRowScale函数。此外Seurat编写了大量的Fast*函数,都可以尝试用在代码中。

Seurat的normalization和scaling相关推荐

  1. seurat提取表达矩阵_Seurat

    library(dplyr) library(Seurat) # 10X的数据可以使用Read10X这个函数,会返回一个UMI count矩阵,其中的每个值表示每个基因(行)在每个细胞(列)的分子数量 ...

  2. 【ML05】Feature Scaling 特征缩放

    Feature Scaling Feature Scaling 特征缩放的目的是什么 Feature Scaling Method #3 Dividing by maximum Mean Normal ...

  3. 机器学习01-定义、线性回归、梯度下降

    目录 一.定义 What is Machine Learning 二.建模 Model Representation 三.一元线性回归 Linear Regression with One Varia ...

  4. 机器学习算法如何应用于控制_将机器学习算法应用于NBA MVP数据

    机器学习算法如何应用于控制 A step-by-step tutorial in R R中的分步教程 1引言 (1 Introduction) This blog makes up the Machi ...

  5. DengAI —数据预处理

    了解机器学习 (Understanding ML) This article is based on my entry into DengAI competition on the DrivenDat ...

  6. CHIP-seq流程学习笔记(7)-热图软件 deeptools

    参考文章: ChIP-seq操作记录 如何使用deeptools处理BAM数据 用deeptools绘制基因组位置的信息 高通量测序数据处理学习记录(四):DeepTools学习笔记 deepTool ...

  7. Machine Learning Stanford (week 2)

    文章目录 1. Multivariate Linear Regression 1.1 Multiple Features 1.2 Gradient Descent For Multiple Varia ...

  8. 【吴恩达机器学习】第二周课程精简笔记——多元线性回归和计算参数分析

    1. Multivariate Linear Regerssion(多元线性回归) (1)Multiple Feature We now introduce notation for equation ...

  9. 机器学习——网易慕课笔记

    文章目录 机器学习笔记 说在前面 第一章 1.1机器学习引言 1.2开发环境准备 1.3一个神经元的网络 第二章 计算机视觉 加载`Fashion MNIST`数据集 构造神经元网络模型 训练和评估模 ...

最新文章

  1. 2022-2028年中国廉价航空行业深度调研及投资前景预测报告
  2. html div 隐藏滚动条样式,div滚动条样式隐藏与显示
  3. 模拟信号可以传输声音和图像,那么文字呢--信息论系列
  4. 怎么用计算机解开手机,怎么用电脑解开手机锁
  5. 深入理解.NET Core的基元(三) - 深入理解runtimeconfig.json
  6. 前端 JS 如何在一个页面中局部加载其它页面的数据
  7. 每天一个linux命令(37):date命令
  8. Linux终端下打印带颜色的信息
  9. 设计灵感素材网站:美工设计者必备
  10. mysql grant all privileges_MySQL数据备份及还原(一)
  11. mysql查看和调整最大连接数
  12. NOIP2017普及组T3(棋盘)题解
  13. idea svn切换分支,合并分支
  14. android编译环境-软硬件要求
  15. nvme固态硬盘开机慢_解决win10系统下nvme固体硬盘开机慢的方法
  16. 科研日志--python大文件打开内存溢出
  17. MySQL 字符串数字转换
  18. DataX Transformer 源码分析及 UDF 扩展与使用
  19. C 语言字符数组的定义与初始化
  20. 3D模型汇总----骨骼模型

热门文章

  1. RabbitMQ and Oslo.messaging
  2. excel箱形图中位数_在Excel中创建简单的箱形图
  3. C# WINFORM 主窗口把数据传给子窗口,编辑后再返回主窗口
  4. 【转】智力题解答汇总
  5. HackingLab基础关
  6. 十折交叉验证pythoniris_python机器学习-交叉验证(cross-vaildation)
  7. 凸优化笔记6(共轭梯度法)
  8. 耐压测试仪结构组成部分
  9. 全网最详细的Neo4j安装教程
  10. Ajax速通(四)——axios