下午好,当我用NNET软件包进行逻辑回归时,我的输出出现了问题。我想预测Category与HS_TR (Return Period)和SLR (Sea Level Rise)。多项式模型,称为fit,是根据来自x.sub子集的信息计算的。可能有4种不同的类别:1、2、3或4。
x.sub
POINTID HS_TR SLR Category
4 10 0.0 3
4 10 0.6 4
4 50 0.0 3
4 50 0.6 4
4 100 0.0 4
4 100 0.6 4当我运行model> fit <- multinom(Category ~ HS_TR + SLR, x.sub, maxit=3000)时,会得到以下结果:
Coefficients:
(Intercept) HS_TR SLR
-30.5791517 0.4130478 62.0976951
Residual Deviance: 0.0001820405
AIC: 6.000182现在我有了多项式,我想知道一个特殊场景(d3)和HS_TR的预测类别。我定义了d3并应用该预测,得到了合理的结果:
d3<-data.frame("HS_TR"=c(10),"SLR"=c(0))
prediction <-(predict(fit,d3))我得到了
> prediction
[[1]]
[1] 3
Level: 3然而,当我计算得到预测prediction <-(predict(fit,d3, type="probs"))的概率时,我得到以下结果:
> prediction
[[1]]
1
0 这是没有意义的,因为它说有概率0。因为我运行的模型给出了CATEGORY的预测,我不明白为什么,概率是0。有人知道我为什么会得到它吗?
如果有人知道我如何解决这个问题,我就能解决它。提前谢谢你。
发布于 2017-05-14 18:23:49
你对分离/完全分离有问题(谷歌这个词用来获取更多信息)。此页给出了一个很好的介绍,其中包含了以下引语:
当结果变量完全分离预测变量或预测变量组合时,就会发生完全分离。
如果您查看数据,例如使用
> xtabs(~ Category + HS_TR + SLR, data=x.sub)
, , SLR = 0
HS_TR
Category 10 50 100
3 1 1 0
4 0 0 1
, , SLR = 0.6
HS_TR
Category 10 50 100
3 0 0 0
4 1 1 1然后,您将看到SLR和HS_TR的组合完全决定了SLR=0.6的结果。您需要指定一个更简单的模型或获取更多的数据来提供稳定的拟合。
在您的例子中,您的输出只有两个可能的类别,因此您应该能够拟合一个日志线性模型或logistic回归模型,并得到相同的结果。如果您创建了一个新变量Cat,它是Category的一个因素,那么您将看到一个警告指向正确的方向。
> glm(Cat ~HS_TR + SLR, data=x.sub, family="binomial")
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred 我认为multinom没有检测到数据中的问题。但是,如果您查看fit的summary,则会发现其中两个参数估计的标准误差非常大。这也表明估计数不稳定,分离可能是一个问题。
> summary(fit)
Call:
multinom(formula = Category ~ HS_TR + SLR, data = x.sub, maxit = 3000)
Coefficients:
Values Std. Err.
(Intercept) -30.5791517 356.932851
HS_TR 0.4130478 5.137396
SLR 62.0976951 634.584184
Residual Deviance: 0.0001820405
AIC: 6.000182 我认为multinom中的收敛检查缺乏某种检查。
https://stackoverflow.com/questions/43956426
复制相似问题