如何将Loess平滑回归结果导出至CSV或Excel文件
嘿,作为R新手能走到建模+画图这一步已经超棒啦!针对你想导出Loess回归线数值的需求,我给你整理了两种实用的方法,适配你已经用ggplot画图的场景:
提取并导出Loess回归线数值的方法
方法1:从已有的ggplot对象直接提取拟合数据
如果你已经用ggplot()画好了带Loess平滑线的图,比如代码大概是这样:
library(ggplot2) p <- ggplot(Top_Songs_transformed, aes(x = Report.Date, y = Payment, color = Track)) + geom_point() + geom_smooth(method = "loess", se = FALSE)
那你可以直接从这个ggplot对象里提取Loess拟合的数值:
# 先确认平滑线所在的图层索引(用layer_names(p)可查看所有图层) loess_fit_data <- layer_data(p, layer = 2) # 一般geom_smooth是第2层,可根据实际调整 # 整理成清晰的格式,对应原数据的字段 loess_fit_clean <- loess_fit_data %>% select(x, y, group) %>% rename(Report.Date = x, Fitted_Payment = y, Track = group) %>% # 把分组序号转换回原Track的因子水平 mutate(Track = factor(Track, levels = 1:3, labels = levels(Top_Songs_transformed$Track)))
方法2:手动拟合Loess模型(更灵活,适合分组场景)
如果你想精准控制拟合参数(比如调整Loess的平滑度span),可以直接用stats::loess()函数按歌曲分组拟合,生成预测值:
library(dplyr) # 按Track分组,拟合Loess并生成对应日期的预测值 loess_preds <- Top_Songs_transformed %>% group_by(Track) %>% do({ # 把日期转成数值型用于Loess拟合 model <- loess(Payment ~ as.numeric(Report.Date), data = ., span = 0.75) # 生成每个日期对应的拟合值 preds <- data.frame( Report.Date = .$Report.Date, Fitted_Payment = predict(model) ) preds }) %>% ungroup()
导出到CSV/Excel
拿到整理好的拟合数据后,就可以轻松导出了:
- 导出到CSV:
write.csv(loess_preds, "loess_regression_results.csv", row.names = FALSE)
- 导出到Excel(需要先安装
writexl包):
install.packages("writexl") library(writexl) write_xlsx(loess_preds, "loess_regression_results.xlsx")
小提示
- 如果你的Loess线是所有歌曲一起拟合的,去掉
group_by(Track)即可 - 调整
loess()里的span参数可以改变平滑度:值越小越贴近数据,越大越平滑
内容的提问来源于stack exchange,提问作者harvey_carmichael
相关产品推荐
相关产品推荐

