У меня есть набор данных, где для каждого наблюдения, в дополнение к некоторым атрибутам, описывающим наблюдение, у меня есть прогнозы для упорядоченных по времени данных из разных временных точек в прошлом.
Чтобы проиллюстрировать это, подумайте о бюджетных прогнозах различных подразделений. Каждое подразделение делает прогноз бюджета (с результатом 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)
Но если я хочу сравнить это взвешенное среднее по всем временным точкам, это становится сложным. Кроме того, данные, которые я имею, не так хороши. Разделение может появиться только после некоторого позднего момента времени и исчезнуть в другой. Я также сохраняю много ненужных данных в атрибутах. Я просто чувствую, что должен быть лучший способ хранить все эти данные, но пока не нашел никаких индексов для этого.
Может кто-нибудь помочь?