Использовать данные.таблица для создания столбца коэффициентов регрессии
Я борюсь с тем, что кажется простым продолжением предыдущего вопроса, который я задал здесь.
Я пытаюсь агрегировать (а) диапазон дат и (Б) факторную переменную. Примерные данные могут быть:
Brand Day Rev RVP
A 1 2535.00 195.00
B 1 1785.45 43.55
C 1 1730.87 32.66
A 2 920.00 230.00
B 2 248.22 48.99
C 3 16466.00 189.00
A 1 2535.00 195.00
B 3 1785.45 43.55
C 3 1730.87 32.66
A 4 920.00 230.00
B 5 248.22 48.99
C 4 16466.00 189.00
Благодаря полезным советам я выяснил, как найти среднюю выручку для брендов в течение нескольких дней, используя данные.Таблица:
new_df<-df[,(mean(Rev)), by=list(Brand,Day)]
Теперь я хотел бы создать новую таблицу, в которой есть столбец, содержащий оценку коэффициента из OLS регрессия оборотов по дням для каждой марки. Я попытался сделать это следующим образом:
new_df2<-df[,(lm(Rev~Day)), by=list(Brand)]
Это кажется не совсем правильным. Мысли? Я уверен, что это что-то очевидное, что я пропустил.
3 ответа:
Я думаю, что это то, что вы хотите:
new_df2<-df[,(lm(Rev~Day)$coefficients[["Day"]]), by=list(Brand)]
lm
возвращает полный объект модели, вам нужно детализировать его, чтобы получить одно значение из каждой группы, которое можно превратить в столбец.
У вас есть несколько вариантов.
Можно сохранить весь объект модели в виде списка внутри данных.Таблица
models <- df[, list(model = list(lm(Rev ~ Day))),by = Brand] models Brand model 1: A <lm> 2: B <lm> 3: C <lm> # look at the models models[,print(model[[1]]),by= Brand] Call: lm(formula = Rev ~ Day) Coefficients: (Intercept) Day 2804.2 -538.3 Call: lm(formula = Rev ~ Day) Coefficients: (Intercept) Day 1741.5 -263.5 Call: lm(formula = Rev ~ Day) Coefficients: (Intercept) Day -3698 4653
Вы можете сохранить коэффициенты
models[, {coefs <- coef(model[[1]]) list(coefs = coefs, name = names(coefs))}, by = Brand] ## Brand coefs name ## 1: A 2804.1667 (Intercept) ## 2: A -538.3333 Day ## 3: B 1741.5291 (Intercept) ## 4: B -263.5251 Day ## 5: C -3697.8621 (Intercept) ## 6: C 4653.1989 Day
Или вы можете просто извлечь список моделей
models[,model]
> DF <- read.table(text="Brand Day Rev RVP + A 1 2535.00 195.00 + B 1 1785.45 43.55 + C 1 1730.87 32.66 + A 2 920.00 230.00 + B 2 248.22 48.99 + C 3 16466.00 189.00 + A 1 2535.00 195.00 + B 3 1785.45 43.55 + C 3 1730.87 32.66 + A 4 920.00 230.00 + B 5 248.22 48.99 + C 4 16466.00 189.00", header=TRUE) > DT <- data.table(DF) > Mod.tbl<-DT[, list(mod=list(lm(Rev~Day))), by=list(Brand)] > Mod.tbl[ , coef(mod[[1]])["Day"], by= Brand] Brand V1 1: A -538.3333333 2: B -263.5251429 3: C 4653.1989474