基于不规则日期间隔的加权移动平均线
Weighted Moving Average based on Irregular Date Intervals
我是时间序列的新手,希望有人能在这里提供一些 input/ideas。
我正在寻找方法来估算缺失值。
我希望找到移动平均线,但大多数软件包(smooth、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 值也会出现多次,此时滚动 window 需要扩大,这就是为什么我想使用移动平均线。
是否有考虑日期间隔/单独权重的软件包?
或者请建议在这种情况下是否有更好的方法来估算 NA 值。
您可以使用 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)
输出
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
我是时间序列的新手,希望有人能在这里提供一些 input/ideas。
我正在寻找方法来估算缺失值。
我希望找到移动平均线,但大多数软件包(smooth、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 值也会出现多次,此时滚动 window 需要扩大,这就是为什么我想使用移动平均线。
是否有考虑日期间隔/单独权重的软件包?
或者请建议在这种情况下是否有更好的方法来估算 NA 值。
您可以使用 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)
输出
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