【发布时间】:2020-04-30 07:02:00
【问题描述】:
我正在尝试按照 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_1 和 var_2)上有所不同,导致距离为 2/3=0.67。
现在我的问题如下。在数据框中,我们可以看到 var_3 中的值 G 占数据的 75%。我想使用此信息来调整此变量对相似性的贡献。换句话说,因为 var_3 中G 的概率是F 概率的三倍,所以在这个变量中包含F 的两个观测值(行)应该被认为比包含值@987654332 的两个观测值更相似@。
只是为了提供一些背景信息:我的真实数据集中的一些变量具有高度倾斜的分布,其中一个值占该变量所有观察值的 80%,剩下的 20% 分布在其他三个值上。
(我知道我可以使用weights 参数向菊花函数添加权重,但这些权重不依赖于特征值的分布,相反,这些权重对于变量中的所有值都是恒定的.)
【问题讨论】:
-
您的示例不可重现。您没有提供
test_corpus并且 R 基函数dist没有metric=参数或weights=参数。你指的是包cluster中的daisy函数吗? -
对不起,你是对的。
test_corpus应该是test.df。我现在已经改变了。由于weights参数,我已将dist函数更改为daisy。我已经测试了代码,现在应该可以重现了。
标签: r matrix distance weighted