【问题标题】:Measures of dissimilarity (distance) between character vectors in RR中字符向量之间的差异(距离)的度量
【发布时间】:2016-11-17 23:17:22
【问题描述】:

我有一个看似简单的问题,但让我有点困扰。

我有几个由名义属性组成的向量。它们可以有不同的长度,有时一个中的某些属性可能不包含在另一个中。请参阅 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 包可以处理这些类型的距离?您能否建议其他适合名义变量情况的距离?

非常感谢!

【问题讨论】:

  • 也许您可以进一步详细说明:您打算如何处理该措施?您尝试过什么,为什么您尝试过的不满意?
  • @carloscinelli 谢谢你的回答。我尝试这样做的原因是我需要比较组的组成,同时考虑(如果需要,控制)组的大小。
  • tm::dissimilarity 有用吗?
  • @TylerRinker 非常有趣的包。

标签: r vector


【解决方案1】:

我只遇到了不受欢迎系数。

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)
}

让我知道你的事情进展如何,因为这对我来说也是一个小项目。

【讨论】:

  • 但这衡量的是一个向量的可变性,而不是两个向量之间的距离,不是吗?
  • 在这种情况下,kappa 统计量呢?您需要进行的唯一调整是考虑一个向量具有三个类别而另一个向量只有两个这一事实。例如,将向量视为来自两个不同评分者的 1-3 评分。一位评估者使用了所有三个级别,但另一位只使用了两个。
  • @rawr 对于它的简单性,我觉得很有趣。非常感谢您的建议!
【解决方案2】:

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

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

【讨论】:

  • 我从上面继续。你是对的,这不是一个严格的编程问题,它是通用的。我认为在这里问它很有用,因为由于有用于计算数字向量之间的距离的函数和包,因此可能还有一些用于名义属性的东西。但可能不会......无论如何感谢您的建议。
  • 是的,试着说得更具体一些,但同时把问题留在这里,也许有人会想出更好的答案。
【解决方案3】:

感谢您保持开放状态。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-07
    • 2013-10-03
    • 2015-10-12
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    相关资源
    最近更新 更多