在 R 中绘制逻辑回归交互(分类)

机器算法验证 r 回归 物流 数据可视化 分类数据
2022-04-18 12:26:32

您好我有以下逻辑模型与分类变量交互,我希望在 R 中绘制,但我正在努力寻找任何解决方案 -

M <-glm(disorder~placement*ethnic, family=binomial)

种族变量具有三个类别(白人、黑人和其他)“其他”类别与变量放置相互作用以产生显着的结果。

我尝试了以下方法,但没有显示一行:

disorder_1 <- cbind(disorder) - 1
any_ic_dat <- as.data.frame(cbind(ethnic,disorder_1,placement))
g <- glm(disorder_1~placement+ethnic, family=binomial,any_ic_dat)
plot(placement,disorder_1)


x <- seq(0,19, length.out=1500)
mydata <- data.frame(ethnic='Other', placement=x)
y.ethnic<-predict(g,newdata=mydata)
lines(x,y.ethnic, col='red')

我将如何在图表上绘制它?

先感谢您!

莎拉

3个回答

placement您可以分别为 的每个级别绘制拟合概率ethnic创建一些虚拟数据并拟合您的模型:

set.seed(1)
nn <- 100
placements <- seq(0,10)
foo <- data.frame(disorder=sample(c(0,1),size=nn,replace=TRUE),
placement=sample(placements,size=nn,replace=TRUE),
ethnic=sample(c("White","Black","Other"),size=nn,replace=TRUE))
M <- glm(disorder~placement*ethnic, family=binomial, data=foo)

绘制拟合:

plot(placements,
predict(M,newdata=data.frame(ethnic="White",placement=placements),type="response"),
type="o",pch=21,bg="white",ylab="",ylim=c(0,1))
points(placements,
predict(M,newdata=data.frame(ethnic="Black",placement=placements),type="response"),
type="o",pch=21,bg="black")
points(placements,
predict(M,newdata=data.frame(ethnic="Other",placement=placements),type="response"),
type="o",pch=21,col="red",bg="red")
legend(x="topleft",pch=21,col=c("black","black","red"),pt.bg=c("white","black","red"),
legend=c("White","Black","Other"))

结果:逻辑交互

一个很好的附加方法是引导您的数据以获得拟合的置信区间。

我建议在vcd包装中提供马赛克图。

有一个小插图和几张纸;输入 ??mosaic 将显示它们。一个非常简单的例子是

library(vcd)
data(HairEyeColor)

HairEye <- margin.table(HairEyeColor, c(1,2))

mosaic(HairEye, main = "Basic Mosaic Display of Hair Eye Color data")

另一个选项是 @FrankHarrelleffects包中的绘图功能,例如

library(effects)

titanic <- glm(survived ~ (passengerClass + sex + age)^2, 
   data=Titanic, family=binomial)

titanic.all <- allEffects(titanic, typical=median, 
               given.values=c(passengerClass2nd=1/3, passengerClass3rd=1/3, sexmale=0.5))

plot(titanic.all, ticks=list(at=c(.01, .05, seq(.1, .9, by=.2), .95, .99)), ask=FALSE)

尽管这可能更适合序数或连续 IV。

@Stephan Kolassa 的回答非常好。在这里,我建立了另外两个绘图想法:

  1. 查看 x 变量 Placements 的每个级别的相对 N 大小会很有帮助。这些大小可以使用井号表示。

  2. 将组(此处为种族)标签显示在他们的行旁边而不是在单独的图例中会很方便。这对于更大数量的组变得越来越适用。在此处输入图像描述

在这种情况下,我将随机种子设置为 6,并绕过了“glm() 和“predict()”命令。相反,我使用低平滑器绘制了移动平均值。我还将 N 从 100 更改为200 以更好地显示情节特征。

library(Hmisc)
  plsmo(foo$placement, foo$disorder, datadensity = T, group = foo$ethnic, 
  col=c('black', 'red','tan'), xlab = 'Placements', ylab ='Incidence of Disorder',
  ylim = c(0,1))