为什么逻辑回归在#failures 为负时仍然有效?
why does logistic regression still work when # failures is negative?
我是 运行 R 中的二项式 glm,在某些情况下失败次数为负数。 (发生这种情况是因为数据中存在一些测量误差)。我希望 glm 函数不适用于这些情况,因为 log(#successes/#failures) 未定义。令我惊讶的是,glm 运行并提供了回归系数的估计值。我不明白为什么 glm 有效,也不明白如何解释结果。
例如:
succ=c(3,0,1,4,2,4,4,7,15,4);
fail=c(1016,1506,1285,1152,868,610,432,211,129,-4);
x_age=c(42.5,47.5,52.5,57.5,62.5,67.5,72.5,77.5,82.5,87.5);
glm(cbind(succ,fail) ~ x_age, family=binomial);
Call: glm(formula = cbind(succ, fail) ~ x_age, family = binomial)
Coefficients:
(Intercept) x_age
-14.15 0.14
Degrees of Freedom: 8 Total (i.e. Null); 7 Residual
Null Deviance: 105
Residual Deviance: 17.7 AIC: 47.3
基本上,我认为程序包作者不会预期负数的失败或成功作为输入。这没有意义,你不应该这样做。
浏览 R 源代码:
每个案例的观察次数为成功次数+失败次数。
n <- y[, 1] + y[, 2]
则y被指定为成功概率:
y <- ifelse(n == 0, 0, y[, 1]/n)
设$s_i$为成功次数。
设 $f_i$ 为失败次数。
在 $s_i + f_i \neq 0$ 的情况下,我们有 $ y_i = \frac{s_i}{s_i + f_i}$.
在 $s_i + f_i = 0$ 的情况下,我们有 $y_i = 0$.
观察它的作用!在您成功 4 次和失败 -4 次的情况下,成功的概率设置为零!
然后设置 mustart:
mustart <- (n * y + 0.5)/(n + 1)
设 $s_i$ 为成功,$f_i$ 为失败。总之,我们有:
如果 $s_i + f_i \neq 0$ 我们有:
$$ \mu^{start}_i = \frac{s_i + .5}{s_i + f_i + 1}$$
而如果 $s_i + f_i = 0$ 我们有:
$$ \mu^{start}_i = \frac{1}{2}$$
然后 c function logit_link
检查 mustart 是否在范围 (0,1) 内。因此,如果您通过了 4 次成功和 -2 次失败,这将引发错误,但不会引发成功 + 失败 = 0 的错误。
if (x < 0 || x > 1)
error(_("Value %g out of range (0, 1)"), x);
无论如何,我看不出这与统计数据有什么关系。在我看来,这段 R 代码似乎有一些不完善的错误检查。
我是 运行 R 中的二项式 glm,在某些情况下失败次数为负数。 (发生这种情况是因为数据中存在一些测量误差)。我希望 glm 函数不适用于这些情况,因为 log(#successes/#failures) 未定义。令我惊讶的是,glm 运行并提供了回归系数的估计值。我不明白为什么 glm 有效,也不明白如何解释结果。
例如:
succ=c(3,0,1,4,2,4,4,7,15,4);
fail=c(1016,1506,1285,1152,868,610,432,211,129,-4);
x_age=c(42.5,47.5,52.5,57.5,62.5,67.5,72.5,77.5,82.5,87.5);
glm(cbind(succ,fail) ~ x_age, family=binomial);
Call: glm(formula = cbind(succ, fail) ~ x_age, family = binomial)
Coefficients:
(Intercept) x_age
-14.15 0.14
Degrees of Freedom: 8 Total (i.e. Null); 7 Residual
Null Deviance: 105
Residual Deviance: 17.7 AIC: 47.3
基本上,我认为程序包作者不会预期负数的失败或成功作为输入。这没有意义,你不应该这样做。
浏览 R 源代码:
每个案例的观察次数为成功次数+失败次数。
n <- y[, 1] + y[, 2]
则y被指定为成功概率:
y <- ifelse(n == 0, 0, y[, 1]/n)
设$s_i$为成功次数。 设 $f_i$ 为失败次数。
在 $s_i + f_i \neq 0$ 的情况下,我们有 $ y_i = \frac{s_i}{s_i + f_i}$.
在 $s_i + f_i = 0$ 的情况下,我们有 $y_i = 0$.
观察它的作用!在您成功 4 次和失败 -4 次的情况下,成功的概率设置为零!
然后设置 mustart:
mustart <- (n * y + 0.5)/(n + 1)
设 $s_i$ 为成功,$f_i$ 为失败。总之,我们有:
如果 $s_i + f_i \neq 0$ 我们有:
$$ \mu^{start}_i = \frac{s_i + .5}{s_i + f_i + 1}$$
而如果 $s_i + f_i = 0$ 我们有: $$ \mu^{start}_i = \frac{1}{2}$$
然后 c function logit_link
检查 mustart 是否在范围 (0,1) 内。因此,如果您通过了 4 次成功和 -2 次失败,这将引发错误,但不会引发成功 + 失败 = 0 的错误。
if (x < 0 || x > 1)
error(_("Value %g out of range (0, 1)"), x);
无论如何,我看不出这与统计数据有什么关系。在我看来,这段 R 代码似乎有一些不完善的错误检查。