我有一个数据框Data_Group_7_8,并希望基于因子分析进行线性回归。因素分析将col 1:4中的变量与MR1成对,col 16:20中的变量与MR2成对。我想将col 1:4设置为自变量,将16:20设置为因变量,并尝试以下代码:
mdl <- lm(select(1:4) ~ select(16:20), data=Data_Group_7_8)
summary(mdl)
不幸的是,这不起作用。但是以下内容可以:
df2 <- data.frame(x=Data_Group_7_8 %>% select(1:4),y=Data_Group_7_8 %>% select(16:20))
lrm <- lm(x.Themenwelt_1+ x.Themenwelt_2+ x.Themenwelt_3+ x.Product_demonstration ~ y.Inspired_by_1+ y.Inspired_by_2+ y.Inspired_by_3+ y.Inspired_by_4+ y.Inspired_by_5, data=df2)
summary(lrm)
是否有一种方法可以直接从原始Data_Group_7_8中选择变量(Themenwelt_1等)(就像我在代码1中所尝试的那样),而不是从新df中将它们全部加起来,因为我必须对此df做60种不同的分析。
R允许您使用as.formula(str)
从字符串构建公式。每一方都必须具有所考虑术语的总和,并且LHS和RHS必须与波浪号一起使用。您可以使用names()
获得各列的名称,然后只需将它们粘贴在一起即可,首先在等式的每一侧,用collapse = '+'
将字符向量折叠为单个字符串,然后将分开的两边组合在一起通过波浪号。这是内置mtcars数据集的示例:
regFormula <- function(dat,range1,range2){
dat %>%
select(range1) %>%
names() %>%
paste(collapse = ' + ') %>%
paste(dat %>%
select(range2) %>%
names() %>%
paste(collapse = ' + '),
sep = ' ~ ') %>%
as.formula()
}
regFormula(mtcars,1:3,4:5)
# mpg + cyl + disp ~ hp + drat
# <environment: 0x000000000cf55c90>
您可以直接将其用作线性模型中的公式。