为100个要素编程线性回归R模型公式,使其与一个要素交互

z4iuyo4d  于 2023-02-06  发布在  其他
关注(0)|答案(3)|浏览(103)

我需要训练一个包含100个特征的回归模型。我想寻找所有100个特征与另一个特征之间的交互效应。我想找到一种编程方式来完成此操作,因为此分析将重复进行,我不想每次运行此分析时都重新编程一个新公式。我希望它是自动化的。那么我怎样才能得到这样的模型呢

Y~a*b + a*c + .... a*z

但是对于100个术语呢?我如何得到R公式来做到这一点呢?注意我将在Python中使用statmodels,但我认为语法是相同的。

yhuiod9q

yhuiod9q1#

lm(Y ~ a * ., df)

例如

lm(Sepal.Width ~ Sepal.Length * ., iris)

Call:
lm(formula = Sepal.Width ~ Sepal.Length * ., data = iris)

Coefficients:
                   (Intercept)                    Sepal.Length                    Petal.Length                     Petal.Width  
                      -0.91350                         0.82954                         0.29569                         0.85334  
             Speciesversicolor                Speciesvirginica       Sepal.Length:Petal.Length        Sepal.Length:Petal.Width  
                       0.05894                        -0.89244                        -0.05394                        -0.04654  
Sepal.Length:Speciesversicolor   Sepal.Length:Speciesvirginica  
                      -0.32823                        -0.21910
xlpyo6sf

xlpyo6sf2#

下面的示例说明了如何构造所需的字符串,然后将其转换为公式

paste("a", letters[2:26], sep = "*")  |>
    paste(collapse = " + ") |>
    sprintf(fmt = "Y ~ %s") |>
    as.formula()
    
##> Y ~ a * b + a * c + a * d + a * e + a * f + a * g + a * h + a * 
##>     i + a * j + a * k + a * l + a * m + a * n + a * o + a * p + 
##>     a * q + a * r + a * s + a * t + a * u + a * v + a * w + a * 
##>     x + a * y + a * z
iih3973s

iih3973s3#

解决方案使用正则表达式:

# this would be the columns of a dataframe
effects_list = ['regressor_col','A', 'B', 'C', 'D', 'E','F'] 
interaction = effects_list[3]
regressor = effects_list[0]
formula = regressor + ' ~'
for effect in effects_list:
    # check if it's the interaction term if it is skip it
    #print((effect != interaction) & (effect != regressor))
    if (effect != interaction) & (effect != regressor):
        formula = formula + ' + ' + effect + '*' + interaction
             
    

print(formula)

相关问题