2016-08-01 5 views
1

У меня есть следующие данные:Как включить (интерполировать) этот нерегулярно разнесенный временной ряд на регулярно расположенный один в R или Matlab?

Lines = "20/03/2014,9996792524 
21/04/2014,8479115468 
21/09/2014,11394750532 
16/10/2014,9594869828 
18/11/2014,10850291677 
08/12/2014,10475635302 
22/01/2015,10116010939 
26/02/2015,11206949341 
20/03/2015,11975140317 
09/04/2015,11526960332 
29/04/2015,9986194500 
16/09/2015,11501088256 
13/10/2015,11833183163 
10/11/2015,13246940910 
16/12/2015,13255698568 
27/01/2016,13775653990 
23/02/2016,13567323648 
22/03/2016,14607415705 
11/04/2016,13835444224 
04/04/2016,14118970743" 

Я прочитал это в R:

z <- read.zoo(text = Lines, sep = ",", header = TRUE, index = 1:1, tz = "", format = "%d/%m/%Y") 

Я хотел бы интерполировать данные такие, что я могу преобразовать это нерегулярно разнесенных временных рядов в регулярную. Временной интервал не имеет значения до тех пор, пока он будет регулярным, но будет делать ежемесячный, недельный или двухнедельный интервал.

Как это сделать в R или Matlab?

Примечание: Я понимаю, что интерполированные значения могут быть неточными и могут искажать информацию, однако мне нужно научиться этому, и я в порядке с потерей точности.

+0

Ну, вы могли бы сделать модель значений между точками данных, но простой факт заключается в том, что вы не можете знать значение данные, которые вы не измеряли. – Sycorax

ответ

1

Хорошо, прежде всего, слово предупреждения: если вы собираетесь интерполировать, а затем выполнить тесты или общую статистическую оценку, ваши результаты будут (плохо) предвзятыми, если у вас нет веских причин (знание домена?) предположим, что ваш метод интерполяции будет генерировать точки, исходящие из одного и того же распределения исходных точек. И нет, «сюжет выглядит хорошо» не является хорошим критерием для оценки этого :) , что, как говорится, давайте посмотрим на данные:

# Lines contains your data 
library(zoo) 
fmt <- "%d/%m/%Y" 
z <- read.zoo(text = Lines, sep = ",", header = TRUE, index = 1:1, tz = "", format = fmt) 
t <- time(z) 
plot(z,type="p",xaxt="n",pch=19,col="cyan",cex=1.5) 
labs <- format(t,fmt) 
axis(side = 1, at = t, labels = labs,cex.axis = 0.7)  

enter image description here

Это выглядит большая часть вашего недостающие данные относятся к лету 2014 года и летом 2015 года мне интересно знать, что эти данные ... Во всяком случае, это выглядит, что большинство ваших данных разнесены по крайней мере, 2 недели:

diff(t) 
# Time differences in days 
# [1] 153 25 33 20 45 35 22 20 20 140 27 28 36 42 27 28 13 7 

Так давайте интерполировать до двухнедельной серии, создав сначала dumm у zoo объекта:

t.biweekly <- seq(from = min(t), to=max(t),by="2 weeks") 
dummy <- zoo(,t.biweekly) 

Merge фиктивных серий с вашим:

z.interpolated <- merge(z,dummy,all=TRUE) 

Если вы посмотрите на новой серии, вы увидите, есть NA значения во все времена dummy, которые не имеют соответствующее время в z. Давайте заполним эти точки с линейно интерполированных значений и посмотрите на результат:

z.interpolated <- na.approx(z.interpolated) 
plot(z.interpolated, type = "b") 
points(z,pch=19,col="cyan",cex=1.5) 

enter image description here

вуаля! Помните, что создание моделей для вывода из этой вещи - плохая идея ...

+0

Спасибо! Хотя я понимаю, что использование этих интерполированных значений в моделях прогнозирования - плохая идея, мне любопытно видеть результаты в любом случае. Поэтому я попытался: 'fcst <- forecast (z.interpolated, h = 5)' и он говорит: 'Ошибка в ets (объект, лямбда = лямбда, allow.multiplicative.trend = allow.multiplicative.trend,: Вы, Кроме того: Предупреждающее сообщение: В ets (объект, лямбда = лямбда, allow.multiplicative.trend = allow.multiplicative.trend,: Отсутствующие значения. Использование самой длинной смежной части временных рядов' Какие недостающие значения? – learnerX

+0

Вы действительно хотите стрелять в ногу, я вижу: D продолжайте, но вы должны знать, что 'прогноз' (а также большинство других функций в пакете' прогноз') работает на объектах 'ts', а не' zoo' объекты. Как конвертировать объекты 'zoo' в объекты' ts' - это еще один вопрос, на который нельзя ответить в комментариях, но для быстрого способа, который, вероятно, испортит ваши даты (но все же пусть вы получите прогноз) см. [Этот вопрос] (http : //stackoverflow.com/questions/18856822/converting-zoo-to-ts-before-forecasting). – DeltaIV