#r #dataframe #lm #trend
#r #фрейм данных #lm #тренд
Вопрос:
Вот пример данных:
data<-read.table(textConnection('customer_ID transaction_num sales
Josh 1 $35
Josh 2 $50
Josh 3 $65
Ray 1 $65
Ray 2 $52
Ray 3 $49
Eric 1 $10
Eric 2 $13
Eric 3 $9'),header=TRUE,stringsAsFactors=FALSE)
data$sales<-as.numeric(sub('\$','',data$sales))
Понятно, как получить значения тренда для идентификатора одного из клиентов:
dataTransformed<-dcast(data, transaction_num ~ customer_ID, value.var="sales", fun.aggregate=sum)
transaction_num Eric Josh Ray
1 10 35 65
2 13 50 52
3 9 65 49
fitted(lm(dataTransformed$Eric ~ dataTransformed$transaction_num))
1 2 3
11.16667 10.66667 10.16667
Но я хочу получить фрейм данных со столбцом «значения тренда» для каждого идентификатора клиента вместо столбца «продажи» или просто рядом с ним. Чтобы получить что-то подобное:
customer_ID transaction_num trend
Josh 1 35
Josh 2 50
Josh 3 65
Ray 1 63.3
Ray 2 10.6
Ray 3 10.2
Eric 1 11.2
Eric 2 10.7
Eric 3 10.2
Любая помощь была бы признательна. Спасибо
Ответ №1:
Вы могли бы просто сделать lm
с термином взаимодействия:
data$trend <- fitted(lm(sales ~ customer_ID * transaction_num, data))
data
#> customer_ID transaction_num sales trend
#> 1 Josh 1 35 35.00000
#> 2 Josh 2 50 50.00000
#> 3 Josh 3 65 65.00000
#> 4 Ray 1 65 63.33333
#> 5 Ray 2 52 55.33333
#> 6 Ray 3 49 47.33333
#> 7 Eric 1 10 11.16667
#> 8 Eric 2 13 10.66667
#> 9 Eric 3 9 10.16667
Ответ №2:
Вы могли бы подать заявку lm
для каждого customer_ID
.
library(dplyr)
data %>%
group_by(customer_ID) %>%
mutate(trend = fitted(lm(sales ~ transaction_num)))
# customer_ID transaction_num sales trend
# <chr> <int> <dbl> <dbl>
#1 Josh 1 35 35
#2 Josh 2 50 50.
#3 Josh 3 65 65
#4 Ray 1 65 63.3
#5 Ray 2 52 55.3
#6 Ray 3 49 47.3
#7 Eric 1 10 11.2
#8 Eric 2 13 10.7
#9 Eric 3 9 10.2
Комментарии:
1. Разве это не то же самое, что поместить термин взаимодействия в
lm
?2. Ohh..is это? Я не знаю об этом.
3. Я думаю так — использование
*
оператора в формуле означает, что мы выполняем ANCOVA, поэтому это позволит вычислять перехват и общий наклон регрессии, а также индивидуальные наклоны регрессии для каждого клиента. В любом случае это выглядит как тот же результат ( / — ошибки округления). В любом случае, ваше решение по-прежнему правильное и аккуратное!