我正在使用不同的包进行ologit,它们是boost::bind
,VGAM
,rms
和MASS
,使用包{{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=TRUE
和orm()
中的系数是相同。所以有两组系数,唯一的区别是截距的符号。
当我设置polr()
时,它确实会反转截距,但同时也是变量的参数,这是我不想要的。
问题是什么?我怎么能得到完全相同的结果?或者我该如何解释呢?
答案 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系数符号的切换。当然,相应的模型和预测是等效的。您发现哪种解释更容易,这主要取决于品味。