【问题标题】:Regression in data frame in RR中数据框中的回归
【发布时间】:2021-07-28 04:05:06
【问题描述】:

嘿,我有以下测试数据:

test = data.frame(Date = c(as.Date("2010-10-10"), as.Date("2010-10-10"), as.Date("2010-12-10"), as.Date("2010-12-10")), Rate = c(0.1, 0.15, 0.16, 0.2), FCF = c(100,200,150,250))

现在我想按日期对数据进行分组,在每组中进行线性回归FCF~Rate,然后在每组中执行这些回归以获得每个日期和速率的回归值。我有以下代码:

output = test %>% group_by(Date) %>% do(mod = lm(FCF ~ Rate, data = .))
output = test %>% left_join(output, by = "Date")
output = output %>% ungroup() %>% mutate(Value = predict(mod, newdata = Rate))

没有最后一行,一切正常,因为mod 不是模型而是列表,我无法进行预测。我应该改变什么?

编辑: 当我评估这段代码时:

  output = test %>% group_by(Date) %>%
  do(mod = lm(FCF ~ Rate, data = .))
  output = test %>% left_join(output, by = "Date")
  output = output %>% ungroup() 

我明白了:

问题是我如何使用来自mod 列的模型来计算来自Rate 列的费率的预测值。

【问题讨论】:

  • 快速澄清问题:为什么要对数据子集执行线性模型?这是一项重复测量研究吗?如果是这种情况,那么您真正追求的可能是 Rate 嵌套在日期内的线性模型,在这种情况下,您可能需要考虑使用 lmer 或 lme4 包从非聚合数据中开发模型。

标签: r dplyr regression


【解决方案1】:

这是一种方法

library(dplyr)
library(purrr)
test %>%
   nest_by(Date) %>% 
   mutate(mod = list(lm(FCF ~ Rate, data = data))) %>%
   ungroup %>%
   mutate(out = map2(data, mod, 
       ~ predict(.y, newdata = data.frame(Rate = .x$Rate))))

-输出

# A tibble: 2 x 4
#  Date                 data mod    out      
#  <date>     <list<tibble>> <list> <list>   
#1 2010-10-10        [2 × 2] <lm>   <dbl [2]>
#2 2010-12-10        [2 × 2] <lm>   <dbl [2]>

如果我们还需要“Pred”列

library(tidyr)
out <- test %>%
       nest_by(Date) %>% 
       mutate(mod = list(lm(FCF ~ Rate, data = data))) %>%
       ungroup %>% 
       mutate(data =  map2(data, mod, ~ .x %>%
                  mutate(Pred = predict(.y, newdata =  cur_data())))) %>%
       unnest(data)

 

【讨论】:

  • 这不是我想要的。我想按Date 对数据进行分组,然后为每个Date 创建一个线性模型FCF~Rate(所以2 个模型:mod_d1mod_d2)然后对于我想使用此模型的每个日期的费率给定的一天,最后我想获得与我开始时相同的 data.frame,但又多了一列,其中包含来自模型的值。
  • @JohhnWhite 它正在按日期进行分组。 nest_by
  • @JohnWhite 关于不同之处,您可以提取“mod”列。不同的日期会有所不同
猜你喜欢
  • 2022-01-08
  • 2014-01-17
  • 2021-08-05
  • 2014-11-25
  • 2019-09-28
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多