Я хочу взять список сопоставленных наборов данных (где наблюдения сопоставляются по их оценкам склонности, используя MatchIt Package) для последующего моделирования в пакете Zelig.
В этом примере я буду сравнивать две процедуры (t1
и t2
), две независимые переменные (x1
и x2
) и результат (y1
).
library(Zelig)
library(MatchIt)
library(plyr)
d1 <- data.frame(y1 = rbinom(100, 1, .5),
x1 = runif(100),
x2 = runif(100),
t1 = rbinom(100, 1, .5),
t2 = rbinom(100, 1, .5))
Сначала я составлю список совпадающих фреймов данных:
list.dfs <- llply(c("t1", "t2"),
function(i)
matchit(as.formula(paste0(i, "~ x1 + x2")), data= d1))
Просто проверьте - каждый элемент list.dfs
имеет правильный класс:
class(list.dfs[[1]])
[1] "matchit"
Затем я хочу взять соответствующий элемент данных из этого списка и составить список объектов модели Zelig.
list.mods <- llply(list.dfs,
function(i)
zelig(y1 ~ x1 + x2, model = "logit", data = match.data(i)))
Что дает следующую ошибку:
Error in match.data(i) : object 'i' not found
Но это явно как-то связано со списком, поскольку все работает, если я выполняю ту же функцию для одного элемента list.dfs
:
class(zelig(y1 ~ x1 + x2, model = "logit", data = match.data(list.dfs[[1]])))
[1] "zelig" "logit"
Что мне не хватает? Как я могу заставить Зелига работать над отдельными пунктами в этом списке?