gpt4 book ai didi

r - 使用数据框中的缺失值创建 ts 时间序列

转载 作者:行者123 更新时间:2023-12-04 10:02:57 26 4
gpt4 key购买 nike

我有一个包含每月数据时间序列的数据框,其中包含一些缺失值。

dates <- seq(
as.Date("2010-01-01"), as.Date("2017-12-01"), "1 month"
)
n_dates <- length(dates)
dates <- dates[runif(n_dates) < 0.5]
time_data <- data.frame(
date = dates,
value = rnorm(length(dates))
)
## date value
## 1 2010-02-01 1.3625419
## 2 2010-06-01 0.1512481
## etc.

为了能够利用时间序列预测功能,例如, forecast ,我想将其转换为 ts目的。

这样做的愚蠢方法是在整个时间段内创建一组常规的月度日期,然后左连接回原始数据。
library(dplyr)
first_date <- min(time_data$date)
last_date <- max(time_data$date)
full_dates <- data.frame(
date = seq(first_date, last_date, "1 month")
)
extended_time_data <- left_join(full_dates, time_data, by = "date")
## date value
## 1 2010-02-01 1.3625419
## 2 2010-03-01 NA
## etc.

现在我可以使用 ts() 创建时间序列.
library(lubridate)
time_series <- ts(
extended_time_data$value,
start = c(year(first_date), month(first_date)),
frequency = 12
)

对于如此简单的任务,这是冗长且非常粗暴的。

我还考虑先转换为 xts ,并使用来自 timetk 的转换器包,但没有什么比更简单的方法跳出来的。

这个问题是对 How to create time series with missing datetime values 的欺骗,但那里的答案更加模糊。

我如何创建 ts来自具有缺失值的时间序列的对象?

最佳答案

而不是使用 left_join更简单的选择是 complete ,将其转换为 tsibble现在与 forecast 兼容的对象包函数

library(tidyverse)
library(tsibble)
time_data %>%
complete(date = seq(min(date), max(date), by = "1 month"),
fill = list(value = NA)) %>%
as_tsibble(index = date)


# A tsibble: 94 x 2 [1D]
# date value
# <date> <dbl>
# 1 2010-02-01 1.02
# 2 2010-03-01 NA
# 3 2010-04-01 NA
# 4 2010-05-01 1.75
# 5 2010-06-01 NA
# 6 2010-07-01 NA
# 7 2010-08-01 -0.233
# 8 2010-09-01 NA
# 9 2010-10-01 NA
#10 2010-11-01 -0.987
# ... with 84 more rows

如上所述,它兼容 forecast职能
library(fable)
time_data %>%
complete(date = seq(min(date), max(date), by = "1 month"),
fill = list(value = 0)) %>%
as_tsibble(index = date) %>%
ETS(value) %>%
forecast %>%
autoplot

注意:这里,缺失值被估算为 0。

enter image description here

可以用 fill 用之前的非 NA 值来估算它
time_data %>% 
complete(date = seq(min(date), max(date), by = "1 month")) %>%
fill(value) %>%
as_tsibble(index = date) %>%
ETS(value) %>%
forecast %>%
autoplot

数据
n_dates <- 3

关于r - 使用数据框中的缺失值创建 ts 时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52470591/

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