r - 在 R 中应用逐年分段回归
问题描述
我有每日降雨量数据,我已使用以下代码将其转换为年度累积值
library(seas)
library(data.table)
library(ggplot2)
#Loading data
data(mscdata)
dat <- (mksub(mscdata, id=1108447))
dat$julian.date <- as.numeric(format(dat$date, "%j"))
DT <- data.table(dat)
DT[, Cum.Sum := cumsum(rain), by=list(year)]
df <- cbind.data.frame(day=dat$julian.date,cumulative=DT$Cum.Sum)
然后我想逐年应用分段回归以获得逐年断点。我可以做到这一年像
library("segmented")
x <- subset(dat,year=="1984")$julian.date
y <- subset(DT,year=="1984")$Cum.Sum
fit.lm<-lm(y~x)
segmented(fit.lm, seg.Z = ~ x, npsi=3)
我曾经npsi = 3
有3个断点。现在如何最小化地应用它逐年分段回归并具有估计的断点?
解决方案
您可以将lm
对象存储在列表中并segmented
为每个year
.
library(tidyverse)
data <- DT %>%
group_by(year) %>%
summarise(fit.lm = list(lm(Cum.Sum~julian.date)),
julian.date1 = list(julian.date)) %>%
mutate(out = map2(fit.lm, julian.date1, function(x, julian.date)
data.frame(segmented::segmented(x,
seg.Z = ~julian.date, npsi=3)$psi))) %>%
unnest_wider(out) %>%
unnest(cols = c(Initial, Est., St.Err)) %>%
dplyr::select(-fit.lm, -julian.date1)
# A tibble: 90 x 4
# year Initial Est. St.Err
# <int> <dbl> <dbl> <dbl>
# 1 1975 84.8 68.3 1.44
# 2 1975 168. 167. 9.31
# 3 1975 282. 281. 0.917
# 4 1976 84.8 68.3 1.44
# 5 1976 168. 167. 9.33
# 6 1976 282. 281. 0.913
# 7 1977 84.8 68.3 1.44
# 8 1977 168. 167. 9.32
# 9 1977 282. 281. 0.913
#10 1978 84.8 68.3 1.44
# … with 80 more rows
推荐阅读
- django - 将查询参数作为字典传递,在邮递员中有许多值
- javascript - 由于 Django 对 AJAX 的访问控制检查,XMLHttpRequest 无法加载
- c# - 如何使随机数遵循某些自定义规则?
- c - 骑士之旅无限循环
- javascript - 如何使用 Office Outlook Web 插件下载邮件文件?
- jakarta-ee - WebLogic 12c:无法初始化 JNDI 上下文
- jenkins - Cucumber 测试竞态条件 Jenkins 在并发服务器上运行
- vb.net - Html 敏捷包无法抓取图像
- jenkins - 如何将 SonarCloud 与 GitHub 和 Jenkins 集成
- typescript - 在 Typescript 中提取静态成员类对象的类型