Logistic回归如何使用二项式分布?


19

我试图了解逻辑回归如何使用二项式分布。

假设我正在研究鸟巢的成功。嵌套成功的概率为0.6。使用二项分布,我可以计算n次试验(研究的巢数)后r次成功的概率。

但是,在建模环境中如何使用二项式分布?假设我想知道平均温度如何影响筑巢成功,并且我使用逻辑回归研究了这个问题。

在我描述的上下文中,逻辑回归如何使用二项式分布?

我正在寻找一个直观的答案,因此没有方程式的答案!我认为方程式只有在直观的理解水平上才有用。



2
@ user777是一个很好的引用线程,但我认为,如果OP专门要求提供不带方程式的解释,则它可能无法重复工作。但是,一个很好的问题是,是否可以不用任何方程很好地解释二项式分布的作用。当然,可以给LR一个直观的解释,但是二项式w / i LR的作用本质上是数学上的。
gung-恢复莫妮卡

@gung向luciano致歉。当我考虑可能的答案时,看到“二项分布”覆盖了“无方程式”。显然,这与OP的要求不一致。
Sycorax说恢复Monica 2014年

我觉得我已经掌握了使用对数比值标度进行回归然后从对数标度转换为0-1标度的想法。但是我一直按照“错误按二项分布”的方式阅读。错误如何按二项分布?
卢西亚诺

5
无论您读了什么书,都将其丢弃。
Scortchi-恢复莫妮卡

Answers:


7

假设您观察到多个处于不同平均每日温度巢。巢成功的概率π t 如何取决于温度t?(如果嵌套是独立的,则将温度为t时成功的嵌套数量按二项式分布,其中n等于观察到的嵌套数量和成功概率π t 。)tπ(t)ttnπ(t)

逻辑回归是一种方法(使用逻辑函数),该方法通过拉伸和移动逻辑曲线来指定成功概率作为温度的函数,并且需要根据数据估算拉伸和移动的量。


15

没有方程式?kes 让我们来看看:

p

npinip

因为逻辑链接对于二项式族是规范的,所以它甚至更好,因为足够的统计信息的格式非常简单-这使得处理大型样本甚至开发“在线”算法变得很方便。

p

使用逻辑回归,该曲线(链接函数)就是逻辑函数。其他功能也是可能的,并且许多程序包都实现了几种glm功能(如果我没记错的话,R在其功能中内置了三个合适的功能)。


撰写此帖子时,不会损害任何平等符号。


2

您的模型假设嵌套的成功可以看作是一场赌博:上帝将一枚装满硬币的硬币翻转成标有“成功”和“失败”的一面。一个嵌套的翻转结果与任何其他嵌套的翻转结果无关。

不过,鸟类确实有帮助自己的地方:与某些温度相比,这种硬币在某些温度下可能会极大地促进成功。因此,当您有机会在给定温度下观察嵌套时,成功次数等于同一枚硬币的成功翻转次数-该温度下的成功翻转次数。相应的二项式分布描述了成功的机会。也就是说,它通过嵌套的数量确定零成功的概率,一,二,...,依此类推。

通过在该温度下观察到的成功比例,可以合理估计温度与上帝如何装载硬币之间的关系。这是最大似然估计(MLE)。

71033/7.3/73

5,10,15,200,3,2,32,7,5,3

图的顶部显示了在四个观测温度下的MLE。 “适合”面板中的红色曲线根据温度跟踪硬币的装入方式。通过构造,该迹线穿过每个数据点。(在中间温度下它的作用尚不清楚;我已经粗略地连接了这些值以强调这一点。)

这种“饱和”模型不是很有用,正是因为它没有给我们任何依据来估计上帝在中等温度下如何装载硬币。为此,我们需要假设存在某种“趋势”曲线,它将硬币的装载量与温度相关联。

数字

该图的底行符合这种趋势。 趋势受其作用的限制:以适当的(“对数几率”)坐标进行绘制时(如左侧的“ Logit Response”面板中所示),它只能沿着一条直线。任何这样的直线都决定了硬币在所有温度下的负载,如“适合”面板中相应的曲线所示。该载荷反过来决定了所有温度下的二项式分布。最下面的行绘制了观察到巢的温度的那些分布。(黑色虚线标记了分布的期望值,有助于准确地识别它们。您不会在图中的第一行看到这些线,因为它们与红色部分重合。)

现在必须进行权衡:该线可能会紧密通过某些数据点,而只会远离其他数据点。这导致相应的二项分布为大多数观测值分配的概率比以前更低。您可以在10度和15度处清楚地看到这一点:观测值的概率不是最大可能的概率,也不是接近上一行中分配的值。

Logistic回归滑动并摆动可能的线(在“ Logit Response”面板使用的坐标系中),将其高度转换为二项式概率(“ Fit”面板),评估分配给观测值的机会(右侧四个面板) ),并选择能最佳组合这些机会的线。

什么是“最佳”? 简单地说,所有数据的组合概率尽可能大。这样,不允许单个概率(红色部分)真正地很小,但是通常大多数概率不会像饱和模型中那样高。

这是逻辑回归搜索的一次迭代,其中线向下旋转:

图2

1015度,但拟合其他数据的工作却很糟糕。(在5度和20度时,分配给数据的二项式概率是如此之小,您甚至看不到红色线段。)总的来说,这比第一个图中所示的拟合度差得多。


我希望这个讨论能帮助您发展出随着线变化而不断变化的二项式概率的心理印象,同时保持数据不变。通过逻辑回归拟合的线试图使这些红色条总体上尽可能高。因此,逻辑回归与二项式分布族之间的关系是深刻而密切的。


附录:R产生数字的代码

#
# Create example data.
#
X <- data.frame(temperature=c(5,10,15,20),
                nests=c(2,7,5,3),
                successes=c(0,3,2,3))
#
# A function to plot a Binomial(n,p) distribution and highlight the value `k0`.
#
plot.binom <- function(n, p, k0, highlight="#f02020", ...) {
  plot(0:n, dbinom(0:n, n, p), type="h", yaxt="n",
       xlab="Trials", ylab="Probability", ...)
  abline(v = p*n, lty=3, lwd=2)
  if(!missing(k0)) lines(rep(k0,2), c(0, dbinom(k0,n,p)), lwd=2, col=highlight)
}
#
# A function to convert from probability to log odds.
#
logit <- function(p) log(p) - log(1-p)
#
# Fit a saturated model, then the intended model.
#
# Ordinarily the formula for the saturated model would be in the form
# `... ~ factor(temperature)`, but the following method makes it possible to  
# plot the predicted values in a visually effective way.
#
fit.0 <- glm(cbind(successes, nests-successes) ~ factor(round(temperature/5)), 
             data=X, family=binomial)
summary(fit.0)

fit <- glm(cbind(successes, nests-successes) ~ temperature, 
           data=X, family=binomial)
summary(fit)
#
# Plot both fits, one per row.
#
lfits <- list(fit.0, fit)
par.old <- par(mfrow=c(length(lfits), nrow(X)+2))
for (fit in lfits) {
  #
  # Construct arrays of plotting points.
  #
  X$p.hat <- predict(fit, type="response")
  Y <- data.frame(temperature = seq(min(X$temperature), max(X$temperature), 
                                    length.out=101))
  Y$p.hat <- predict(fit, type="response", newdata=Y)  # Probability
  Y$lambda.hat <- predict(fit, type="link", newdata=Y) # Log odds
  #
  # Plot the fit in terms of log odds.
  #
  with(Y, plot(temperature, lambda.hat, type="n", 
               yaxt="n", bty="n", main="Logit Response",
               ylab=expression(hat(lambda))))
  if (isTRUE(diff(range(Y$lambda.hat)) < 6)) {
    # Draw gridlines and y-axis labels
    p <- c( .10, .25, .5, .75, .9)
    q <- logit(p)
    suppressWarnings(rug(q, side=2))
    abline(h=q, col="#d0d0d0")
    mtext(signif(p, 2), at=q, side=2, cex=0.6)
  }
  with(Y, lines(temperature, lambda.hat, lwd=2, col="#f02020"))
  #
  # Plot the data and the fit in terms of probability.
  #
  with(X, plot(temperature, successes/nests, ylim=0:1,
               cex=sqrt(nests), pch=21, bg="Gray",
               main="Fit"))
  with(Y, lines(temperature, p.hat, col="#f02020", lwd=2))
  #
  # Plot the Binomial distributions associated with each row of the data.
  #
  apply(X, 1, function(x) plot.binom(x[2], x[4], x[3], bty="n", lwd=2, col="Gray",
                                     main=paste(x[1], "Degrees")))
}
par(mfrow=par.old)

会有公开的r代码吗?非常感谢。
马克西米利安

1
@Maximilian我添加了代码。
ub
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.