Пакет RecordLinkage в R - добавляет вес отдельным переменным связывания - PullRequest
1 голос
/ 19 марта 2019

Я следую прекрасному учебнику по 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))

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

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

b <- emWeights(a, cutoff = 0.8)

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

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

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

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

1 Ответ

0 голосов
/ 03 июля 2019

Вы не можете ввести дополнительную информацию в 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, оно получит меньшие веса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...