了解R中的`scale`

时间:2013-11-28 01:08:18

标签: r scale transformation heatmap

我正在尝试理解R提供的scale的定义。我有数据(mydata),我想制作热图,并且有一个非常强烈的正偏差。我为scale(mydata)log(my data)创建了一个带有树形图的热图,两者的树形图都不同。为什么?扩展我的数据意味着什么,而不是对数据进行日志转换?如果我想查看说明数据列之间关系的树形图,哪个更合适呢?

感谢您的帮助!我已经阅读了这些定义,但他们对我的看法很高兴。

4 个答案:

答案 0 :(得分:73)

log只取向量的每个元素的对数(默认为基数e)。
scale,使用默认设置,将计算整个矢量的均值和标准差,然后通过减去均值并除以sd,将这些值“缩放”每个元素。 (如果使用scale(x, scale=FALSE),它只会减去均值,但不会除以标准偏差。)

请注意,这将为您提供相同的值

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

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

   scale(x)

答案 1 :(得分:10)

它除了提供数据的标准化之外别无其他。它创建的值在几个不同的名称下是已知的,其中一个是 z-scores (“Z”,因为正态分布也称为“Z分布”)。

更多信息可以在这里找到:

http://en.wikipedia.org/wiki/Standard_score

答案 2 :(得分:3)

我想我将通过提供实际使用比例函数的具体示例来做出贡献。假设您要比较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”一书中借用了这个示例。这是一本很棒的书!肯定会推荐。

答案 3 :(得分:1)

这是一个较晚的补充,但是我自己正在寻找有关scale函数的信息,尽管它可能也会对其他人有所帮助。

稍微修改Ricardo Saporta的响应。
使用标准偏差进行缩放,至少不是在R 3.6.1版中,我基于“ Becker,R.(2018)。新的S语言。 CRC Press。”和我自己的实验。

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

这些行的结果完全相同,为简单起见,我没有居中显示它。

我会在评论中回复,但没有足够的声誉。