【问题标题】:Fit model on a subset of columns in dataframe in R在 R 中数据框中的列子集上拟合模型
【发布时间】:2018-12-19 15:46:24
【问题描述】:

我正在尝试在协变量子集上使用 lm() 和 matchit()。我已经生成了任意数量的带有前缀“covar”的列,即“covar.1”、“covar.2”等。我想做类似

lm(group ~ covars, data=df)

其中 covars 是字符串向量 c("covar.1", "covar.2", ...)。

我尝试了几种方法,例如

  cols <- colnames(df)
  covars <- cols[grep("covar", colnames(df))]
  m.out <- matchit(group ~ covars, data=df, method="nearest", distance="logit", caliper=.20)

但是得到了variable lengths differ (found for 'covars')

仅使用 covars 和 group 定义一个新的数据框是可行的,但这违背了我使用 matchit 的目的,因为我希望匹配的数据也有其他列,而不仅仅是我选择匹配的 covars。

这似乎是一项容易的任务,但不知何故,经过一番谷歌搜索后我无法弄清楚。不确定作为列子集的 R 公式期望什么。任何帮助表示赞赏。

【问题讨论】:

    标签: r formula lm


    【解决方案1】:

    您可能想使用as.formula
    尝试这样做:

    替换group ~ covars

    as.formula(paste('group','~', paste(covars, collapse="+"))))

    【讨论】:

    • 感谢您的快速回答并告诉我formula 实际上是language 类型。像魅力一样工作。
    【解决方案2】:

    我在你的另一个问题中提到了这一点,但cobalt 包有一个专门用于此的功能,即f.build()f.build() 的第一个参数是一个字符串,其中包含处理变量的名称(或公式的左侧),第二个参数是一个字符串向量,其中包含要位于右侧的变量名称公式(即协变量)。第二个参数也可以是包含协变量的 data.frame; f.build() 只是提取名称。然后它执行所选答案中描述的操作,位添加了一些其他方面,使其更通用且对错误更稳健。

    cobalt 文档在f.build() 上有一个section,并将其与glm()matchit() 一起使用作为示例。

    运行matchit() 后,您可以使用cobalt 中的bal.tab() 函数评估协变量的平衡,该函数与MatchIt 兼容:

    bal.tab(m.out, un = TRUE)
    

    cobaltdocumentation 详细解释了它与MatchIt 的用法。

    【讨论】:

      猜你喜欢
      • 2017-01-07
      • 2014-11-10
      • 1970-01-01
      • 2019-07-14
      • 2019-03-22
      • 1970-01-01
      • 2021-12-16
      • 2016-11-04
      相关资源
      最近更新 更多