首页 文章

如何使用循环在R中进行线性回归

提问于
浏览
-2

我想知道我是否可以使用for循环或应用函数在R中进行线性回归 . 我有一个包含变量的数据框,如crim,rm,ad,wd . 我想对每个其他变量进行简单的crim线性回归 .

谢谢!

2 回答

  • 0

    如果你真的想这样做,那对于 lapply() 来说是非常微不足道的,我们在 df 的其他列上使用"loop" . 自定义函数依次将每个变量视为 x ,并且适合该协变量的模型 .

    df <- data.frame(crim = rnorm(20), rm = rnorm(20), ad = rnorm(20), wd = rnorm(20))
    
    mods <- lapply(df[, -1], function(x, dat) lm(crim ~ x, data = dat))
    

    mods 现在是 lm 对象的列表 . modsmods 包含用于拟合模型的协变量的名称 . 这主要的负面影响是所有模型都使用变量 x 拟合 . 更多的努力可能会解决这个问题,但我怀疑这种努力值得花时间 .

    如果您只是选择可能不确定的模型,还有其他方法可以实现这一目标 . 例如,通过 leaps 包及其 regsubsets 函数:

    library("leapls")
    a <- regsubsets(crim ~ ., data = df, nvmax = 1, nbest = ncol(df) - 1)
    summa <- summary(a)
    

    然后 plot(a) 将显示哪些模型是"best",例如 .

    原创

    如果我理解你想要的东西( crim 是协变量,其他变量是你想要使用 crim 预测/建模的响应),那么你不需要循环 . 您可以使用标准 lm() 中的矩阵响应来执行此操作 .

    使用一些虚拟数据:

    df <- data.frame(crim = rnorm(20), rm = rnorm(20), ad = rnorm(20), wd = rnorm(20))
    

    我们通过 cbind() 创建矩阵或多变量响应,并将它们传递给我们感兴趣的三个响应变量 . 对 lm 的调用的其余部分与单变量响应完全相同:

    mods <- lm(cbind(rm, ad, wd) ~ crim, data = df)
    mods 
    
    > mods
    
    Call:
    lm(formula = cbind(rm, ad, wd) ~ crim, data = df)
    
    Coefficients:
                 rm        ad        wd      
    (Intercept)  -0.12026  -0.47653  -0.26419
    crim         -0.26548   0.07145   0.68426
    

    summary() 方法为每个响应生成标准 summary.lm 输出 .

  • 0

    假设您希望将响应变量修复作为数据框的第一列,并且您希望单独使用其他变量多次运行简单线性回归,并将第一个变量修复保留为响应变量 .

    H =虹膜[, - 5]

    for (j in 2:ncol(h)){
      assign(paste("a", j, sep = ""),lm(h[,1]~h[,j]))
    }
    

    上面是代码,它将创建多个回归输出列表并将其存储在a2,a3,....

相关问题