gpt4 book ai didi

r - 不规则时间序列与 R 的插值

转载 作者:行者123 更新时间:2023-12-03 23:07:56 24 4
gpt4 key购买 nike

在 R 中搜索时间序列数据的线性插值,我经常发现使用建议 na.approx()来自 zoo包裹。

然而,对于不规则的时间序列,我遇到了问题,因为内插值在间隙数量上均匀分布,没有考虑到值的相关时间戳。

我找到了一个解决方法 approxfun() ,但我想知道是否有更清洁的解决方案,理想情况下基于 tsibble具有来自 tidyverts 的函数的对象包家人?

以前的答案依赖于通过填补空白将不规则日期网格扩展为规则网格。然而,当在插值期间应考虑白天时,这会导致问题。

这是一个(修订的)最小示例,带有 POSIXct 时间戳而不是仅日期:

library(tidyverse)
library(zoo)

df <- tibble(date = as.POSIXct(c("2000-01-01 00:00", "2000-01-02 02:00", "2000-01-05 00:00")),
value = c(1,NA,2))

df %>%
mutate(value_int_wrong = na.approx(value),
value_int_correct = approxfun(date, value)(date))

# A tibble: 3 x 4
date value value_int_wrong value_int_correct
<dttm> <dbl> <dbl> <dbl>
1 2000-01-01 00:00:00 1 1 1
2 2000-01-02 02:00:00 NA 1.5 1.27
3 2000-01-05 00:00:00 2 2 2

任何想法如何(有效)处理这个问题?谢谢您的支持!

最佳答案

这是一个等效的基于 tsibble 的解决方案。 interpolate()函数需要一个模型,但您可以使用随机游走在点之间提供线性插值。

library(tidyverse)
library(tsibble)
library(fable)
#> Loading required package: fabletools

df <- tibble(
date = as.Date(c("2000-01-01", "2000-01-02", "2000-01-05", "2000-01-06")),
value = c(1, NA, 2, 1.5)
) %>%
as_tsibble(index = date) %>%
fill_gaps()

df %>%
model(naive = ARIMA(value ~ -1 + pdq(0,1,0) + PDQ(0,0,0))) %>%
interpolate(df)
#> # A tsibble: 6 x 2 [1D]
#> date value
#> <date> <dbl>
#> 1 2000-01-01 1
#> 2 2000-01-02 1.25
#> 3 2000-01-03 1.5
#> 4 2000-01-04 1.75
#> 5 2000-01-05 2
#> 6 2000-01-06 1.5

创建于 2020-04-08 由 reprex package (v0.3.0)

关于r - 不规则时间序列与 R 的插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61078446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com