Вменение пропущенного значения во временные ряды с использованием ImputeTS в R

У меня есть набор данных, который содержит месячные временные ряды нескольких продуктов.

Каждая строка имеет одну и ту же конечную точку, но разные начальные точки (так как отметка времени для этого продукта могла начаться поздно). Мне нужно рассчитать промежуточные пропущенные значения, то есть значения между фактической начальной и конечной точкой.

Вменение должно быть сделано в 3 шага, т.е.

  • использование na.seadec для временных рядов с длиной более 24
  • используя na.kalman для временных рядов длиной от 12 до 24
  • используя na.ma для временных рядов длиной менее 12

ПРИМЕЧАНИЕ. Начальной точкой временного ряда является первое ненулевое значение вдоль строки.

Все значения от первого столбца до первого ненулевого значения должны быть сохранены как ноль.

Ниже приведен фрагмент кода, который использует функцию apply вместе с условиями if / else.


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

В результате процесс вменения завершается сбоем без вмененных пропущенных значений.

Какова причина сообщения об ошибке и как я могу это исправить?

0 ответов

Другие вопросы по тегам