在 R 中数据框中的列子集上拟合模型

Fit model on a subset of columns in dataframe in R

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

的事情

lm(组~协变量,数据=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 公式期望那里作为列的子集。感谢任何帮助。

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

替换group ~ covars

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

我在你的另一个问题中提到了这一点,但是 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 的用法。