Z-score并不会影响很多统计学算法的结果

统计学

先了解什么是z-score

Z值(z-score)又称标准数,能够将不同量级的数据转化为相同量级,实现标准化。

其公式表示为:
$$
z = \frac{(x-μ)}{σ}
$$
其中:x为实际测量值,μ为平均数,σ为标准差。

Z-score后的值本身没有实际意义,仅使数据标准统一化。实测值>平均值,则z为正值,实测值<平均值,则z为负值。

在R中实现计算z-score

R语言中默认利用函数scale实现 z-score 的变换,scale函数共有两个参数centerscale,并且两个参数均默认为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了,那么会影响你进行差异基因的选择吗?

Comments are closed.