R中时间序列的保持性插值插值

时间:2017-06-10 20:23:44

标签: r time-series interpolation missing-data zoo

我有一些缺少值的数据,我知道这些数据是正面的。我尝试使用na.interp包中的forecast插入缺失值。但是,一些内插值结果为负值。

我已经从na.approx包中尝试了zoo,但是近似值与时间序列的季节性趋势不一致。

我无法在日志域中进行插值,因为我的一些观察结果是0。在平方根域中插值会以某种方式产生太多的异常值。还有其他方法可以在保持积极性的同时插入时间序列吗?任何对其他R包的引用也将受到赞赏。

1 个答案:

答案 0 :(得分:0)

有一个 imputeTS 软件包,它专门针对时间序列中的缺失值。 (看看这个Paper

它是这样的:

na.kalman(yourTimeSeries)

就这样。

它提供了几种时间序列插补功能:

  • 通过线性插值进行输入
  • 样条插值的输入
  • 通过Stineman插值法进行插值
  • 通过结构模型和卡尔曼平滑进行输入
  • ARIMA状态空间表示法和Kalman Sm的输入。
  • 进行最后一次观察时的输入
  • 下一次观测的输入向后进行
  • 通过简单移动平均线缺少价值插补
  • 通过线性加权移动平均值进行输入
  • 通过指数加权移动平均值进行输入
  • 按均值估算缺失值
  • 季节分解的缺失值插补
  • 按季节划分的缺失值估算

其中一些功能更高级,某些功能不那么高级。我将为此任务尝试软件包的na.kalman()函数。 可能是此功能的结果已经遵守约束。 否则,您需要在进行插补之前进行一些转换(如下所述)。

通常,如果您希望将插补限制在一定范围内,则此转换方法也可能会有所帮助:

library("imputeTS")

# Bounds
a <- 50
b <- 400

# Transform data
y <- log((myTimeSeries-a)/(b-myTimeSeries))
imputations <- na.kalman(y)

# Back-transform
imputationsBack <- (b-a)*exp(imputations)/(1+exp(imputations)) + a