如何在R包RecordLinkage中使用compare.linkage - 意外输出

时间:2016-01-28 15:13:26

标签: r

我在R包RecordLinkage中使用compare.linkage函数, 得到一个结果,我知道是错的,所以我知道我误解了一些东西。 我正在使用R 3.2.3 for x64 Windows。我对Stata非常熟悉,但与R不太熟悉。我只是在r-help上交叉发布。

我可以从阻塞字段创建记录对,但所有对都是未知状态(NA)。我无法创建匹配或不匹配。我想要一个简单的工作示例,说明如何使用RecordLinkage包链接数据集。看来手册和R Journal Vol。 2/2仅显示如何使用compare.dedup函数对单个数据集进行重复数据删除,而不是如何使用compare.linkage函数将两个数据集链接在一起。我可以在R Journal文章中重现这些例子,所以我的R安装没问题。

手册中的示例数据集对7个变量有500和10000个观测值,但1个观测值和2个变量足以显示问题。 我的第一个比较模式就像这样:

  id1  id2 fname_c1 bm is_match
1  17  343        1  1       NA

相反,我希望并期望一个看起来像这样的比较模式:

  id1  id2 fname_c1 bm is_match
1  17  343        1  1       1

对于名字的第一个组件,我的阻塞变量是fname_c1。我的匹配变量是出生月份的bm。我的理解是,我的示例输出中的第1行是fname_c1在基础数据集中匹配的第一行。我希望并且当两个链接数据集中的匹配变量bm = 1时,我希望is_match为1,如示例所示。

有关详细信息,这是我键入的内容和R输出:

> library(RecordLinkage)
> data(RLdata500)
> data(RLdata10000)
> RLdata500[17, ]
    fname_c1 fname_c2 lname_c1 lname_c2   by bm bd
17 ALEXANDER     <NA>  MUELLER     <NA> 1974  9  9
> RLdata10000[343, ]
     fname_c1 fname_c2 lname_c1 lname_c2   by bm bd
343 ALEXANDER     <NA>  BAUMANN     <NA> 1957  9  7
> rpairs <- compare.linkage(RLdata500,RLdata10000,blockfld=c(1),     exclude=c(2:5,7))
> rpairs$pairs[c(1:2), ] # Why is_match=NA? (should be 1)
  id1  id2 fname_c1 bm is_match
1  17  343        1  1       NA
2  17 2385        1  0       NA
> rpairs <- epiWeights(rpairs) # (Weight calculation)
> summary(rpairs) # (0 matches in Linkage Dataset)

Linkage Data Set

500 records in data set 1 
10000 records in data set 2 
47890 record pairs 

0 matches
0 non-matches
47890 pairs with unknown status


Weight distribution:
[omitted here to save space]

参考文献:

  1. 包'RecordLinkage'手册 (可在线获取PDF格式 https://cran.r-project.org/web/packages/RecordLinkage/RecordLinkage.pdf

  2. R Journal文章文章“RecordLinkage包:检测数据中的错误” (可在线获取PDF格式 https://journal.r-project.org/archive/2010-2/RJournal_2010-2_Sariyar+Borg.pdf

  3. 我在手册和R期刊文章中看到了关于真实匹配结果的身份参数的内容,但我想我只需要它作为参考(“黄金标准”)数据集。我的示例在两个基础数据集中都有一个非缺失值(bm = 1),因此这不是结果为NA的原因。我错过了什么?如何使用R中的compare.linkage链接两个简单的数据集?

    Anders Alexandersson

    andersalex@gmail.com

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,我有这个答案的可能解决方案这是由于identity参数。

从示例数据中,在Record Linkage包中,我发现此向量identity.RLdata500携带有关500条记录中RLdata500的重复记录的信息50条是重复记录

length(unique(identity.RLdata500))
[1] 450

我在我的数据集中找到了类似的列并存储为单独的向量,并将向量传递给身份参数

New_data_seq
118
118

New_data_seq <- R_New_data_zero$SEQ_NO 
abc <- compare.dedup (R_New_data_zero,identity = New_data_seq) 


    BICODE ALCODE IS_T OID conc
     I      A     1    99   IA1
     I      A     1    99   IA1
abc$pairs[1:1, ]

id1 id2 BICODE ALCODE IS_T OID conc is_match
 1   2   1        1    1    1    1       1