我正在使用内置的iris
数据集,我已经将数据简化为数字列,并创建了一个缩放数据集:
scaled <- scale(iris[1:4])
但是在尝试执行以下操作时我迷失了:
计算scaled
列之间的欧几里德距离
使用dist()
函数。证明这些欧几里德距离的平方与(1 - correlation)
s成正比。这里比例因子的价值是多少?
我尝试使用dist()
,但不要以为我得到了正确的输出:
dist(scaled)
这打印出一个巨大的输出,我不完全确定如何处理。我不知道如何处理这个问题。当它询问比例因子的价值时,我甚至不知道它意味着什么。我很确定它要我与之比较的相关性是
cor(scaled)
# Sepal.Length Sepal.Width Petal.Length Petal.Width
#Sepal.Length 1.0000000 -0.1175698 0.8717538 0.8179411
#Sepal.Width -0.1175698 1.0000000 -0.4284401 -0.3661259
#Petal.Length 0.8717538 -0.4284401 1.0000000 0.9628654
#Petal.Width 0.8179411 -0.3661259 0.9628654 1.0000000
但是如何比较dist()
的大量输出呢?
答案 0 :(得分:0)
这打印出一个巨大的输出,我不完全确定该怎么做。
您希望dist(t(scaled))
因为dist()
占用行之间的距离。考虑您的缩放数据集scaled
。列之间的欧几里德距离矩阵平方为:
## I have used `c()` outside to coerce it into a plain vector
d <- c(dist(t(scaled)) ^ 2)
# [1] 333.03580 38.21737 54.25354 425.67515 407.10553 11.06610
相关矩阵的下三角形是(我们想要下三角形,因为距离矩阵给出了下三角形部分):
corr <- cor(scaled)[lower.tri(diag(4))]
# [1] -0.1175698 0.8717538 0.8179411 -0.4284401 -0.3661259 0.9628654
然后,我们只是按照您的问题要求进行比较:
d / (1 - corr)
# [1] 298 298 298 298 298 298
iris
数据集有150行,您应该意识到298 = 2 * (150 - 1)
。
<强>更新强>