我希望使用像这样的数据集(使用40k观察值)评估logit回归中变量的边际效应:
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花时间完成工作,但最终确实如此。
但是,在at
中使用margins
参数时问题仍然存在。我怀疑这是因为回归有factor
个变量。我想我可能会使用我将放在at
命令中的参数手动计算我的因变量的预测值,只是为了掌握结果。
欢迎任何建议的替代方案。
答案 0 :(得分:1)
我想我发现了这个问题。您的代码产生了错误,因为您的因子DESCRICAO_SEXO
只有一个级别:
contrasts<-
中的错误(*tmp*
,值= contr.funs [1 + isOF [nn]]):
对比只能适用于具有2级或更多级别的因素
接下来,我建议您创建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'))
但是,它仍然会发出以下警告:
警告消息:glm.fit:拟合概率数字0或1 发生
答案 1 :(得分:0)
我遇到了同样的问题,做了两件事来解决它。首先,我将R更新到最新版本,然后创建了一个新的数据框,其中包含我感兴趣的变量的所有组合,而不是我的原始数据框具有超过300000个观察值,例如:
newdata<- with(d1,data.frame(dummy.eleito= rep(seq(from =0,to = 1, by = 1)
,length(levels(Escolaridade)))
,Escolaridade= as.character(sapply(levels(Escolaridade),rep,2))))
然后,我在新数据集上使用了边距,因此它为我感兴趣的所有组合提供了边际效应,而且用时不长。