循环创建回归模型
问题描述:
我有一个由x和区域和通道的唯一组合组成的单个数据框。我需要使用某种循环为每个x组合创建一个独特的回归模型。循环创建回归模型
region channel date trials spend
EMEA display 2015-01-01 62 17875.27
APAC banner 2015-01-01 65 18140.93
某事的
i=1
j=1
for r in region{
for ch in channel{
df1 = df[df$region == r & df$channel == ch, ]
model[[i,j]] = lm(trials ~ spend, data = df1)
j = j+1}
i = i+1 }
效果如果有人也知道存储的唯一标识符,如区域+通道,以帮助确定回归模型,将是非常有帮助太的一种方式。
答
使用split
数据分成2名柱的组合作为列表,然后循环中运行lm
- lapply
用于数据的每个子集,请参阅下面的例子:
# dummy data
set.seed(1)
d <- data.frame(region = letters[1:2],
channel = LETTERS[3:6],
trials = runif(20),
spend = runif(20))
# split by 2 column combo
dSplit <- split(d, paste(d$region, d$channel, sep = "_"))
# run lm for each subset
res <- lapply(dSplit, lm, formula = trials ~ spend)
# check names
names(res)
# [1] "a_C" "a_E" "b_D" "b_F"
# lm result for selected combo "a_C"
res$a_C
# Call:
# lm(formula = trials ~ spend, data = i)
#
# Coefficients:
# (Intercept) spend
# 0.3360 0.2444
答
甲plyr
溶液:
set.seed(1)
d <- data.frame(region = letters[1:2],
channel = LETTERS[3:6],
trials = runif(20),
spend = runif(20))
使结果的列表(即,由区域和信道分割d
,在与指定的公式每个块运行lm
,返回结果作为一个列表)
library(plyr)
res <- dlply(d,c("region","channel"), lm,
formula=trials~spend)
提取系数作为一个数据帧:
ldply(res,coef)
## region channel (Intercept) spend
## 1 a C 0.3359747 0.2444105
## 2 a E 0.7767959 -0.3745419
## 3 b D 0.7409942 -0.8084751
## 4 b F 1.0797439 -1.0872158
注意,结果中有您想要的区域/信道标志...
+0
感谢这是完美 – Marcus
+0
我欣赏反馈意见,但SO政策是为了避免使用评论“谢谢你”;如果答案有用,建议的渠道是upvote,如果它回答您的问题/解决您的问题,请点击复选标记 –
什么你到了那里看起来像一个很好开始;你能告诉我们它在哪里坏了吗?能否请您包括数据将为我们提供一个[重复的例子(http://*.com/questions/5963269/how-to-make-a-great-r-reproducible-example)? –
使用此代码我得到以下错误'中的错误模型[[I,J] = LM(试验〜支出,数据= DF1):[[]]下标出界 ' – Marcus