我有5个不同的向量,然后我想要比较它们的向量。我需要的是从5个不同的矢量中获取最相似的矢量。
向量很长,所以我只展示一点:
# Vector to compare to:
v1 <- c(0.2500, 0.4375, 0.1250, 0.3125, 0.0000, 0.5625, 0.1250, 0.1875, 0.1875, 0.1875, 0.1875)
# One of vectors to compare
v2 <- c(2, 1, 0, 1, 1, 1, 1, 0, 2, 1, 2)
# Another of vectors to compare:
v3 <- c(5, 0, 3, 1, 1, 2, 1, 2, 0, 1, 2)
实际上,我需要做的是进行统计测试,比较这些矢量给出的直方图的分布,并告诉哪个是最接近的。我试图使用ks.test
,但它在向量中有重复值的问题,返回的p值就像0.0000000000001 ..任何想法如何做到(视觉上除外)?
答案 0 :(得分:2)
我不清楚为什么你需要进行统计测试,如果你想做的就是计算哪一个最接近。下面我直接计算直方图并比较它们的距离。
生成数据:
v1 <- c(0.2500, 0.4375, 0.1250, 0.3125, 0.0000, 0.5625, 0.1250,
0.1875, 0.1875, 0.1875, 0.1875)
v2 <- c(2, 1, 0, 1, 1, 1, 1, 0, 2, 1, 2)*0.1
v3 <- c(5, 0, 3, 1, 1, 2, 1, 2, 0, 1, 2)*0.1
请注意,我稍微更改了向量2和3,因此它们的分布实际上会与比较向量重叠
vList <- list(v1,v2,v3)
brkvec <- seq(0,0.7,by=0.1)
hList <- lapply(vList,function(x)
hist(x,plot=FALSE, breaks=brkvec)$counts )
这有点效率低,因为它会计算成对距离的所有,然后把大部分距离抛出......
dmat <- dist(do.call(rbind,hList))
dvec <- as.matrix(dmat)[-1,1]
## 2 3
## 7.874008 6.000000
另一种选择是忽略来自ks.test()
的警告(因为它只会影响推理,而不会影响距离统计的计算)
ks.dist <- sapply(vList[-1],
function(x) suppressWarnings(ks.test(v1,x)$statistic))
ks.dist
## D D
## 0.6363636 0.4545455
结果匹配(即,v3比v2更接近v1)