我正在尝试理解R提供的“scale”定义。我有一些数据(mydata),想要制作一个热力图,但是数据呈现出非常强的正偏态。我已经使用树形图创建了包括scale(mydata)和log(my data)的热力图,两者的树形图不同。为什么?对于我的数据列之间的关系,缩放数据和对数转换数据有什么不同?如果我想查看表示数据列之间关系的树状图,哪种方法更合适?
谢谢任何帮助!我已经阅读了定义,但它们让我感到困惑。
谢谢任何帮助!我已经阅读了定义,但它们让我感到困惑。
log
函数简单地对向量的每个元素取以 e
为底数的对数(默认情况下)。
scale
函数使用默认设置将计算整个向量的平均值和标准差,然后通过减去平均值并除以标准差来 "标准化" 每个元素。(如果使用 scale(x, scale=FALSE)
,它只会减去平均值但不会除以标准差。)
请注意,这将给出相同的值。
set.seed(1)
x <- runif(7)
# Manually scaling
(x - mean(x)) / sd(x)
scale(x)
X.man.scaled <- X/sqrt(sum(X^2)/(length(X)-1))
X.aut.scaled <- scale(X, center = F)
我想提供一个具体的例子来说明比例尺函数的实际应用。假设您有三个测试分数(数学、科学和英语)需要进行比较。也许您甚至希望为每个观测值生成基于这三个测试的综合分数。您的数据可能如下所示:
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)
scale
时,您并没有改变数据,而是改变了比例尺(绘图时的坐标轴值)。想象一下在两端抓住坐标轴并拉伸或压缩它,这就是比例尺。相反,log
实际上改变了数据。对于较大的值,log 的影响更强烈,对于较小的值,影响则更微弱。 - Ricardo Saporta