理解 R 中的“标度”

我试图理解 R 提供的 scale的定义。我有数据(mydata) ,我想做一个热图,并有一个非常强烈的正偏差。我已经为 scale(mydata)log(my data)创建了一个带有树状图的热图,两者的树状图是不同的。为什么?与日志转换数据相比,缩放数据意味着什么?如果我想查看说明数据列之间关系的树状图,那么哪个更合适呢?

谢谢你的帮助! 我已经读了定义,但它们让我头疼。

196181 次浏览

log只取向量中每个元素的对数(默认为以 e为基数)。
采用预设设定的 scale会计算整个向量的平均数和标准差,然后以减去平均数和除以 sd 的方法,将每个元素按这些值“缩放”。(如果使用 scale(x, scale=FALSE),它只会减去平均值,而不会除以标准差。)

注意,这将给出相同的值

   set.seed(1)
x <- runif(7)


# Manually scaling
(x - mean(x)) / sd(x)


scale(x)

它只提供数据的 标准化。它创建的值有几个不同的名称,其中之一是 Z 分(“ Z”,因为正态分布也称为“ Z 分布”)。

点击这里查看更多信息:

Http://en.wikipedia.org/wiki/standard_score

这是一个后期添加,但我正在寻找有关规模函数自己的信息,虽然它可能会帮助别人以及。

稍微修改 Ricardo Saporta的响应。
缩放是使用标准差完成的,至少在 R 的3.6.1版本中没有,我基于“ Becker,r。(2018)。出版社还有我自己的实验。

X.man.scaled <- X/sqrt(sum(X^2)/(length(X)-1))
X.aut.scaled <- scale(X, center = F)

这些行的结果完全相同,因为简单,所以我不用居中显示。

我会回应一个评论,但没有足够的声誉。

我想我可以通过提供一个具体的例子来说明比例函数的实际应用。假设你有3个考试成绩(数学、科学和英语)要比较。也许你甚至想根据每个观察的3个测试中的每一个产生一个综合分数。你的数据可能是这样的:

student_id <- seq(1,10)
math <- c(502,600,412,358,495,512,410,625,573,522)
science <- c(95,99,80,82,75,85,80,95,89,86)
english <- c(25,22,18,15,20,28,15,30,27,18)
df <- data.frame(student_id,math,science,english)

显然,比较这3个分数的平均值是没有意义的,因为分数的大小有很大的不同。然而,通过缩放它们,你可以得到更具可比性的评分单位:

z <- scale(df[,2:4],center=TRUE,scale=TRUE)

然后您可以使用这些按比例缩放的结果来创建一个合成分数。例如,对这些值进行平均,并根据这个平均值的百分位数给出一个等级。希望这个有用!

注意: 我从《 R In Action 》一书中借用了这个例子。这是一本很棒的书! 绝对值得推荐。