R中的RecordLinkage软件包-为单个链接变量增加权重

时间:2019-03-19 16:32:59

标签: r linkage record-linkage

我正在关注有关RPubs(http://rpubs.com/ahmademad/RecordLinkage)的出色教程,该教程使用了宏伟的RecordLinkage软件包。我将其应用到我自己的数据中,但是我只会使用本教程来解释我的问题。

在两个要比较的数据集中,链接中使用了许多公共字段:

patents <- patents[,c("seq", "firstname", "lastname", "city", "state", "organization")]

nsf <- nsf[, c("InvestigatorId", "FirstName", "LastName", "CityName", "StateCode", "Name")]

names(nsf) <- names(patents) 

然后使用compare.linkage()函数比较这些字段:

a <- compare.linkage(nsf, patents, blockfld = c("state"), strcmp = T, exclude=c(1))

这将创建一个名为'a'的大型RecLinkData对象,其中包含一堆比较对。

下一步是使用期望最大化(EM)算法计算M和U权重(协议权重):

b <- emWeights(a, cutoff = 0.8)

我认为这基本上是在建立总体协议权重,该权重是所有单独链接变量的乘积。

我的问题是如何增加单个链接变量之一的重要性?

因此,例如,我可能知道“姓氏”字段在两个数据集中都是可靠且准确的,因此,如果姓氏完全同意,则可以在总体同意评分中给予更大的重视。

哪怕是一些指向何处的指针也会有所帮助,对此我有些迷失,甚至不知道尝试使用什么代码。

1 个答案:

答案 0 :(得分:0)

除了emWeights()以外,您无法向cutoff =输入其他信息,该信息可以接受单个值或长度与属性数相同的向量。因此,您可以为已知准确的属性选择较高的cutoff值,这样可以减少随机匹配的次数。

除此之外,RecordLinkage中的EM算法不允许进一步的自定义。

但是有一个epiWeights()吊坠,它使用估计的错误率(默认为0)和每个字段中值的平均频率来计算1e= 0.01之间的权重(1/length(unique(all_values_in_a_field))。您既可以手动提供功能,也可以通过这种方式调整结果。

考虑以下示例:

t1 <- data.frame(Vorname = c("Karl", "Fritz"), Name = c("Meister", "Schulz"), stringsAsFactors = F)

t2 <- data.frame(Vorname = c("Karl", "Fritz"), Name = c("Meister", "Schulze"), stringsAsFactors = F)

> epiWeights(linkage)$Wdata  # e = 0.01
[1] 1.0000000 0.0000000 0.0000000 0.3855691

> epiWeights(linkage, e = c(0.01, 0.3)$Wdata  
[1] 1.0000000 0.0000000 0.0000000 0.3120078

如果假设字段Nachname的错误率较高,则权重较低。