问题描述
我有一个相当“混乱的数据”。我有一个模型,其中两个因素之间存在相互作用。我想绘制它。所以:
Uri
使用f1 <- structure(list(tipo = c("digitables","digitables","payments","Traditionals","Traditionals"),categoria = c("Advice","Digital banks","Exchange","FinTech","Insurance","Investments","Lending","Payments and transfers","Advice","Payments and transfers"),Total = c(63L,450L,279L,63L,36L,108L,567L,549L,35L,250L,155L,20L,60L,315L,305L),Frequencia = c(44L,266L,118L,9L,14L,45L,134L,242L,33L,68L,2L,10L,3L,8L,11L,78L,27L,226L,142L,300L,245L),Perc = c(69.84,59.11,42.29,14.29,38.89,41.67,23.63,44.08,52.38,15.11,0.72,15.87,8.33,7.41,1.94,14.21,77.14,90.4,91.61,28.57,100,75,95.24,80.33),Failure = c(19L,184L,161L,54L,22L,433L,307L,30L,382L,277L,53L,100L,556L,471L,24L,13L,25L,0L,15L,60L)),row.names = c(NA,-24L
),class = "data.frame")
# Packages
library(dplyr)
library(ggplot2)
library(emmeans) #version 1.4.8. or 1.5.1
# Works as expected
m1 <- glm(cbind(Frequencia,Failure) ~ tipo*categoria,data = f1,family = binomial(link = "logit"))
l1 <- emmeans(m1,~categoria|tipo)
plot(l1,type = "response",comparison = T,by = "categoria")
结果:
by="tipo"
如果我按照explanation supplement vignette的建议使用# Doesn't work:
plot(l1,by = "tipo")
Error: Aborted -- Some comparison arrows have negative length!
In addition: Warning message:
Comparison discrepancy in group digitables,Advice - Insurance:
Target overlap = -0.0241,overlap on graph = 0.0073
,它将起作用。但是,它没有向我显示非常重要的箭头。
问题1-有解决方法吗? (或者由于我的数据而不可能吗?)
从最后一张图中可以看出,存在一个概率为1的类别(类别=保险,tipo =传统)。因此,我仅删除数据框的这一行,然后尝试重做绘图,并得到以下结果:
comparison = F
问题2-即使我缺少一个变量(相对于另一个变量),也如何绘制结果?我希望f1 <- f1 %>%
filter(!Perc ==100)
m1 <- glm(cbind(Frequencia,by = "categoria")
Error in if (dif[i] > 0) lmat[i,id1[i]] = rmat[i,id2[i]] = wgt * v1[i] else rmat[i,:
missing value where TRUE/FALSE needed
方面仅具有Insurance
和payments
级别(而其他级别保持不变)。
解决方法
首先,请不要重复使用相同的变量名称做多件事;这使得事情无法重现。如果您修改数据集,模型或其他内容,请给它起一个新名称,以便区分。
第一季度
如所记录,比较箭头不能始终计算。这是一个例子。我建议以其他方式显示结果,例如使用pwpp()
或pwpm()
第二季度
在处理遗失案件时存在错误。该问题已在GitHub版本中修复:
f2 <- f1 %>%
filter(!Perc ==100)
m2 <- glm(cbind(Frequencia,Failure) ~ tipo*categoria,data = f2,family = binomial(link = "logit"))
l2 <- emmeans(m2,~categoria|tipo)
plot(l2,type = "response",comparison = TRUE,by = "categoria")
plot(l2,by = "tipo")
## Error: Aborted -- Some comparison arrows have negative length!
## (in group "payments")