r语言 - 分组数据的惩罚逻辑回归



我的数据是由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>

最新更新