我的数据是由ID指定的每个大型参与者集合的x值(shift.magnitude)和y值(response.sign)的集合。我正在使用以下命令分别对每个参与者执行逻辑回归:
do(fitmod = tidy(glm(response.sign~shift.magnitude,family=binomial(link="logit"), data = .))) %>%
unnest(fitmod) %>%
pivot_wider(id_cols = ID, names_from = term, values_from = c(estimate))
我想把它变成一个岭回归使用glmnet包,但我不知道如何适应这个命令与glmnet工作。我为数据添加了一列,因为glmnet不会与单个预测器一起工作,但我留下的问题是,当我试图用代码
制作x向量时x <- model.matrix(response.sign~shift.magnitude+ones, ID_grouped)[,-1]
不再是分组形式。如何使这个分组操作适应glmnet?
如何将glmnet调用包装在一个函数中,并使用map()
在每个组上调用该函数?
f <- function(x,y, alpha=0) {
x=model.matrix(y~x)
glmnet(x,y, family="binomial", alpha=alpha)
}
df %>%
nest(data=-ID) %>%
mutate(fitmod = map(data, ~f(.x$shift.magnitude, .x$response.sign)))
这将返回一个嵌套框架,其中包含每个组的模型,然后您可以使用unnest()
等操作。
输出:
ID data fitmod
<int> <list> <list>
1 12 <tibble [47 x 2]> <lognet>
2 7 <tibble [55 x 2]> <lognet>
3 13 <tibble [47 x 2]> <lognet>
4 9 <tibble [54 x 2]> <lognet>
5 14 <tibble [45 x 2]> <lognet>
6 6 <tibble [45 x 2]> <lognet>