如何在nnet包的multinom()中设置特定的对比度?

doc*_*ate 4 r nnet multinomial logistic-regression

我有一个需要分类的3类问题。我想在nnet软件包中使用多项逻辑回归。班级结局有3个因素,P,Q,R。我想将Q作为基本因素。

所以我尝试将它写成这样的对比:

P <- c(1,0,0)
R <- c(0,0,1)
contrasts(trainingLR$Class) <- cbind(P,R)
Run Code Online (Sandbox Code Playgroud)

检查了它:

> contrasts(trainingLR$Class)
  P R
P 1 0
Q 0 0
R 0 1 
Run Code Online (Sandbox Code Playgroud)

现在multinom()

library(nnet)
multinom(Class ~., data=trainingLR)
Run Code Online (Sandbox Code Playgroud)

输出:

> multinom(Class ~., data=trainingLR)
# weights:  39 (24 variable)
initial  value 180.172415 
iter  10 value 34.990665
iter  20 value 11.765136
iter  30 value 0.162491
iter  40 value 0.000192
iter  40 value 0.000096
iter  40 value 0.000096
final  value 0.000096 
converged
Call:
multinom(formula = Class ~ ., data = trainingLR)

Coefficients:
  (Intercept)        IL8     IL17A      IL23A     IL23R
Q   -116.2881 -16.562423 -34.80174   3.370051  6.422109
R    203.2414   6.918666 -34.40271 -10.233787 31.446915
       EBI3     IL6ST     IL12A   IL12RB2     IL12B
Q -8.316808  12.75168 -7.880954  5.686425 -9.665776
R  5.135609 -20.48971 -2.093231 37.423452 14.669226
    IL12RB1    IL27RA
Q -6.921755 -1.307048
R 15.552842 -7.063026

Residual Deviance: 0.0001922658 
AIC: 48.00019 
Run Code Online (Sandbox Code Playgroud)

问题:
正如您所看到的,由于P类未出现在输出中,这意味着在处理R中的因子变量时,它被视为基,按字母顺序第一个按字母顺序处理,而Q类视为在这种情况下,如何使它成为其他两个级别的基础?

Val*_*tin 6

我试图避免使用对比度,而是发现了relevel用于选择所需水平作为基准的功能。以下代码

trainingLR$Class <- relevel(trainingLR$Class, ref = "P")
Run Code Online (Sandbox Code Playgroud)

应该将“ P”级别设置为基准。因此,请使用“ Q”或“ R”电平尝试相同的操作。

R文档(?relevel)提到“这对于以contr.treatment第一级为参考的对比很有用。”

尽管现在可能无法回答,但由于其他人可能有兴趣,因此我认为值得分享上述选择。