Моя цель состоит в том, чтобы
# 1 прогнозируют продажи на 15-е и 16-е места по ItemNumber и сохраняют, используя приведенные ниже данные.
№ 2 показывает этот прогноз в виде столбца в этих данных или его подмножестве, чтобы я мог посмотреть на строку и увидеть переменные предиктора рядом с прогнозом
за каждый день.
Data.table - это то, что мне удобнее всего. Я хотел бы использовать его для достижения своих целей, если это возможно.
Ниже DT представляет собой таблицу исторических продаж для двух товаров в двух точках розничного магазина и переменных, которые влияли на эти продажи до 14 июля. В DT включены два «будущих дня» 15 и 16 июля, а также некоторые известные переменные, которые повлияют на продажи в эти дни.
https://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]