比较两个向量的分布
Comparing distribution of two vectors
我有 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.. 有什么想法可以做到这一点(视觉上除外)?
我不清楚为什么您需要 统计 测试,如果您只想计算哪个最接近的话。下面我只是直接计算直方图并比较它们的距离。
生成数据:
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)
我有 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.. 有什么想法可以做到这一点(视觉上除外)?
我不清楚为什么您需要 统计 测试,如果您只想计算哪个最接近的话。下面我只是直接计算直方图并比较它们的距离。
生成数据:
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)