2

我想获取匹配数据集的列表(使用MatchIt Package将观察结果与他们的倾向得分进行匹配)用于Zelig Package中的后续建模。

在此示例中,我将在 (t1t2)、两个自变量 (x1x2) 和一个结果 ( 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 处理此列表中的单独项目?

4

1 回答 1

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
于 2014-04-24T21:42:22.657 回答