微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在使用累积聚合汇总分层或分组时间序列时,如何保持“真实” NA?

如何解决在使用累积聚合汇总分层或分组时间序列时,如何保持“真实” NA?

我正在使用hts包中的aggts()函数来汇总我的分层时间序列。 在汇总时间序列之前,该函数将NA替换为零。 如果至少一个观测值不是NA,这将很有用。但是,如果给定时间的所有观测值均为NA,则我希望保留NA而不是0。

编辑(工作示例):

library(hts)

df <- data.frame(
  AB = c(5,10,15,NA,25,30,40),AA = c(10,20,50,60,70,80)
)

hts_object <- hts(df)

> aggts(hts_object)
Time Series:
Start = 1 
End = 8 
Frequency = 1 
  Total AB AA
1    15  5 10
2    30 10 20
3    45 15 30
4     0  0  0
5    75 25 50
6    90 30 60
7    70  0 70
8   120 40 80

但是我需要的是:

> aggts(hts_object)
Time Series:
Start = 1 
End = 8 
Frequency = 1 
  Total AB AA
1    15  5 10
2    30 10 20
3    45 15 30
4    NA NA NA
5    75 25 50
6    90 30 60
7    70 NA 70
8   120 40 80

Edit2(更新了“ hts”软件包后):

> aggts(hts_object)
Time Series:
Start = 1 
End = 8 
Frequency = 1 
  Total AB AA
1    15  5 10
2    30 10 20
3    45 15 30
4    NA NA NA
5    75 25 50
6    90 30 60
7    NA NA 70
8   120 40 80

这不是我所期望的。也许通过一些背景信息会更清楚。由于Covid-19,我必须将多个每月数据点标记为异常值。如果所有层次结构级别的观察值都是NA,则在汇总时间序列后,我希望保留NA。但是,如果不是在特定层次结构级别上的所有观察值都为NA,则必须加和。

我现实生活中的业务示例是:

  • 所有层次结构级别的全局离群值(例如Covid-19)

    ->如果所有底部时间序列均为NA,则所有聚合时间序列都应包含NA

  • 具有不同市场进入时间的产品(某些时间序列具有领先的NA)

    ->聚合级别需要sum(na.rm = TRUE)

  • 经典缺失观察

    ->聚合级别需要sum(na.rm = TRUE),也许事先需要插值

解决方法

现在固定在开发版本中的https://github.com/earowang/hts

如果NA实际为零,则将它们替换为零。

如果确实缺少它们,则根据定义,总和必须为NA,因为您不知道其价值。您可以将其替换为估算值,也可以继续处理包含NA的数据。包括ARIMA模型在内的某些模型都可以毫无问题地处理NA。

,

您可以考虑对数据帧进行预处理,以便将NA值转换为零,除非整个行仅包含NA:

library(dplyr)

df %>%
  
  # label which rows contain only NAs
  plyr::adply(1,.fun = function(x) ifelse(all(is.na(x)),TRUE,FALSE)) %>%
  
  # in all columns with numeric data,convert NAs to zeros,UNLESS the row contains only NAs
  mutate(across(where(is.numeric),function(x) ifelse(is.na(x) & !V1,x))) %>%
  
  # remove column of NA-only labels created in first step
  select(-V1) %>%
  
  hts() %>%
  aggts()

使用hts::aggts开发版本的结果:

Time Series:
Start = 1 
End = 8 
Frequency = 1 
  Total AB AA
1    15  5 10
2    30 10 20
3    45 15 30
4    NA NA NA
5    75 25 50
6    90 30 60
7    70  0 70
8   120 40 80

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。