编辑:我想,从下面我和@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
Run Code Online (Sandbox Code Playgroud)
是的,缩放的发生与您描述的完全相同.也许这是一个更好的例子:
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
Run Code Online (Sandbox Code Playgroud)
缩放对我来说很有意义.在所有条件相同的情况下,距离随着尺寸数量的增加而增加.如果某个地方有一个NA维度i,那么维数i对平方和的贡献的合理猜测是所有其他维度的平均贡献.因此线性放大.
当你建议找到一个NAfor维度时i,该维度不应该对平方和有贡献.这就像假设v1[i] == v2[i]完全不同.
总结一下dist是做某种类型的最大似然估计,而你的建议更像是最差(或最好)的情况.