具有动态变量数的公式

具有动态变量数的公式

假设有一些data.frame foo_data_frame,并且想要找到某些其他列的目标列Y的回归。为此目的,通常使用一些公式和模型。例如:

linear_model <- lm(Y ~ FACTOR_NAME_1 + FACTOR_NAME_2, foo_data_frame)

如果公式是静态编码的话,这确实很有效。如果希望使用常数的因变量(例如2)对多个模型进行根处,则可以这样处理:

for (i in seq_len(factor_number)) {
  for (j in seq(i + 1, factor_number)) {
    linear_model <- lm(Y ~ F1 + F2, list(Y=foo_data_frame$Y,
                                         F1=foo_data_frame[[i]],
                                         F2=foo_data_frame[[j]]))
    # linear_model further analyzing...
  }}

我的问题是当程序运行期间变量的数量动态变化时,如何做同样的影响?

for (number_of_factors in seq_len(5)) {
   # Then root over subsets with #number_of_factors cardinality.
   for (factors_subset in all_subsets_with_fixed_cardinality) {
     # Here I want to fit model with factors from factors_subset.
     linear_model <- lm(Does R provide smth to write here?)
   }}


喵喵时光机
浏览 532回答 3
3回答

偶然的你

参见?as.formula,例如:factors <- c("factor1", "factor2")as.formula(paste("y~", paste(factors, collapse="+")))# y ~ factor1 + factor2其中factors是一个字符向量,其中包含要在模型中使用的因子的名称。这可以粘贴到lm模型中,例如:set.seed(0)y <- rnorm(100)factor1 <- rep(1:2, each=50)factor2 <- rep(3:4, 50)lm(as.formula(paste("y~", paste(factors, collapse="+"))))# Call:# lm(formula = as.formula(paste("y~", paste(factors, collapse = "+"))))# Coefficients:# (Intercept)&nbsp; &nbsp; &nbsp; factor1&nbsp; &nbsp; &nbsp; factor2&nbsp;&nbsp;#&nbsp; &nbsp; 0.542471&nbsp; &nbsp; -0.002525&nbsp; &nbsp; -0.147433

收到一只叮咚

一个经常被遗忘的功能是reformulate。来自?reformulate:reformulate&nbsp;从字符向量创建公式。一个简单的例子:listoffactors&nbsp;<-&nbsp;c("factor1","factor2")reformulate(termlabels&nbsp;=&nbsp;listoffactors,&nbsp;response&nbsp;=&nbsp;'y')将产生这个公式:y ~ factor1 + factor2虽然没有明确记录,但您也可以添加交互术语:listofintfactors&nbsp;<-&nbsp;c("(factor3","factor4)^2")reformulate(termlabels&nbsp;=&nbsp;c(listoffactors,&nbsp;listofintfactors),&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;response&nbsp;=&nbsp;'y')会产生:y ~ factor1 + factor2 + (factor3 + factor4)^2

RISEBY

另一种选择可能是在公式中使用矩阵:Y&nbsp;=&nbsp;rnorm(10)foo&nbsp;=&nbsp;matrix(rnorm(100),10,10)factors=c(1,5,8)lm(Y&nbsp;~&nbsp;foo[,factors])
打开App,查看更多内容
随时随地看视频慕课网APP