Как сохранить наблюдения с двумя временными компонентами в R - PullRequest
0 голосов
/ 31 октября 2018

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

Чтобы проиллюстрировать это, подумайте о бюджетных прогнозах различных подразделений. Каждое подразделение делает прогноз бюджета (с результатом 1 месяц) до, скажем, декабря 2020 года, который обновляется ежемесячно. Затем для каждого из последних, скажем, 24 месяцев у меня есть файл прогнозов бюджета (и фактических значений за прошедший период) с этого месяца на каждый месяц до декабря 2020 года. См. Код ниже.

Я хотел бы расположить эти данные так, чтобы они были легко (и эффективно) доступны в R. Примером интересного результата может быть точность / смещение прогнозируемого бюджета для подмножества наблюдений (например, те из определенного места). Затем я хотел бы предсказать, основываясь на других атрибутах.

Как мне лучше всего это реализовать? Один из подходов, который я использовал, был с таблицей data.table, добавив строку для каждой временной точки прогноза, с временной точкой прогнозирования, сохраненной в столбце, см. Этот пример:

library(data.table)
> data <- data.table(ID = c(1, 1, 1, 2, 2, 2), location = c(rep('USA', 3), rep('FRA', 3)),
                    from = c('Jan16', 'Feb16', 'Mar16','Jan16', 'Feb16', 'Mar16'),
                    Jan18 = c(0, 0, 0, 10, 10, 15), Feb18 = c(100, 100, 0, 10 , 10, 15),
                    Mar18 = c(100, 100, 100, 10, 10, 15), Apr18 = c(0, 0, 100, 10, 10, 15),
                    May18 = c(0, 0, 0, 10, 10, 15))
> data
   ID location  from Jan18 Feb18 Mar18 Apr18 May18
1:  1      USA Jan16     0   100   100     0     0
2:  1      USA Feb16     0   100   100     0     0
3:  1      USA Mar16     0     0   100   100     0
4:  2      FRA Jan16    10    10    10    10    10
5:  2      FRA Feb16    10    10    10    10    10
6:  2      FRA Mar16    15    15    15    15    15

Здесь я хотел бы иметь возможность извлечь тот факт, что прогнозируемая стоимость подразделения 1 в США была отложена на один месяц, а прогнозируемая стоимость подразделения 2 во Франции была увеличена на 50%. Это возможно здесь, например,

delay <- apply(data[from == 'Jan16', Jan18:May18], 1, function(y) weighted.mean(1:5, y)) - apply(data[from == 'Mar16', Jan18:May18], 1, function(y) weighted.mean(1:5, y))

diff <- apply(data[from == 'Jan16', Jan18 : May18], 1, sum) - apply(data[from == 'Mar16', Jan18 : May18], 1, sum)

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

Может кто-нибудь помочь?

...