使用R中的dplyr对包含数据子集的多个回归

时间:2015-05-11 06:57:55

标签: r regression dplyr

我有一个带有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< x< 6,0< y< 6
  3. 然后,我想使用这些模型预测“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()
    

3 个答案:

答案 0 :(得分:0)

使用subset函数的lm参数。

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

要生成预测值,请尝试以下操作:

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

答案 1 :(得分:0)

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)
  })

答案 2 :(得分:0)

我认为我有一个答案,这与我的尝试很接近:

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)