Z-score并不会影响很多统计学算法的结果
做教学我们是认真的,我们的马拉松授课(直播一个月互动教学)培养了超多优秀的知识整理和分享者,与十万人一起学生信,你值得拥有下面的学习班:
先了解什么是z-score
**Z值(z-score)**又称标准数,能够将不同量级的数据转化为相同量级,实现标准化。
其公式表示为:
其中:x为实际测量值,μ为平均数,σ为标准差。
Z-score后的值本身没有实际意义,仅使数据标准统一化。实测值>平均值,则z为正值,实测值<平均值,则z为负值。
在R中实现计算z-score
R语言中默认利用函数scale
实现 z-score 的变换,scale
函数共有两个参数center
和scale
,并且两个参数均默认为TURE。其中center = T
表示数据中心化,scale = T
为真表示数据标准化。
z-score前后数据变化
x <- matrix(runif(100, 5.0, 7.5),nrow = 20)
b <- scale(x)
par(mfrow = c(2,2))
plot(x)
plot(b)
boxplot(x)
boxplot(b)
但是Z-score并不会影响很多统计学算法的结果
之所以说Z-score并不会影响很多统计学算法,是因为Z-score只改变了数据的量级并**未改变数据的分布,**比如,以降维为主的PCA分析:
library(FactoMineR)#画主成分分析图需要加载这两个包
library(factoextra)
x1 <- PCA(x, graph = FALSE)
pca_x <- fviz_pca_ind(x1,geom.ind = "point",addEllipses = TRUE)
b1 <- PCA(b, graph = FALSE)
pca_b <- fviz_pca_ind(b1,geom.ind = "point",addEllipses = TRUE)
pca_x + pca_b
可以看到,使用zscore前后的矩阵去做pca,得到的结果并没有差异哦!
以相关性为基础的一系列分析(如WGCNA),R提供了cov()
和cor()
函数分别用于计算协方差和相关系数:
x <- matrix(runif(150, 5.0, 7.5),ncol = 15)
b <- scale(x)
colnames(x) <- c(paste("A",1:15))
colnames(b) <- c(paste("B",1:15))
#协方差
par(mfrow = c(2,2))
boxplot(cov(x))
boxplot(cov(b))
#相关性
boxplot(cor(x))
boxplot(cor(b))
可以看到,也是没有差异的!
那么,灵魂拷问来了,如果你的芯片或者转录组测序表达量矩阵被Z-score了,那么会影响你进行差异基因的选择吗?
文末友情推荐
与十万人一起学生信,你值得拥有下面的学习班: