【问题标题】:Multiple regressions with subsets of data using dplyr in R在 R 中使用 dplyr 对数据子集进行多元回归
【发布时间】:2015-07-21 14:00:21
【问题描述】:

我有一个带有 glimpse() 的数据框“DF”:

Observations: 1244160
Variables:
$ Test      (fctr) 72001.txt, 72002.txt, 72003.txt, 72004.txt, 72005.txt,...
$ x         (int) 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
$ y         (int) 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2...
$ Value     (dbl) -77.111111, -13.111111, 13.888889, 235.888889, 138.8888...

对于每个测试,我想使用数据的子集建模“值”:

  1. 函数:值~x + y
  2. 数据:(x, y) / 0

然后,我想使用这些模型预测“DF”中所有数据的“值”。

对于这些计算,我想使用dplyr。但是,我找不到这样做的方法。这是我最后一次尝试:

DF %>% 
    group_by(Test) %>% 
    do({
        mod = lm(Value ~ x + y, data = (. %>% filter((x > 0) &  (x < 6) & (y > 0) & (y < 6))))
        print(mod)
        Pred <- predict(mod, .)
        data.frame(. , Pred)
    })
glimpse()

但它失败了。你能帮帮我吗?

可重现的示例

为了测试答案,我们可以使用一个虚拟的可重现数据框,例如 mtcars:

mtcars %>% 
    group_by(cyl) %>% 
    do({ 
        mod = lm(mpg ~ wt + qsec, data = . %>% filter(vs == 0))
        print(mod)
        Pred <- predict(mod)
        data.frame(. , Pred)
    })
glimpse()

【问题讨论】:

    标签: r regression dplyr


    【解决方案1】:

    我想我有一个答案,这接近我的尝试:

    results <- mtcars %>% 
        group_by(cyl) %>% 
        do({ 
            mod = lm(mpg ~ wt + qsec, data = filter(., vs == 0))
            print(mod)
            Pred <- predict(mod, .)
            data.frame(. , Pred)
        })
    
    print(results, n=100)
    

    【讨论】:

      【解决方案2】:

      filter 保留在group_by 之前:

      mtcars %>% 
        filter(vs==0) %>%
        group_by(cyl) %>% 
        do({ 
          mod = lm(mpg ~ wt + qsec, data = .)
          Pred <- predict(mod)
          data.frame(Pred)
        })
      

      dplyr解决方案:

      lapply(split(mtcars,mtcars$cyl), function(i){
        mod <- lm(mpg ~ wt + qsec, i[i$vs == 0,])
        Pred <- predict(mod)
        data.frame(Pred)
        })
      

      【讨论】:

        【解决方案3】:

        使用lm 函数的subset 参数。

        results <- DF %>% 
                   group_by(Test) %>% 
                   do(mod = lm(Value ~ x + y, data = ., subset = foo))
        

        要生成预测值,试试这个:

        predict <- results %>% 
                   do(data.frame(pred = predict(.$mod), Test = .[["Test"]]))
        

        【讨论】:

          猜你喜欢
          • 2015-10-03
          • 2022-01-14
          • 2015-10-20
          • 2021-12-14
          • 2020-05-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-26
          相关资源
          最近更新 更多