R语言Scale函数与normalize.quantiles()函数的异同

基础介绍

数据标准化与wilcox分析_wilcox检验的数据必须log2吗-CSDN博客

R语言中的Quantile normalisation 原理详解

R 中的分位数归一化 (davetang.org)

How to do quantile normalization correctly for gene expression data analyses | Scientific Reports (nature.com)

在统计学中,分位数归一化是一种使两个分布在统计属性上相同的技术。要对两个或多个分布进行分位数归一化,而不使用参考分布,请像以前一样排序,然后设置为分布的平均值(通常为算术平均值)。因此,在所有情况下,最高值都成为最高值的平均值,第二高值成为第二高值的平均值,依此类推。

复制代码
df <- data.frame(one=c(5,2,3,4),
                 two=c(4,1,4,2),
                 three=c(3,4,6,8)
                 )
rownames(df) <- toupper(letters[1:4])
df

#确定每列的排名,从低到高:
df_rank <- apply(df,2,rank,ties.method="min")
df_rank

#将原始矩阵从低到高排序:
df_sorted <- data.frame(apply(df, 2, sort))
df_sorted

#计算均值:
df_mean <- apply(df_sorted, 1, mean)
df_mean

#最后将均值代入我们的排名矩阵中。

index_to_mean <- function(my_index, my_mean){
  return(my_mean[my_index])
}
 
df_final <- apply(df_rank, 2, index_to_mean, my_mean=df_mean)
rownames(df_final) <- toupper(letters[1:4])
df_final

差异

Scale函数与normalize.quantiles()函数的异同:

  1. Scale函数:
  • 算法:Scale函数是R语言中用来对数据进行标准化处理的函数,其算法是先减去平均值,再除以标准差。
  • 作用:通过Scale函数,可以将数据缩放到具有相同的标准差,但不一定具有相同的均值。
  • 优点:标准化后的数据可以更好地适应一些机器学习算法,如支持向量机(SVM)和主成分分析(PCA)。
  • 示例代码:scale(data)
  1. normalize.quantiles()函数:
  • 算法:normalize.quantiles()函数是R语言中另一种数据标准化的方法,其算法是计算数据的分位数,然后将数据的均值减去分位数。
  • 作用:通过normalize.quantiles()函数,可以保留数据的分布特征,将均值归零。
  • 优点:保留了数据的原始分布信息,适用于一些需要保持数据分布的情况。
  • 示例代码:normalize.quantiles(data)

异同点总结:

  1. **相同点:**都是用来对数据进行标准化处理的方法。

  2. 不同点:

  • Scale函数是先减去平均值再除以标准差,而normalize.quantiles()函数是计算分位数后将均值减去分位数。

  • Scale函数会使数据具有相同的标准差,而normalize.quantiles()函数会保留数据的原始分布信息。

  • 适用场景不同:Scale函数适用于需要将数据缩放到相同范围的情况,而normalize.quantiles()函数适用于需要保留数据原始分布特征的情况。


    normalize.quantiles()还原

关于R语言的normalize.quantiles()函数的逆运算

在R语言中,normalize.quantiles()函数用于将数据进行分位数标准化,使得数据符合正态分布。但是,normalize.quantiles()函数是一个单向操作的函数,无法直接逆运算还原。

如果想要逆运算还原数据,可以尝试使用inverse.quantile()函数来逆向操作,实现将标准化后的数据还原为原始数据。下面是一个简单的示例代码:

```R # 假设data是经过normalize.quantiles()标准化后的数据 data_normalized <- normalize.quantiles(data) # 使用inverse.quantile()函数逆向操作还原数据 data_restored <- inverse.quantile(data_normalized) # 检查还原后的数据是否与原始数据一致 identical(data, data_restored) ```

需要注意的是,逆向操作可能会存在一定的误差,具体效果取决于数据的特性和标准化的方法。在实际应用中,建议在还原数据后进行一定的验证和检查。

相关推荐
asdzx671 小时前
使用 Python 为 Excel 添加各类数据验证规则
开发语言·python·excel
Romantic_love_1 小时前
理解USART真实收发过程
开发语言·stm32·单片机·学习
撩得Android一次心动1 小时前
Kotlin 语言【知识点整理3】
java·开发语言·笔记·学习·kotlin
2601_966949651 小时前
如何利用 1 分钟 K 线在 14:50 精准捕捉尾盘异动?Python 量化实战:1 分钟 K 线 + 全市场扫描
开发语言·人工智能·python·量化·quantdash·量化数据源
CarIise1 小时前
JavaScript基础语法与DOM操作实战课堂笔记
开发语言·javascript·笔记
林森lsjs2 小时前
零基础吃透二叉树:定义、遍历与高频算法 —数据结构柒
java·开发语言·数据结构·算法·二叉树
wind100322 小时前
Qt5Widgets.dll 缺失报错|游戏软件无法启动完整修复教程
开发语言·qt·游戏·电脑
我叫张土豆2 小时前
在 OpenClaw Java 对话框输入一句话后,系统是如何运行的?
java·开发语言·人工智能
牛油果子哥q2 小时前
C++模板万字深度精讲:函数/类模板特化、全特化与偏特化、SFINAE机制、类型萃取、模板元编程入门、工程实战落地
开发语言·c++·面试
神仙别闹2 小时前
基于C++ 实现 L 系统分形树
开发语言·c++