1

下午好,我在使用 NNET 包执行逻辑回归时得到的输出有问题。我想CategoryHS_TR (Return Period)and预测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

当我运行模型>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

现在我有了多项式,我想知道 SLR 和 HS_TR 的特定场景 (d3) 的预测类别。我定义了 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。有人知道我为什么得到它吗?

如果有人知道我如何解决这个问题,以便我可以解决它。先感谢您。

4

1 回答 1

1

你有分离/完全分离的问题(谷歌这个词来获取更多信息。这个页面给出了一个很好的介绍,其中包含这个引用:

当结果变量完全分离一个预测变量或预测变量的组合时,就会发生完全分离。

如果您查看数据,例如使用

> 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。您需要指定更简单的模型或获取更多数据以提供稳定的拟合。

在您的情况下,您的输出只有两个可能的类别,因此您应该能够拟合对数线性模型或逻辑回归模型并获得相同的结果。如果您创建一个新变量CatCategory那么您会看到一个警告,指出您正确的方向。

> glm(Cat ~HS_TR + SLR, data=x.sub, family="binomial") 
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred 

我认为multinom没有检测到数据中的问题。但是,如果您查看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缺乏某种检查。

于 2017-05-14T18:23:49.347 回答