2017-08-10 96 views
0

我想在我的数据框中的几个因子水平上运行一个逻辑回归模型,我得到的是每个因子水平的复制结果而不是独特模型的参数。它发生时,我用的是钻石的数据集,并运行相同的代码,这样的:使用dplyr的因子水平的回归模型:得到重复的错误

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 

我坚持,为什么我在这个特殊的问题。

回答

1

问题出在您的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) 

每当使用do需要引用使用.分组的数据帧。由于您的代码当前正在读取,因此您正在引用原始的非分组框架,而不是通过管道传递给do的框架。例如,您不能只需要拨打E列,则需要使用.$E。另一种解决方案是glm(.$E~.$price)

+0

谢谢你的工作。我想在模型中运行约20个ID。这是通过仅使用期望的变量过滤数据库并运行它的最佳方式吗? – elliot

+0

@elliot这可能是最简单的。你可以使用dplyr函数'select()'。另一种方法是单独写出公式并将其分配给一个变量,然后在您的函数中使用它。这对你来说可能更干净,特别是如果你想改变公式。 –

+0

对不起,继续询问这些后续工作,但是我在R中编写公式变量的方法让我停下脚步。我正在使用粘贴在我的数据框中创建一个公式,如下所示: r <-paste(“。$”,colnames(data [-c(1,14,15)]),sep =“”)%> %as.vector() ID <-paste(r,collapse =“+”)%>%as.vector() 公式< - paste(“。$ Promoter.score〜”,ID,sep =“”) 我得到这个错误:错误if(模型)适合$ model < - mf: 参数不能解释为逻辑 有关为什么会发生这种情况的任何想法?非常感谢你。 – elliot