比较两个向量的分布

时间:2015-03-16 16:54:26

标签: r testing vector histogram similarity

我有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 ..任何想法如何做到(视觉上除外)?

1 个答案:

答案 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)