用于ologit的vglm(),orm(),polr()和clm()中的系数

时间:2015-04-26 16:36:40

标签: r

我正在使用不同的包进行ologit,它们是boost::bindVGAMrmsMASS,使用包{{1}中的数据集ordinal }}

首先是wine

ordinal

系数为:

vglm()

第二个是library(VGAM) vglmfit <- vglm(rating ~ temp * contact, data = wine, family=cumulative(parallel=TRUE, reverse=TRUE))

  (Intercept):1       (Intercept):2       (Intercept):3       (Intercept):4 
      1.4112568          -1.1435551          -3.3770742          -4.9419773 
       tempwarm          contactyes tempwarm:contactyes 
      2.3212033           1.3474598           0.3595241 

Coef中:

orm()

第三,library(rms) ormfit <- orm(rating ~ temp * contact, data = wine)

                        Coef    S.E.   Wald Z Pr(>|Z|)
y>=2                     1.4113 0.5454  2.59  0.0097  
y>=3                    -1.1436 0.5097 -2.24  0.0248  
y>=4                    -3.3771 0.6382 -5.29  <0.0001 
y>=5                    -4.9420 0.7509 -6.58  <0.0001 
temp=warm                2.3212 0.7009  3.31  0.0009  
contact=yes              1.3475 0.6604  2.04  0.0413  
temp=warm * contact=yes  0.3595 0.9238  0.39  0.6971

COEF:

polr

最后,library(MASS) polrfit <- polr(rating ~ temp * contact, method="logistic", data = wine)

Coefficients:
           tempwarm          contactyes tempwarm:contactyes 
          2.3211214           1.3474055           0.3596357 

Intercepts:
      1|2       2|3       3|4       4|5 
-1.411278  1.143507  3.377005  4.941901 

COEF:

clm()

此外,当vglm()中的library(ordinal) clmfit <- clm(rating ~ temp * contact, link="logit", data = wine) 时,

Coefficients:
           tempwarm          contactyes tempwarm:contactyes 
             2.3212              1.3475              0.3595 

Threshold coefficients:
   1|2    2|3    3|4    4|5 
-1.411  1.144  3.377  4.942 

您可能会注意到reverse=FALSE library(VGAM) vglmfit <- vglm(rating ~ temp * contact, data = wine, family=cumulative(parallel=TRUE, reverse=FALSE)) Coefficients: (Intercept):1 (Intercept):2 (Intercept):3 (Intercept):4 -1.4112568 1.1435551 3.3770742 4.9419773 tempwarm contactyes tempwarm:contactyes -2.3212033 -1.3474598 -0.3595241 vglm()中的系数相同,而reverse=TRUEorm()中的系数是相同。所以有两组系数,唯一的区别是截距的符号。

当我设置polr()时,它确实会反转截距,但同时也是变量的参数,这是我不想要的。

问题是什么?我怎么能得到完全相同的结果?或者我该如何解释呢?

1 个答案:

答案 0 :(得分:1)

这只是参数化的问题。引入有序逻辑回归模型的一种经典方法是假设存在潜在的连续响应

y * = x'b + e

其中e具有标准的逻辑分布。然后,假设如果y *落在截止值a_j-1和a_j之间,则仅通过离散化类别y = j不观察到y *本身。然后,这导致模型方程:

log p(p(y <= j))= a_j - x'b

其他动机导致类似的等式,但P(y> = j)和/或a_j + x'b。这只会导致您在不同实现中观察到的a和/或b系数符号的切换。当然,相应的模型和预测是等效的。您发现哪种解释更容易,这主要取决于品味。