Пакет привязки записей в R — добавляет веса отдельным связующим переменным

#r #linkage #record-linkage

#r #привязка #привязка записи

Вопрос:

Я следую превосходному руководству по RPubs, в котором используется великолепный пакет привязки записей. Я применяю это к своим собственным данным, но я просто воспользуюсь руководством, чтобы объяснить свою проблему.

В двух наборах данных для сравнения есть ряд общих полей, используемых в привязке:

 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))
  

Это создает большой объект RecLinkData с именем ‘a’, который содержит множество пар сравнения.

Следующим шагом является вычисление весов M и U (весов согласования) с использованием алгоритма максимизации математического ожидания (EM):

 b <- emWeights(a, cutoff = 0.8)
  

Я думаю, что это в основном создает общий вес соглашения, который является произведением всех отдельных связующих переменных.

Мой вопрос в том, как я могу добавить важность для одной из отдельных связующих переменных?

Так, например, я мог бы знать, что поле «фамилия» является надежным и точным в обоих наборах данных, поэтому, если фамилия точно согласована, то для придания этому большего веса в общей оценке соответствия.

Даже некоторые указания на то, где искать, были бы полезны, я немного запутался в этом и даже не знаю, что предпринять с точки зрения кода.

Ответ №1:

Вы не можете вводить дополнительную информацию в emWeights() , за исключением, может быть, cutoff = , которая принимает единственное значение или вектор с той же длиной, что и количество атрибутов. Таким образом, вы можете выбрать высокое cutoff значение для атрибутов, которые, как вы знаете, являются точными, поэтому количество случайных совпадений будет сведено к минимуму.

Кроме этого, алгоритм EM в RecordLinkage не допускает дальнейшей настройки.

Однако существует epiWeights() кулон, который вычисляет веса между 0 и 1 , используя оценочную частоту ошибок (по умолчанию 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 , он получает меньшие веса.