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?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Data+Science+Insight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值