2

我正在关注RPubs的优秀教程,它使用了宏伟的 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)

我认为这基本上是在创建一个整体协议权重,它是所有单个链接变量的产物。

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

例如,我可能知道“姓氏”字段在两个数据集中都是可靠且准确的,所以如果姓氏完全一致,那么在整体一致得分中给予更大的权重。

即使是一些关于在哪里寻找的指示也会有所帮助,我对此有点迷茫,甚至不知道在代码方面要尝试什么。

4

1 回答 1

1

您不能向 输入附加信息emWeights(),除了可能cutoff =,它接受单个值或长度与属性数相同的向量。所以你可以cutoff为你知道准确的属性选择一个高值,这样随机匹配的数量就会最小化。

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

然而,有一个epiWeights()挂件计算01使用估计的错误率(默认e= 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则权重较低。

于 2019-07-03T13:17:39.530 回答