1

我目前正在使用每周计数的时间序列,但分母仅作为每月总数提供。我想将它们合并以处理费率。

一年的数据看起来像这样: 173 173 169 180 173 167 187 175 174 154 163 163
从 2010 年 1 月开始到 12 月。

我通常会在 SAS 中使用 PROC EXPAND 之类的东西,但是为了尝试学习 R,我试图完全在 R 中实现这个项目。

似乎我应该使用类似以下的方法将这些值插入为三次样条曲线zoo,但经过几次尝试,我搁浅了。我有两个实施问题希望人们能提供帮助:

  1. 使用类似 na.spline 的东西会给我插值,但据我所知,它们是错误的。上面的数据不是一个单一的时间单位,每月采样一次。这是月份总数,因此每周系列应该有四个插值点 ~ 1/4 的量级。

  2. 有没有使用实际日期的方法?虽然通过创建四个新条目将每月系列扩展到每周系列在抽象上是有意义的,但并非所有月份都有四个星期。

在 SAS 中,作为参考,它将涉及以下内容:

PROC EXPAND data=work.denom out=work.weekly from=month to=week;
    ID month;
    CONVERT denominator / method=SPLINE observed=TOTAL;
run;

wheremonth是特定日期的时间序列索引(我选择了当月的 1 日),并且denominator变量是从每月扩展到每周序列。

4

1 回答 1

0

您可以使用 package.json 分解时间序列tempdisagg。首先,您将 using 函数分解da为每日采样的时间序列,然后您可以聚合为每周 usingxtsapply.weekly函数。请看下面的代码:

library(tempdisagg)
library(lubridate)
library(xts)

df <- data.frame(
  date =  ymd("2010-01-01") + months(0:11),
  value = c(173, 173, 169, 180, 173, 167, 187, 175, 174, 154, 163, 163)
)

# Disaggregate to daily
df_da <- td(df ~ 1, to = "daily", method = "denton-cholette", conversion = "sum")$values

# Aggregate to weekly
data <- as.xts(df_da$value, order.by = df_da$time)
weekly <- apply.weekly(data,sum)

plot(weekly, type = "p")

输出(您可以在 2010 年的第一周和最后一周看到“异常值”,因为那一周没有满,例如 2010 年 1 月 4 日是星期一):

在此处输入图像描述

于 2020-03-18T11:29:06.387 回答