使用dplyr的因子水平回归模型:获得重复误差

使用dplyr的因子水平回归模型:获得重复误差,r,dplyr,lm,R,Dplyr,Lm,我试图在我的数据框架中的多个因子水平上运行逻辑回归模型,我得到的是每个因子水平的复制结果,而不是唯一的模型参数。当我使用diamond数据集并运行相同的代码时会发生这种情况,如下所示: diamonds$E <- if_else(diamonds$color=='E',1,0) #Make 'E' binary fitted_models <- diamonds %>% group_by(clarity) %>% #Group

我试图在我的数据框架中的多个因子水平上运行逻辑回归模型,我得到的是每个因子水平的复制结果,而不是唯一的模型参数。当我使用diamond数据集并运行相同的代码时会发生这种情况,如下所示:

diamonds$E <- 
  if_else(diamonds$color=='E',1,0)   #Make 'E' binary

fitted_models <- diamonds %>% 
  group_by(clarity) %>%              #Group by clarity
  do(model=glm(E~price,#regress price on E
           data=diamonds,
           family=binomial(link='logit'))) 

fitted_models %>% 
  tidy(model)%>% 
  View    #use broom package to look
diamonds$E%#按清晰度分组
do(model=glm(E~price,#回归E上的价格
数据=钻石,
族=二项式(link='logit'))
已安装的\u型号%>%
整洁(型号)%%>%
查看#使用扫帚包查看

我一直在想我为什么会遇到这个问题。

问题在您的
glm
电话中。删除
data=diamonds
并将其替换为
data=。

fitted_models <- diamonds %>% 
  group_by(clarity) %>%              #Group by clarity
  do(model=glm(E~price,#regress price on E
               data = .,
           family=binomial(link='logit'))) 

fitted_models %>% 
  tidy(model)
已安装的\u型号%
分组依据(清晰度)%>%#分组依据清晰度
do(model=glm(E~price,#回归E上的价格
数据=。,
族=二项式(link='logit'))
已安装的\u型号%>%
整洁(模型)

无论何时使用
do
,都需要使用
引用分组的数据帧。当代码当前读取时,您引用的是原始的未分组帧,而不是管道传递给
do
的帧。例如,您不能只调用列
E
,您需要使用
$E
。另一种解决方案是
glm(.$E~.$price)

,谢谢您的帮助。我想在模型中运行大约20个ID。通过只使用所需变量过滤数据库并运行它,这是最好的方法吗?@elliot这可能是最简单的方法。您可以使用dplyr函数
select()
。另一种方法是单独写出公式并将其指定给变量,然后在函数中使用该变量。这对你来说可能更干净,尤其是如果你想改变公式的话。很抱歉一直问这些后续问题,但是我在R中编写公式变量的方法让我陷入了困境。我正在使用“粘贴”在我的数据帧中创建一个公式,如下所示:r%as.vector()ID%as.vector()formula抱歉,我不会花时间在那里解析长字符串格式,但我的最佳猜测是您需要将字符串更改为公式。请参见
?as.formula