5

编辑:我认为,从我在下面与@joran 的讨论中,@joran 帮助我弄清楚了如何 dist改变距离值(它似乎是通过值 [总尺寸]/[非-缺少尺寸],但这只是一个猜测)。如果有人知道的话,我想知道的是:真的是这样吗?如果是这样,为什么这被认为是合理的做法?可以在那里,或者是否应该有选项来dist按照我提议的方式计算它(不过,这个问题可能是含糊的或固执己见的)。

我想知道该dist函数实际上如何处理具有缺失值的向量。下面是一个重新创建的示例。我使用这个dist函数和一个更基本的实现,我认为应该是欧几里得距离的定义,包括 sqrt、sum 和 powers。我还预计,如果任一向量的一个分量是NA,那么该维度将被排除在总和之外,这就是我实现它的方式。但是您可以看到该定义与dist.

我将使用我的基本实现来处理这些NA值,但我想知道dist当向量有 时实际上是如何得出一个值的NA,以及为什么它与我在下面的计算方式不一致。我认为我的基本实现应该是默认/通用的,我无法弄清楚使用什么替代方法dist来获得它所得到的。

谢谢,马特

v1 <- c(1,1,1)
v2 <- c(1,2,3)
v3 <- c(1,NA,3)

# Agree on vectors with non-missing components
# --------------------------------------------
dist(rbind(v1, v2))
#          v1
# v2 2.236068

sqrt(sum((v1 - v2)^2, na.rm=TRUE))
# [1] 2.236068



# But they don't agree when there is a missing component
# Under what logic does sqrt(6) make sense as the answer for dist?
# --------------------------------------------
dist(rbind(v1, v3))
#         v1
# v3 2.44949

sqrt(sum((v1 - v3)^2, na.rm=TRUE))
# [1] 2
4

1 回答 1

9

是的,缩放的发生与您描述的完全一样。也许这是一个更好的例子:

set.seed(123)
v1 <- sample(c(1:3, NA), 100, TRUE)
v2 <- sample(c(1:3, NA), 100, TRUE)

dist(rbind(v1, v2))
#          v1
# v2 12.24745

na.idx <- is.na(v1) | is.na(v2) 
v1a  <- v1[!na.idx]
v2a  <- v2[!na.idx]

sqrt(sum((v1a - v2a)^2) * length(v1) / length(v1a))
# [1] 12.24745

缩放对我来说很有意义。在所有条件相同的情况下,距离会随着维度数量的增加而增加。如果某个地方有一个NAfor 维度,那么对维度对平方和i的贡献的合理猜测是所有其他维度的平均贡献。i因此线性放大。

虽然您建议当您找到一个NAfor 维度i时,该维度不应该对平方和有贡献。这就像假设v1[i] == v2[i]完全不同。

总而言之dist,是在进行某种类型的最大似然估计,而您的建议更像是最坏(或最好)的情况。

于 2013-08-08T04:08:45.393 回答