基于不规则日期间隔的加权移动平均线

时间:2017-07-25 07:01:47

标签: r time-series moving-average

我是时间序列的新手,并希望有人可以在这里提供一些意见/想法。

我正试图找到方法来估算缺失的价值 我希望找到移动平均线,但大多数包(光滑,mgcv,)似乎都没有考虑时间间隔。
例如,数据集可能看起来像下面的内容,我希望2016-01-10的值在计算缺失值时具有最大的影响:

Date          Value    Diff_Days
2016-01-01    10       13           
2016-01-10    14       4
2016-01-14    NA       0
2016-01-28    30       14
2016-01-30    50       16

我有NA可能是第一次观察或最后一次观察的情况。有时NA值也会多次出现,此时滚动窗口需要扩展,这就是我想使用移动平均值的原因。 是否有考虑日期间隔/单独权重的包裹?
或者请建议在这种情况下是否有更好的方法来估算NA值。

1 个答案:

答案 0 :(得分:1)

您可以使用glm或任何其他型号。

输入

con <- textConnection("Date          Value    Diff_Days
2015-12-14    NA       0
                      2016-01-01    10       13           
                      2016-01-10    14       4
                      2016-01-14    NA       0
                      2016-01-28    30       14
                      2016-02-14    NA       0
                      2016-02-18    NA       0
                      2016-02-29    50       16")

df <- read.table(con, header = T)
df$Date <- as.Date(df$Date)

df$Date.numeric <- as.numeric(df$Date)
fit <- glm(Value ~ Date.numeric, data = df)

df.na <- df[is.na(df$Value),]

predicted <- predict(fit, df.na)
df$Value[is.na(df$Value)] <- predicted

plot(df$Date, df$Value)
points(df.na$Date, predicted, type = "p", col="red")

df$Date.numeric <- NULL
rm(df.na)
print(df)

输出

enter image description here

        Date     Value Diff_Days
1 2015-12-14 -3.054184         0
2 2016-01-01 10.000000        13
3 2016-01-10 14.000000         4
4 2016-01-14 18.518983         0
5 2016-01-28 30.000000        14
6 2016-02-14 40.092149         0
7 2016-02-18 42.875783         0
8 2016-02-29 50.000000        16