R中字符向量之间的不相似度(距离)的度量

时间:2014-02-12 00:20:54

标签: r vector

我有一个看似简单的问题,但这让我感到不安。

我有一对由名义属性组成的向量。它们可以具有不同的长度,有时一个中的某些属性可能不包含在另一个中。请参阅ab两个可能的示例。

               a
1  mathematician
2       engineer
3  mathematician
4  mathematician
5  mathematician
6       engineer
7  mathematician
8  mathematician
9  mathematician
10 mathematician
11 mathematician
12      engineer
13 mathematician
14 mathematician
15      engineer

               b
1      physicist
2        surgeon
3      physicist
4        surgeon
5      physicist
6      physicist
7        surgeon
8        surgeon
9      physicist
10     physicist
11 mathematician

您是否考虑过可以总结它们之间差异的指标(指数)?我正在寻找的衡量方法类似于Euclidean distance,但对于定性向量。

我想到的一个选项是实际计算先前转换为频率向量的分类向量之间的欧几里德距离。通过这种方式,它们将变得具有定量并具有相同的长度。但我的问题是,你认为这是一个合理的方法吗?

更一般地说,是否有一个解决这些类型距离的R包?你能否建议其他适合名义变量的距离?

非常感谢!

3 个答案:

答案 0 :(得分:3)

我只遇到了不相称系数。

http://www.amstat.org/publications/jse/v15n2/kader.html

奇怪的名称,直观的方法和非常简单的实现。例如:

> table(a)
a
     engineer mathematician 
            4            11 

> unalike(table(a))
[1] 0.391


> table(b)
b
mathematician     physicist       surgeon 
            1             6             4 
> unalike(table(b))
[1] 0.562

很明显只是通过引人注目b会更加不同,而且这个系数会给出一个更加量化的衡量标准。

本文中有一些例子我会在这里为您计算:

> unalike(3,7)
[1] 0.42
> unalike(5,5)
[1] 0.5
> unalike(1,9)
[1] 0.18

此功能中的公式基于我将您链接到上面的论文:

unalike <- function(...) {

  props <- c(...)
  zzz <- 1 - sum(((props) / sum(props)) ** 2)
  zzz <- round(zzz, 3)

  return(zzz)
}

让我知道你的事情是怎么回事,因为这对我来说也是一个小小的项目。

答案 1 :(得分:0)

我不确定这是一个编程问题,因为你还不知道你想做什么,所以我们无法提供解决方案。我认为这里的主要问题是你将使用这个衡量标准,因为你可以用很多不同的方式衡量不同之处,有些会对你想要的东西有好处,有些则不会。

但是无论如何都试着回答,有utils::adist函数,还有一个名为stringdist的包(这些是我之前使用过的)。但根据你的问题,似乎它们并不是你想要的,因为它们将测量每个字符串的距离,而不是整个矩阵。但是你可以使用它们来了解如何测量两个向量之间的距离。例如,一个度量可能是您需要在向量a中进行多少更改,因此它将转向向量b。

答案 2 :(得分:0)

感谢您保持开放。

一个选项,在讨论之后似乎已经可用,是R的qualvar(Gombin)包。该软件包为Wilcox(1967,1973)的定性变异指数提供了功能。包中包含一个有用的小插图,总结了实现和结果。我发现在有限的经验中,索引选择需要对实际和模拟数据进行一些暴力测试。