簡體   English   中英

用 R 插值不規則時間序列

[英]Interpolation of irregular time series with R

在 R 中搜索時間序列數據的線性插值時,我經常從zoo package 中找到使用na.approx()的建議。

但是,對於不規則的時間序列,我遇到了問題,因為插值均勻分布在間隙的數量上,而不考慮值的關聯時間戳。

我找到了使用approxfun()的工作,但我想知道是否有更清潔的解決方案,理想情況下基於tsibble對象,並具有來自tidyverts package 系列的功能?

以前的答案依賴於通過填補空白將不規則日期網格擴展到規則網格。 但是,當在插值期間應考慮白天時,這會導致問題。

這是一個(修訂后的)最小示例,帶有 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() function 需要 model,但您可以使用隨機游走在點之間進行線性插值。

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

reprex package (v0.3.0) 於 2020 年 4 月 8 日創建

就個人而言,我將 go 與您正在使用的解決方案一起使用,但為了展示如何使用na.approx在這種情況下,我們可以在使用na.approx之前complete日期序列並將其與原始df連接以保留原始行。

library(dplyr)

df %>% 
  tidyr::complete(date = seq(min(date), max(date), by = "day")) %>%
  mutate(value_int = zoo::na.approx(value)) %>%
  right_join(df, by = "date") %>%
  select(date, value_int)


#  date       value_int
#  <date>         <dbl>
#1 2000-01-01      1   
#2 2000-01-02      1.25
#3 2000-01-05      2   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM