R - 使用仅适用于特定列

问题描述 投票:0回答:2

我在R中使用一个适合特定形式的回归模型的包。但是,与允许x和y为单独对象的基本lm()函数不同,我正在使用的函数要求它们位于同一数据帧中。

我的问题出现了,因为我有很多变量,我想独立回归。因此,我有一个包含10个预测变量(x1,x2 ... x10)和一个标准变量(y)的数据帧,总共11列。我可以使用for循环来运行十个单独的回归,但我想避免它并使用apply函数。但是,如果我在我的数据框架上调用apply,那么在最后一步中它将对y本身进行回归,我想避免这种情况。是否有类似于apply的功能,我可以运行并指定thiat我只希望它运行10次而不是11次,或者是否有另一种解决方法来解决这个问题?

r apply
2个回答
2
投票

这是一个tidyverse解决方案:

library( tidyverse )

xx <- c("disp", "hp", "drat", "wt")   # Names of predictor variables
y <- "mpg"                            # Name of response

str_c( y, xx, sep="~" ) %>%
  map( as.formula ) %>%               # Optional (see below)
  map( lm, data = mtcars )

str_c只是将公式构建为字符串(例如,"mpg~disp")。虽然lm直接接受字符串,但您的特定回归模型可能不会。如果它需要一个实际的公式,你可以使用as.formula将字符串转换为公式(感谢您的建议,@ J.Doe!)。除此之外,只需将lm替换为您的特定型号和mtcars与您的数据框。


这是使用基本R而没有任何其他包的相同解决方案:

strs <- paste( y, xx, sep="~" )
strs <- lapply( strs, as.formula )    # Optional
lapply( strs, lm, data=mtcars )

0
投票

使用具有列anscombex1x2x3x4y1y2y3的内置y4数据框,假设我们想要分别对y1x1x2x3中的x4进行回归。

首先创建一个自变量名称xnames的字符向量,并使用lapply在其上运行指示的run_lm。该函数将所需的公式粘贴在一起,并执行返回lm类对象的"lm"L,结果,是这些对象的列表,每个回归一个。

没有使用包裹。

xnames <- names(anscombe)[1:4]
run_lm <- function(nm) lm(paste("y1 ~", nm), anscombe)
L <- lapply(xnames, run_lm)

或者,这个较短版本的run_lm也适用于上面的lapply,但Call:输出线不是很好:

run_lm <- function(nm) lm(anscombe[c("y1", nm)])
© www.soinside.com 2019 - 2024. All rights reserved.