了解R中的`scale`

Jen*_*Jen 53 r transformation scale heatmap

我试图理解scaleR提供的定义.我有数据(mydata),我想制作热图,并有一个非常强烈的积极倾斜.我已经创建了两个树形图热图scale(mydata)log(my data)和树状图是两种不同的.为什么?扩展我的数据意味着什么,而不是对数据进行日志转换?如果我想查看说明数据列之间关系的树形图,哪个更合适?

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

Ric*_*rta 79

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

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

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

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

   scale(x)
Run Code Online (Sandbox Code Playgroud)

  • 当你有不同尺度的多个变量时,`scale`会更有意义.例如,一个var的数量级为100,而另一个的数量级为1000000 (19认同)
  • @Jen:另一种(非常失败)的思考方式:当使用`scale`时,你不是在改变数据,而是改变比例(绘制时的轴值).考虑抓住两端的轴并拉伸或压缩它.那就是规模.相比之下,`log`实际上改变了数据.对于较大的值,log的影响"更强",对于较小的值,log的影响较小. (14认同)
  • 谢谢你的回答!但是 scale() 的意义是什么?我使用它的理由是什么(它使数据看起来更好,等等)。我只是想了解 scale() 的“点”。谢谢! (3认同)

von*_*njd 13

它除了提供数据标准化之外别无其他.它创建的值在几个不同的名称下是已知的,其中一个是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)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 来自_scale_的文档:“scale的值决定了如何执行列缩放(居中后)。如果scale是一个类似数字的向量,其长度等于x的列数,则x的每一列除以来自比例的相应值。如果比例为 TRUE,则通过将 x 的(居中)列除以其标准差(如果中心为 TRUE,则除以均方根)来完成比例缩放。如果比例为 FALSE,则不进行比例缩放。这意味着您的公式是正确的_因为_您没有首先居中 (2认同)

jcl*_*to8 6

我想我会通过提供比例函数实际使用的具体示例来做出贡献。假设您想要比较 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)
Run Code Online (Sandbox Code Playgroud)

显然,比较这 3 个分数的平均值是没有意义的,因为分数的范围差异很大。然而,通过缩放它们,您可以获得更多可比较的评分单位:

z <- scale(df[,2:4],center=TRUE,scale=TRUE)
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用这些缩放结果来创建综合分数。例如,对值进行平均并根据该平均值的百分位数指定等级。希望这有帮助!

注:这个例子是我从《R In Action》一书中借来的。这是一本很棒的书!肯定会推荐。