在R中的lm函数中动态生成因子名称

在R中的lm函数中动态生成因子名称,r,lm,R,Lm,我这里有个问题 我们经常使用“正常”的lmfit: model <- lm(y~0+x1+x2+x3, data=d) 请注意,y2,y3。。。从列表中按顺序选择。实际上有一个函数 factorOfInterest <-getFactors(y) factorOfInterest说您的数据如下所示: set.seed(1) df1 <- data.frame(x1=rnorm(5), x2=rnorm(5),

我这里有个问题

我们经常使用“正常”的
lm
fit:

model <- lm(y~0+x1+x2+x3, data=d)
请注意,
y2
y3
。。。从列表中按顺序选择。实际上有一个函数

factorOfInterest <-getFactors(y)

factorOfInterest说您的数据如下所示:

set.seed(1)
df1 <- data.frame(x1=rnorm(5),
                  x2=rnorm(5),
                  x3=rnorm(5),
                  y1=rnorm(5),
                  y2=rnorm(5)
                  )

(我确信更大的集合可以使用更快的方法)…

使用
粘贴
as.formula
创建公式。请注意,如果RHS相等,则可以通过将模型作为矩阵传递给
lm
,一次为多个
yi
拟合模型。
set.seed(1)
df1 <- data.frame(x1=rnorm(5),
                  x2=rnorm(5),
                  x3=rnorm(5),
                  y1=rnorm(5),
                  y2=rnorm(5)
                  )
###  get columns named x
c1 <- colnames(df1)[grepl("x",colnames(df1))]
### make matrix of all combinations
library(combinat)
c2 <- combinat::hcube(rep(2, length(c1)))-1
###  remove top row (represents intercept-only model)
c2 <- c2[-1, ]
### list to store results
l1 <- as.list(vector(length=nrow(c2)))
### use matrix for y values when fitting models
lhs1 <- cbind(df1$y1, df1$y2)
for (i in 1:nrow(c2)){
### subset of x variables
    rhs1 <- c1[as.logical(c2[i, ])]
    rhs1 <- paste0(rhs1, collapse="+")
    f1 <- paste("lhs1", rhs1, sep="~")
    f1 <- as.formula(f1)
    l1[[i]] <- lm(f1)
}