glm.fit Warning Messages in R: algorithm didn’t converge & probabilities 0/1
Posted Data+Science+Insight
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了glm.fit Warning Messages in R: algorithm didn’t converge & probabilities 0/1相关的知识,希望对你有一定的参考价值。
glm.fit Warning Messages in R: algorithm didn’t converge & probabilities 0/1
# 仿真数据
set.seed(6523987) # Create example data
x <- rnorm(100)
y <- rep(1, 100)
y[x < 0] <- 0
data <- data.frame(x, y)
head(data) # Head of example data
# 构建模型;
# 为什么在R编程语言中拟合回归模型时会出现glm.fit警告:“算法不收敛,拟合的概率为0或1”。让我们假设我们想用glm函数估计一个二项式模型。
glm(y ~ x, data, family = "binomial") # Perfect predictions
# Warning messages:
# 1: glm.fit: algorithm did not converge
# 2: glm.fit: fitted probabilities numerically 0 or 1 occurred
******************************************************************************
Warning message:
"glm.fit: algorithm did not converge"
Warning message:
"glm.fit: fitted probabilities numerically 0 or 1 occurred"
Call: glm(formula = y ~ x, family = "binomial", data = data)
Coefficients:
(Intercept) x
-11.97 734.42
Degrees of Freedom: 99 Total (i.e. Null); 98 Residual
Null Deviance: 138
Residual Deviance: 1.938e-07 AIC: 4
这是因为变量x完美地预测了变量y。
当我们回到数据创建过程时,您可以看到这一点。已经指定当x小于0时,y总是0。因此,该模型完美地预测了哪些y值是0,哪些y值是1。
我们可以通过在数据中添加一些随机噪声来说明这个情况:
data_new <- data # Add randomness to data
data_new$x <- data_new$x + rnorm(100)
# 重新构建模型;
glm(y ~ x, data_new, family = "binomial") # No warning message
********************************************************************
Call: glm(formula = y ~ x, family = "binomial", data = data_new)
Coefficients:
(Intercept) x
0.09066 1.16241
Degrees of Freedom: 99 Total (i.e. Null); 98 Residual
Null Deviance: 138
Residual Deviance: 98.22 AIC: 102.2
这一次,我们在RStudio控制台中没有得到警告消息。
那么怎样才能解决这个问题呢?
这在很大程度上取决于所使用的特定数据集的结构。然而,建议你看一下数据中变量的成对相关性,看看这些相关性中是否有一些不自然的高。
经常发生的情况是,变量被意外地包含到一个模型中(信息泄露)。尝试识别这些变量,并在没有这些变量的情况下再次运行我们的模型,直到警告消息不再出现。
参考:logistic回归报错问题:Warning messages: 1: glm.fit:算法没有聚合 2: glm.fit:拟合機率算出来是数值零或一
参考: glm.fit Warning Messages in R: algorithm didn’t converge & probabilities 0/1
参考:glm
以上是关于glm.fit Warning Messages in R: algorithm didn’t converge & probabilities 0/1的主要内容,如果未能解决你的问题,请参考以下文章
CentOS -bash: warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8)
翻译自mos文章Linux的/var/log/messages是空的(0k),messages.0, messages.1也是空的
翻译自mos文章Linux的/var/log/messages是空的(0k),messages.0, messages.1也是空的