0

我有一个数据集,其中包含多个产品的每月时间序列。

每行都有相同的终点,但起点不同(因为该产品的时间戳可能开始较晚) 我需要估算中间缺失值,即实际起点和终点之间的值。

插补需要分 3 个步骤完成,即

  • 将 na_seadec 用于序列长度超过 24 的时间序列
  • 将 na_kalman 用于长度在 12 到 24 之间的时间序列
  • 将 na_ma 用于长度小于 12 的时间序列

注意:时间序列的起点是该行的第一个非零值。

从第一列到第一个非零值的所有值都需要保持为零。

以下是使用 apply 函数和 if/else 条件的代码片段。


library("imputeTS")
temp2<- as.data.frame(t(apply(temp,1,function(x) #**temp is the datset of   multiple** time series
  {

  ind<-min(which(x!=0)) #**first non zero/ starting point**

  series<-(length(x)-ind+1) # **total length after removing front zeroes**


  if(ind==Inf)return(x)

  x[x==0]<-NA

  timeseries=ts((x[ind:length(x)]),frequency = 12,end = c(2017,3)) #**converting it to ts format with same ending point**

  if(series>24) #**if,else for different imputations based on series length**

  { y[1:ind]<-0

     y[ind:length(x)]<-t(na_seadec(t(timeseries),algorithm = "ma"))

}

    else if(series >12 && series <25)

  {    y[1:ind]<-0

  y[ind:length(x)]<-t(na_kalman(t(timeseries),model="StructTS"))

    }

  else

   { y[1:ind]<-0

  y[ind:length(x)]<-t(na_ma(t(timeseries),k=1,weighting = "simple"))

   }

    return(y)


}
)))

问题是当我执行上面的代码片段时,我收到以下警告:

input data has only na's

结果,插补过程失败,没有插补缺失值。

您认为错误消息的原因是什么以及我该如何解决?

4

0 回答 0