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

参考:R语言plot函数参数合集

参考:glm

参考:Why am I getting “algorithm did not converge” and “fitted prob numerically 0 or 1” warnings with glm?

以上是关于glm.fit Warning Messages in R: algorithm didn’t converge & probabilities 0/1的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中调试的一般建议

CentOS -bash: warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8)

消息框架 message

django 消息框架 message

翻译自mos文章Linux的/var/log/messages是空的(0k),messages.0, messages.1也是空的

翻译自mos文章Linux的/var/log/messages是空的(0k),messages.0, messages.1也是空的