R中时间序列中缺少数据插补

机器算法验证 r 时间序列 缺失数据 插值 数据预处理
2022-04-16 09:24:12

我有 2012 年到 2016 年的每小时温度数据如下:

> head(htemp)
     HH_ID      TEMPERATURE   YY_ID    DD_ID       MM_ID
1 201201010000     8.98       2012    20120101     201201
2 201201010100     8.67       2012    20120101     201201
3 201201010200     8.69       2012    20120101     201201
4 201201010300     8.50       2012    20120101     201201
5 201201010400     8.30       2012    20120101     201201
6 201201010500     8.10       2012    20120101     201201

数据中有缺失数据

  1. Missing data(NA) on individual hour (on 201209281400, 201209290000...)
  2. Missing data on consecutive hours(like no observation(NA) on 201210241700, 201210241800, 201210241900).
  3. No observation(NA) on a whole day(20130328).

我想知道如何使用相邻数据对丢失的数据进行插值,即对单个丢失的 HH 数据进行线性插值,并对全天丢失数据采用相邻日期的“典型”模式(使用温度对丢失日期的每个 HH 进行线性插值对应的 HH 在相邻的日子)。

编辑

我想对温度数据进行时间序列分析,比如分解(stl)、建模(auto.arima)和预测(forecast)。它似乎stl无法处理丢失的数据,所以我认为可能有必要先估算丢失的数据。

我有另一个包含电力需求的数据集,其中没有缺失数据。我还可以使用温度数据作为协变量对需求数据进行建模。

更新

我尝试imp<-mice(htemp)了我的数据,但出现错误:

iter imp variable
  1   1  TEMPERATURE
Error in solve.default(xtx + diag(pen)) : 
  system is computationally singular: reciprocal condition number = 5.03072e-28
1个回答

首先,很多插补包在缺少整行的情况下不起作用。(因为他们的算法适用于变量之间的相关性 - 如果连续没有其他变量,则无法估计缺失值)

您需要适用于时间特征的插补包。

您可以使用例如包imputeTS来估算温度。

library(imputeTS)
x <- ts(htemp$TEMPERATURE, frequency = 12)
x.withoutNA <- na_kalman(x)

这将是获得推算温度值的一种可能解决方案。

这是另一个带有预测包的:

library(forecast)
x <- ts(htemp$TEMPERATURE, frequency = 12)
x.withoutNA <- na.interp(x)

这些包确实有效,因为它们处理一个属性的时间相关性,而不是属性间的相关性。