【问题标题】:Getting Zelig to work with lists让 Zelig 使用列表
【发布时间】:2014-04-24 21:08:52
【问题描述】:

我想在Zelig Package 中获取匹配数据集的列表(使用MatchIt 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 处理此列表中的单独项目?

【问题讨论】:

    标签: r plyr r-zelig


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多