Представьте себе временные ряды температуры и света с высоким разрешением, снятые во многих местах (станциях) в течение многих дней. За исключением того, что на каждой станции температура и свет воспринимаются разными датчиками, что приводит к несколько разному набору временных меток.
Чтобы объединить их в одну data.frame
, я пытался создать модель света для каждый день на каждой станции в df.light
. Затем я хочу предсказать значения света по точным временным меткам показаний температуры, которые вкладываются одинаково в df.temp
(набор данных о температуре).
station <- rep(1:5, each=36500)
dayofyear <- rep(1:365, 5, each=100)
hourofday.light <- runif(182500, min=0, max=24)
light <- runif(182500, min=0, max=40)
hourofday.temp <- runif(182500, min=0, max=24)
temp <- runif(182500, min=0, max=40)
df.light <- data.frame(station, dayofyear, hourofday.light, light)
df.temp <- data.frame(station, dayofyear, hourofday.temp, temp)
> head(df.light)
station dayofyear hourofday.light light
1 1 1 10.217349 0.120381
2 1 1 12.179213 12.423694
3 1 1 16.515400 7.277784
4 1 1 3.775723 31.793782
5 1 1 7.719266 30.578220
6 1 1 9.269916 16.937042
> tail(df.light)
station dayofyear hourofday.light light
182495 5 365 4.712285 19.2047471
182496 5 365 11.190919 39.5921675
182497 5 365 18.710969 11.8182347
182498 5 365 20.288101 11.6874453
182499 5 365 15.466373 0.3264828
182500 5 365 12.969125 29.4429034
> head(df.temp)
station dayofyear hourofday.temp temp
1 1 1 12.1298554 30.862308
2 1 1 23.6226076 9.328942
3 1 1 9.3699831 28.970397
4 1 1 0.1814767 1.405557
5 1 1 23.6300014 39.875743
6 1 1 7.6999984 39.786182
Я могу создавать модели освещения, например, GAM , за каждый день на каждой станции в df.light
с использованием dplyr
. Но я застрял, не зная, как передать вложенные newdata
из df.temp
в модели для генерации прогнозов для каждой станции в день.
library("mgcv")
library("tidyverse")
data <- as_tibble(df.light) %>%
group_by(station, dayofyear) %>%
nest()
models <- data %>%
mutate(
model = map(data, ~ gam(light ~ s(hourofday.light), data = .x)),
predicted = map(model, ~ predict.gam(.x, newdata = hourofday.temp)) # newdata doesn't look nested
)
Последняя строка, начинающаяся с predicted
не работает потому что newdata не является вложенным ... Я думаю. Пожалуйста помоги. Я предполагаю, что это может быть распространенной проблемой при объединении временных рядов, генерируемых несколькими источниками.