与emmeans交互绘制缺少类别的结果 第一季度第二季度

问题描述

我有一个相当“混乱的数据”。我有一个模型,其中两个因素之间存在相互作用。我想绘制它。所以:

Uri

enter image description here

使用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 方面仅具有Insurancepayments级别(而其他级别保持不变)。

解决方法

首先,请不要重复使用相同的变量名称做多件事;这使得事情无法重现。如果您修改数据集,模型或其他内容,请给它起一个新名称,以便区分。

第一季度

如所记录,比较箭头不能始终计算。这是一个例子。我建议以其他方式显示结果,例如使用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")

enter image description here

plot(l2,by = "tipo")

## Error: Aborted -- Some comparison arrows have negative length!
## (in group "payments")