我在R中使用的软件包适合特定形式的回归模型。但是,与允许x和y是独立对象的基本lm()函数不同,我正在使用的函数要求它们在同一数据帧中。
出现我的问题是因为我有很多要独立回归y的变量。因此,我有一个数据框,其中包含10个预测变量(x1,x2 ... x10)和一个标准变量(y),总共11列。我可以使用for循环来运行十个单独的回归,但是我想避免使用它,而是使用apply函数。但是,如果我在数据框上调用apply,则在最后一步中它将对y本身进行y回归,因此我想避免这种情况。是否有类似应用程序的功能可以运行并指定我只希望它运行10次而不是11次,或者是否有其他解决此问题的方法?
答案 0 :(得分: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
替换为您的数据框。
以下是使用base R的相同解决方案,而没有任何其他软件包:
strs <- paste( y, xx, sep="~" )
strs <- lapply( strs, as.formula ) # Optional
lapply( strs, lm, data=mtcars )
答案 1 :(得分:0)
使用具有列
~# cgconfigparser -l /etc/cgconfig.conf
~# cgrulesengd
,cgroups
,anscombe
,x1
,x2
,x3
的内置x4
数据帧,y1
,y2
,假设我们要分别对y3
,y4
,y1
,x1
上的x2
进行回归。
首先创建一个包含自变量x3
名称的字符向量,并使用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