我想列出匹配的数据集(使用MatchIt Package对其倾向得分进行匹配,以便在Zelig Package中进行后续建模。
在此示例中,我将匹配两个处理(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"
我错过了什么?如何让Zelig处理此列表中的单独项目?
答案 0 :(得分:2)
zelig
中似乎有一些奇怪的东西,它们按名称查找data
的值。看起来你将不得不做一个明确的循环:
list.mods <- list()
for(i in seq_along(list.dfs)) {
list.mods[[i]] <- zelig(y1 ~ x1 + x2, model = "logit", data = match.data(list.dfs[[i]]))
}
list.mods