绘制具有多个预测变量的 Logit 模型的概率曲线

机器算法验证 r 可能性 数据可视化 物流
2022-03-05 23:53:16

我有以下概率函数:

Prob=11+ez

在哪里

z=B0+B1X1++BnXn.

我的模型看起来像

Pr(Y=1)=11+exp([3.92+0.014×(bid)])

这通过如下图所示的概率曲线可视化。

在此处输入图像描述

我正在考虑在我的原始回归方程中添加几个变量。假设我将性别(分类:F 和 M)和年龄(分类:< 25 和 > 26)添加到模型中,我最终得到:

Pr(Y=1)=11+exp([3.92+0.014×(bid)+0.25×(gender)+0.15×(age)])

在 RI 中可以生成类似的概率曲线,当考虑所有三个预测变量时,它将告诉我 Y = 1 的概率。我迷失的地方是我想找到这些变化的每一种可能排列的概率。

那么当bid = 1,gender = M,age >= 26 时,Y = 1 的概率是多少?同样,当bid = 2,gender = F,age >= 26 时,Y = 1 的概率是多少?

我想生成一个概率曲线,让我可以将其可视化。

任何人都可以帮忙吗?我可能完全误解了可以从 logit 模型中收集到什么样的信息,但请告诉我我是否也误解了这个理论。

1个回答

幸运的是,您只有一个连续协变量。因此,您可以只制作四个(即 2 SEX x 2 AGE)图,每个图都有 BID 和之间的关系。或者,您可以制作一个带有四条不同线条的图(您可以使用不同的线条样式、粗细或颜色来区分它们)。您可以通过求解一系列 BID 值的四种组合中的每一种的回归方程来获得这些预测线。 p(Y=1)

更复杂的情况是您有多个连续协变量。在这种情况下,通常有一个特定的协变量在某种意义上是“主要的”。该协变量可用于 X 轴。然后求解其他协变量的几个预先指定的值,通常是平均值和 +/- 1SD。其他选项包括各种类型的 3D 绘图、协同绘图或交互式绘图。

我在这里对另一个问题的回答提供了有关用于探索二维以上数据的一系列图的信息。您的情况本质上是类似的,只是您对呈现模型的预测值而不是原始值感兴趣。

更新:

我在 R 中编写了一些简单的示例代码来制作这些图。让我注意一些事情:因为“行动”发生得早,我只运行了 700 的 BID(但可以随意将其扩展到 2000)。在此示例中,我使用您指定的函数并将第一个类别(即女性和年轻)作为参考类别(这是 R 中的默认值)。正如@whuber 在他的评论中所说, LR 模型在对数赔率上是线性的,因此您可以使用第一个预测值块,并根据您的选择使用 OLS 回归进行绘图。logit 是链接函数,它允许您将模型连接到概率;第二个块通过 logit 函数的倒数将 log 赔率转换为概率,即通过取幂(变成赔率)然后将赔率除以 1+赔率。(如果您想了解更多信息,我会 在此处讨论链接功能和此类模型的性质。)

BID = seq(from=0, to=700, by=10)

logOdds.F.young = -3.92 + .014*BID
logOdds.M.young = -3.92 + .014*BID + .25*1
logOdds.F.old   = -3.92 + .014*BID         + .15*1
logOdds.M.old   = -3.92 + .014*BID + .25*1 + .15*1

pY.F.young = exp(logOdds.F.young)/(1+ exp(logOdds.F.young))
pY.M.young = exp(logOdds.M.young)/(1+ exp(logOdds.M.young))
pY.F.old   = exp(logOdds.F.old)  /(1+ exp(logOdds.F.old))
pY.M.old   = exp(logOdds.M.old)  /(1+ exp(logOdds.M.old))

windows()
  par(mfrow=c(2,2))
  plot(x=BID, y=pY.F.young, type="l", col="blue", lwd=2, 
       ylab="Pr(Y=1)", main="predicted probabilities for young women")
  plot(x=BID, y=pY.M.young, type="l", col="blue", lwd=2, 
       ylab="Pr(Y=1)", main="predicted probabilities for young men")
  plot(x=BID, y=pY.F.old, type="l", col="blue", lwd=2, 
       ylab="Pr(Y=1)", main="predicted probabilities for old women")
  plot(x=BID, y=pY.M.old, type="l", col="blue", lwd=2, 
       ylab="Pr(Y=1)", main="predicted probabilities for old men")

这会产生以下图:
在此处输入图像描述
这些函数非常相似,以至于我最初概述的四平行图方法不是很独特。以下代码实现了我的“替代”方法:

windows()
  plot(x=BID, y=pY.F.young, type="l", col="red", lwd=1, 
       ylab="Pr(Y=1)", main="predicted probabilities")
  lines(x=BID, y=pY.M.young, col="blue", lwd=1)
  lines(x=BID, y=pY.F.old,   col="red",  lwd=2, lty="dotted")
  lines(x=BID, y=pY.M.old,   col="blue", lwd=2, lty="dotted")
  legend("bottomright", legend=c("young women", "young men", 
         "old women", "old men"), lty=c("solid", "solid", "dotted",
         "dotted"), lwd=c(1,1,2,2), col=c("red", "blue", "red", "blue"))

反过来,这个情节:
在此处输入图像描述