在R中理解“scale”的含义

80
我正在尝试理解R提供的“scale”定义。我有一些数据(mydata),想要制作一个热力图,但是数据呈现出非常强的正偏态。我已经使用树形图创建了包括scale(mydata)和log(my data)的热力图,两者的树形图不同。为什么?对于我的数据列之间的关系,缩放数据和对数转换数据有什么不同?如果我想查看表示数据列之间关系的树状图,哪种方法更合适?
谢谢任何帮助!我已经阅读了定义,但它们让我感到困惑。
4个回答

114

log函数简单地对向量的每个元素取以 e 为底数的对数(默认情况下)。
scale 函数使用默认设置将计算整个向量的平均值和标准差,然后通过减去平均值并除以标准差来 "标准化" 每个元素。(如果使用 scale(x, scale=FALSE),它只会减去平均值但不会除以标准差。)

请注意,这将给出相同的值。

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

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

   scale(x)

3
谢谢你的提问!但是,scale()函数有什么意义?为什么要使用它(例如让数据看起来更好)?我只是想理解使用scale()函数的“点”所在。谢谢! - Jen
27
当您考虑不同规模的多个变量时,“比例尺”会更有意义。例如,一个变量的数量级为100,而另一个变量的数量级为1000000。 - Ricardo Saporta
23
另外一种(非常简略的)思考方式:使用 scale 时,您并没有改变数据,而是改变了比例尺(绘图时的坐标轴值)。想象一下在两端抓住坐标轴并拉伸或压缩它,这就是比例尺。相反,log 实际上改变了数据。对于较大的值,log 的影响更强烈,对于较小的值,影响则更微弱。 - Ricardo Saporta
@Ricardo Saporta,哦,好的,谢谢,这很有道理!特别是考虑到具有不同比例的多个变量的想法,这对我来说很重要!非常感谢! - Jen
1
@RicardoSaporta 这些公式不一样!我刚刚检查了它们。 - sherek_66

24
它提供的仅仅是数据的标准化。它生成的值被称为多个不同的名称之一,其中之一是Z分数(“Z”代表正态分布也被称为“Z分布”)。 更多信息可在此处找到: http://en.wikipedia.org/wiki/Standard_score

8
这是一个后来添加的内容,但我自己也在寻找有关缩放函数的信息,希望能够帮助其他人。
为了稍微修改Ricardo Saporta的回答。
至少在 R 3.6.1 版本中,缩放不是使用标准差进行的。我基于 "Becker, R. (2018). The new S language. CRC Press." 和我的实验得出此结论。
X.man.scaled <- X/sqrt(sum(X^2)/(length(X)-1))
X.aut.scaled <- scale(X, center = F)

这些行的结果完全相同,出于简单起见,我没有居中显示它们。 我想在评论中回复,但是声望不够。

6
根据_scale_的文档,“scale”的值决定如何执行列缩放(在居中之后)。如果“scale”是一个数值向量,其长度等于x的列数,则x的每一列将被相应的“scale”值除以。如果“scale”为TRUE,则如果center为TRUE,则对x的(已居中)列进行标准差缩放,否则进行均方根缩放。如果“scale”为FALSE,则不进行缩放。这意味着你的公式是正确的,因为你没有先进行居中操作。 - digestivee

6

我想提供一个具体的例子来说明比例尺函数的实际应用。假设您有三个测试分数(数学、科学和英语)需要进行比较。也许您甚至希望为每个观测值生成基于这三个测试的综合分数。您的数据可能如下所示:

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》中借用了这个例子。这是一本很棒的书!我一定会推荐的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接