2017-10-18 198 views
0

我想用這樣的數據集(與40K的意見),以評估在分對數迴歸變量的邊際效應:邊距軟件包命令花費太長時間運行

d1<- structure(list(dummy.eleito = c(1, 0, 0, 0, 0, 1, 1, 1, 1, 0), 
        dummy.tratamento = c(1, 1, 0, 0, 0, 0, 0, 0, 0, 0), 
        Escolaridade = c("SUPERIOR_INCOMPLETO", "FUNDAMENTAL_INCOMPLETO", 
             "SUPERIOR_COMPLETO", "FUNDAMENTAL_INCOMPLETO", 
            "SUPERIOR_COMPLETO", "SUPERIOR_COMPLETO", "SUPERIOR_INCOMPLETO", 
            "SUPERIOR_INCOMPLETO", "SUPERIOR_COMPLETO", "SUPERIOR_INCOMPLETO"), 
        Raca = c("Preta_Parda", "Preta_Parda", "Preta_Parda", "Preta_Parda", 
           "Preta_Parda", "Preta_Parda", "BRANCA", "BRANCA", "BRANCA", "BRANCA"), 
        DESCRICAO_SEXO = c("MASCULINO", "MASCULINO", "MASCULINO", 
             "MASCULINO", "MASCULINO", "MASCULINO", "MASCULINO", 
             "MASCULINO", "MASCULINO", "MASCULINO"), 
        votos.cidade = c(6483, 6483, 6483, 6483, 6483, 6483, 4735, 
             4735, 4735, 4735), 
        dummy.prefeito = c(0,1, 0, 0, 0, 1, 0, 0, 0, 1), 
        Intensidade.Trat0.Mun = c(0.0152671755725191, 0.0152671755725191, 0.0152671755725191, 0.0152671751, 
               0.0152671755725191, 0.01526717, 0.02857142856, 0.028571428, 0.028571, 0.0285714), 
        Var.Receitas = c(3.25607407, 11.424, 4.5549, -0.832116880227985, 5.78901737320675, -0.02459246, 
             1.151009, -0.3058719238, 0.742947247, -0.2711)), 
       .Names = c("dummy.eleito", "dummy.tratamento", "Escolaridade", "Raca", 
          "DESCRICAO_SEXO", "votos.cidade", "dummy.prefeito", "Intensidade.Trat0.Mun", 
          "Var.Receitas"), row.names = c(NA, 10L), class = "data.frame") 

我運行使用glm:

以下回歸
model <- glm(dummy.eleito ~ dummy.tratamento + factor(Escolaridade) + 
         factor(Raca) + factor(DESCRICAO_SEXO) + 
         votos.cidade + dummy.prefeito + 
         dummy.tratamento:Intensidade.Trat0.Mun + 
         Var.Receitas + Var.Receitas:dummy.tratamento, 
         data = d1, 
         family = binomial(link = 'logit')) 

然後我在某些點計算邊際效應:

m <- margins(model, at = list(dummy.tratamento = 1, 
           Intensidade.Trat0.Mun = fivenum(d1$Intensidade.Trat0.Mun)        
           Var.Receitas = fivenum(d1$Var.Receitas)) 

R試圖通過整個晚上運行...在早上,仍然沒有。這是正常的嗎?任何可能的原因?數據是否太複雜?或者,也許迴歸公式本身?即使我運行margins而不使用at規範,它仍然不會。

任何幫助?


編輯:

更新R後,它的最新版本,這就是我到底得了:

使用整個數據集運行我需要的迴歸和margins命令,R需要時間來完成這項工作,但最終確實如此。

但是,在margins內使用參數at時,問題仍然存在。我懷疑這是因爲迴歸具有factor變量。我想我可能會使用我將放在at命令中的參數來手動計算我的因變量的預測值,以便掌握結果。

歡迎任何建議的替代方案。

+0

在你的問題中包括一個[最小可重現的例子](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)將增加你獲得答案的機會。 – jsb

+0

@jsb只包括一個與原始數據集的一小部分 –

回答

1

我想我已經找到了問題。因爲你有一個因素DESCRICAO_SEXO僅有一層您的代碼產生一個錯誤:

Error in contrasts<- (*tmp* , value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels

接下來,我建議你創建你glm通話之外的因素:

d1$dummy.eleito <- as.factor(d1$dummy.eleito) 
d1$dummy.tratamento <- as.factor(d1$dummy.tratamento) 
d1$Escolaridade <- as.factor(d1$Escolaridade) 
d1$Raca <- as.factor(d1$Raca) 
d1$DESCRICAO_SEXO <- as.factor(d1$DESCRICAO_SEXO) 
d1$dummy.prefeito <- as.factor(d1$dummy.prefeito) 

運行下面的模型(不DESCRICAO_SEXO)工作原理:

model <- glm(dummy.eleito ~ dummy.tratamento + Escolaridade + 
Raca + votos.cidade + dummy.prefeito + Intensidade.Trat0.Mun + 
    Var.Receitas, data = d1, family = binomial(link = 'logit')) 

但是,它仍然拋出以下警告:

Warning message: glm.fit: fitted probabilities numerically 0 or 1 occurred

您可以閱讀關於此警告herehere。此警告可能只發生在您提供的小數據集中,而不發生在完整數據集中。你必須嘗試看看。

+0

用完整的數據集運行此迴歸我沒有得到此警告。但是,我的主要問題依然存在:'margin'行代碼不會運行 –

+0

你會得到什麼錯誤?我不熟悉'margins'函數。 – jsb

+0

「邊距」是屬於同名軟件包的函數。 (https://cran.r-project.org/web/packages/margins/vignettes/TechnicalDetails.pdf)。 它實際上不是一個錯誤,R只是不斷嘗試永遠運行的命令,但上房它......不就是它崩潰,它只是不斷永遠 –