2017-08-10 97 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