2017-02-21 3 views
0

Я пытаюсь использовать пару функцию в R пакет optmatch на некотором образце данных:пакет Optmatch Сообщение об ошибке

> tmp 
    id dose  Pred 
1 1 2 0.08494142 
2 1 2 -0.02784262 
3 1 2 -0.05284574 
4 1 2 -0.07428686 
5 1 3 0.04335151 

, который может быть воссоздан с помощью этого кода:

tmp <- data.frame(id = rep(1,5), dose = c(rep(2,4),3), 
        Pred = c(0.08494142, -0.02784262, 
          -.05284574, -0.07428686, 
          0.04335151)) 

Когда я запускаю код:

pair(x = tmp$Pred, z = tmp$dose, data=tmp, remove.unmatchables = TRUE) 

я получаю следующее сообщение об ошибке:

Error in toZ(z) : Treatment indicator must have exactly 2 levels not 1 

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

Использование функции getAnywhere Я могу напечатать секцию функции ТОЗ (который вызывается парой), который предположительно генерирует ошибку:

> getAnywhere(toZ) 
[Lines omitted] 
function (x) 
{ 
[Lines of code omitted] 
if (length(unique(x)) != 2) { 
     stop(paste("Treatment indicator must have exactly 2 levels not", 
      length(unique(x)))) 
} 

Чтобы подтвердить свои подозрения, я бегу следующее:

> length(unique(tmp$dose)) 
[1] 2 

Убедитесь, что индикатор обращения действительно имеет ровно 2 уровней. Я очень озадачен. Любая помощь будет принята с благодарностью.

+0

Уверен, что ошибка исходит из 'remove.unmatchables = TRUE'. Ваш синглтон, наблюдение за лечением прекращается. – lmo

ответ

0

Это bug в optmatch. У нас есть исправление, которое будет в следующей выпущенной версии. На данный момент работа заключается в построении логической переменной из вашего числового индикатора обработки. Например.

tmp$dose2 <- tmp$dose == 3