R语言数据框按Date分组做线性回归后如何调用模型计算预测值
R分组回归后调用列表列模型计算预测值的修正方案
错误原因
- 代码中的
mod是列表列,每个元素存储对应日期分组的回归模型,mutate默认的向量化操作无法直接遍历列表列元素调用predict函数 predict.lm的newdata参数要求传入数据框格式,直接传入Rate向量不符合参数要求
修正代码
方案1:基于rowwise逐行处理(适配原有代码逻辑)
library(dplyr) 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)) output = test %>% group_by(Date) %>% do(mod = lm(FCF ~ Rate, data = .)) %>% left_join(test, ., by = "Date") %>% # 启用逐行运算模式 rowwise() %>% mutate(Value = predict(mod, newdata = data.frame(Rate = Rate))) %>% ungroup()
方案2:嵌套数据框方案(更符合tidyverse设计规范,效率更高)
library(dplyr) library(tidyr) library(purrr) 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)) output = test %>% nest(data = -Date) %>% mutate( mod = map(data, ~lm(FCF ~ Rate, data = .x)), Value = map2(mod, data, ~predict(.x, newdata = .y)) ) %>% unnest(c(data, Value))
两种方案运行后都可以得到每行数据对应分组回归模型的预测值。
内容的提问来源于stack exchange,提问作者Johhn White
相关产品推荐
相关产品推荐

