R中距离矩阵的概率权重

问题描述 投票:0回答:1

我正尝试使用概率权重来计算所有名义变量的距离矩阵,如Anderberg(1973:124-5)所建议。 Anderberg(1973:124)认为,“尽管没有提供系统的方法来分配这样的权重,但在生物学文献中却经常出现给稀有类额外权重的愿望。 [...]由于稀有事件的概率较低,因此事件的概率不是适当的权重;但是,概率的任何反函数都可能很有趣。'

我将尝试使用R中的简单数据集来说明这种情况。

var_1 <- c('A', 'A', 'B', 'A')
var_2 <- c('C', 'C', 'D', 'E')
var_3 <- c('G', 'G', 'G', 'F')
print(test.df <- data.frame(var_1, var_2, var_3))

这将产生以下数据帧

  var_1 var_2 var_3
1     A     C     G
2     A     C     G
3     B     D     G
4     A     E     F

我们可以使用高尔系数如下计算距离矩阵。

library(cluster)
test.dist <- daisy(test.df, metric="gower")
round(test.dist,2)

这将产生以下矩阵。

     1    2    3
2 0.00          
3 0.67 0.67     
4 0.67 0.67 1.00

例如,我们可以看到,观察值1和2在三个变量方面是相同的,因此距离为0。观察值1和3并不相同;它们在三个变量(var_1var_2)中的两个变量上有所不同,导致距离为2/3 = 0.67。

现在我的问题是以下。在数据框中,我们可以看到G中的var_3值占数据的75%。我想使用此信息来调整此变量对相似性的贡献。换句话说,由于var_3中G的概率比F的概率高三倍,因此应认为此变量中包含F的两个观测值(行)比包含值G的两个观测值更相似]。

只是提供一些背景信息:我的真实数据集中的某些变量具有高度偏斜的分布,其中一个值占该变量所有观测值的80%,剩下的20%分布在其他三个值上。

(我知道我可以使用weights参数将权重添加到菊花函数中,但是这些权重并不取决于要素值的分布,而是,这些权重对于变量中的所有值都是恒定的。 )

r matrix distance weighted
1个回答
0
投票

Anderberg的建议未得到实施的原因可能表明这样做有多困难。第一个问题是决定如何设置权重。您可以根据类别的相对频率来确定它们,但是随着样本的不同而变化,因此您将为不同的样本设置不同的权重。其次,Gower度量已经在处理多种数据类型,因此您将使其更加复杂,但是Gower是唯一尝试组合不同数据类型的距离度量。该实现确实在cluster程序包中具有一个功能,该功能可能与您想要的足够接近。 Gower的其他实现可能具有更多功能(搜索行距r以获取实现行距的其他软件包)。在daisy中,有两种处理二进制数据的方法:对称和不对称。区别在于,“ 0-0”以对称(也就是简单匹配系数)计数,而不是以非对称(也就是Jaccard)计数。使用非对称可以接近所需的值,但是必须将因子变量转换为二进制。雏菊函数实际上对分类变量执行此操作,但不允许您为尚未为二进制的变量指定非对称变量。

A <- ifelse(test.df$var_1 == "A", 1, 0)
B <- ifelse(test.df$var_1 == "B", 1, 0)
C <- ifelse(test.df$var_2 == "C", 1, 0)
D <- ifelse(test.df$var_2 == "D", 1, 0)
E <- ifelse(test.df$var_2 == "E", 1, 0)
E <- ifelse(test.df$var_2 == "E", 1, 0)
F <- ifelse(test.df$var_3 == "F", 1, 0)
G <- ifelse(test.df$var_3 == "G", 1, 0)
dta <- cbind(A, B, C, D, E, F, G)

如果要使用此过程,有多种方法可以使其自动化,但这是概念证明的答案。您的示例数据集太小,无法显示两种方法之间的差异,但是如果您增加示例数据中的样本量,则应该看到差异。

daisy(dta, metric="gower")    # symmetric
daisy(dta, metric="gower", type=list(assymm=1:7))

当然,您可以始终编写包含自定义加权系统的自己的Gower距离版本。 R中提供了一些通用的距离函数,您可以编写自己的函数来计算两行之间的距离,并使用它们来计算完整的距离矩阵。

© www.soinside.com 2019 - 2024. All rights reserved.