Моя цель - #1 предсказать продажи 15-го и 16-го числа по ItemNumber и сохранить, используя приведенные ниже данные. # 2 показать этот прогноз в виде столбца в этих данных или его подмножестве, чтобы я мог просмотреть строку и увидеть переменные-предикторы рядом с прогнозом для каждого дня.
Data.table — это то, что мне больше всего нравится. Я хотел бы использовать его для достижения своих целей, если это возможно.
Ниже DT представляет собой таблицу исторических продаж двух товаров в двух розничных магазинах и переменных, которые влияли на эти продажи до 14 июля. В DT включены два «будущих дня» 15 и 16 июля, а также некоторые известные переменные, которые повлияют на продажи в эти дни.
http://stackoverflow.com/questions/23947245/use-predict-on-data-table-with-linear-regression
Используя приведенный выше пост среди других и совет пользователя 42, я могу перейти к следующей строке. D1 — это исторические UnitSales, а D2 — будущие дни, для которых я хочу предсказать UnitSales.
resultsofpredict=D1[,predict.lm(lm(UnitSales~.,.SD,na.action = na.exclude),D2[.BY]),by=c("ItemNumber","Store"),.SDcols=testcols]
Теперь, как мне правильно объединить или объединить результаты прогноза с D2, чтобы я мог видеть прогноз, дату и все переменные прогноза вместе в одной строке — прогноз V1 как столбец D2? Вот попытки, которые не работают и заканчиваются 16 строками, когда я хотел только 8. Может ли кто-нибудь опубликовать пример, используя мои данные, чтобы я мог визуализировать его, поскольку я новичок в этом?
combinedresult=merge(D2,resultsofpredict )
combinedresult=merge(resultsofpredict,D2)
Спасибо.
library(data.table)
library(lubridate)
zz="
Store Date ItemNumber RetailPrice Backstock UnitSales typea typeb typec Sunday Monday Tuesday Wednesday Friday Saturday
1 7/8/2018 500 1.2 5 20 0 1 0 1 0 0 0 0 0
1 7/9/2018 500 1.2 9 10 0 1 0 0 1 0 0 0 0
1 7/10/2018 500 0.8 0 10 1 0 0 0 0 1 0 0 0
1 7/11/2018 500 0.8 0 8 1 0 0 0 0 0 1 0 0
1 7/12/2018 500 0.8 0 7 1 0 0 0 0 0 0 0 0
1 7/13/2018 500 1.2 3 18 0 1 0 0 0 0 0 1 0
1 7/14/2018 500 1.2 0 21 0 1 0 0 0 0 0 0 1
1 7/15/2018 500 1.2 3 99 0 1 0 1 0 0 0 0 0
1 7/16/2018 500 0.8 0 99 1 0 0 0 1 0 0 0 0
1 7/8/2018 600 1.2 0 18 0 1 0 1 0 0 0 0 0
1 7/9/2018 600 1.2 0 11 0 1 0 0 1 0 0 0 0
1 7/10/2018 600 0.8 0 12 1 0 0 0 0 1 0 0 0
1 7/11/2018 600 0.8 0 4 1 0 0 0 0 0 1 0 0
1 7/12/2018 600 0.8 0 5 1 0 0 0 0 0 0 0 0
1 7/13/2018 600 1.2 0 13 0 1 0 0 0 0 0 1 0
1 7/14/2018 600 1.2 0 29 0 1 0 0 0 0 0 0 1
1 7/15/2018 600 1.2 2 99 0 1 0 1 0 0 0 0 0
1 7/16/2018 600 0.8 0 99 1 0 0 0 1 0 0 0 0
2 7/8/2018 500 1.2 0 10 0 1 0 1 0 0 0 0 0
2 7/9/2018 500 1.2 0 6 0 1 0 0 1 0 0 0 0
2 7/10/2018 500 0.8 0 5 1 0 0 0 0 1 0 0 0
2 7/11/2018 500 0.8 0 5 1 0 0 0 0 0 1 0 0
2 7/12/2018 500 0.8 3 5 1 0 0 0 0 0 0 0 0
2 7/13/2018 500 1.2 3 12 0 1 0 0 0 0 0 1 0
2 7/14/2018 500 1.2 9 14 0 1 0 0 0 0 0 0 1
2 7/15/2018 500 1.2 3 99 0 1 0 1 0 0 0 0 0
2 7/16/2018 500 0.8 0 99 1 0 0 0 1 0 0 0 0
2 7/8/2018 600 1.2 0 14 0 1 0 1 0 0 0 0 0
2 7/9/2018 600 1.2 0 11 0 1 0 0 1 0 0 0 0
2 7/10/2018 600 0.8 0 7 1 0 0 0 0 1 0 0 0
2 7/11/2018 600 0.8 0 3 1 0 0 0 0 0 1 0 0
2 7/12/2018 600 0.8 0 5 1 0 0 0 0 0 0 0 0
2 7/13/2018 600 1.2 0 12 0 1 0 0 0 0 0 1 0
2 7/14/2018 600 1.2 0 17 0 1 0 0 0 0 0 0 1
2 7/15/2018 600 1.2 0 99 0 1 0 1 0 0 0 0 0
2 7/16/2018 600 0.8 0 99 1 0 0 0 1 0 0 0 0
"
загрузить и подготовить данные
DT=as.data.table(read.table(text=zz,fill=TRUE,header=TRUE))
setkey(DT,ItemNumber,Store)
Я использовал 99 только в качестве заполнителя в таблице для загрузки примера. Убираем здесь.
DT[UnitSales==99,UnitSales:=(value=NA_integer_)]
DT = DT[, Date:= as.Date(Date, "%m/%d/%Y")]
переменные, используемые для прогнозирования UnitSales. Фактические данные содержат множество столбцов, которые я хочу сохранить, но они не помогают прогнозировать UnitSales, поэтому это имена подмножества столбцов, которые я буду использовать для прогнозирования.
testcols=c('RetailPrice','Saturday','Sunday','Tuesday')
Разделение DT на историю и новые данные
d="07/14/2018"
d=as.Date(d,"%m/%d/%Y")
Исторические продажи
D1=DT[Date < d+1]
«Будущие» дни для прогнозирования UnitSales для
D2=DT[Date> d]
таблица с коэффициентами из D1
coeftable=D1[ , as.list(coef(lm(UnitSales~.,.SD,na.action = NULL))) ,
by= c("ItemNumber","Store"),.SDcols=testcols]