# How to fix a coefficient in an ordinal logistic regression without proportional odds assumption in R?

I want to do an ordinal logistic regression in R without the proportionality odds assumption. I know this can be done directly using vglm() function in R by setting parallel=FALSE.

But my problem is how to fix a particular set of coefficients in this regression setup? For example, say the dependent variable $Y$ is discrete and ordinal and can take values $Y = 1$, $2$, or $3$. If the regressors are $X_{1}$ and $X_{2}$, then the regression equations are

\begin{aligned} {\rm logit} \big( P(Y \leq 1) \big) &= \alpha_{1} + \beta_{11}X_{1} + \beta_{12}X_{2} \\ {\rm logit}\big(P(Y \leq 2) \big) &= \alpha_{2} + \beta_{21}X_{1} + \beta_{22}X_{2} \end{aligned}

I want to set $\beta_{11}$ and $\beta_{22}$ to $1$. Please let me know how can I achieve this. Also if R can't do this, could you also please let me know if I can achieve this in any other statistical software?

• Is $X_1$ continuous or categorical? If the latter, then you might get something close to what you want by running stratified analysis. – Peter Flom Aug 24 '12 at 11:56
• Thanks for the reply Peter. Both X1 and X2 are continuous. – Shanker Aug 24 '12 at 14:11
• So is the point then, that you just want to optimize the fit of this model over alpha? – gung - Reinstate Monica Aug 24 '12 at 14:15
• @Shanker, if you want to fix the coefficient at $1$, then you don't want it in the model - you just want to add the corresponding variable to the right hand side of the equation, which is what offset does. – Macro Aug 24 '12 at 14:38
• @Shanker, sorry - I misread your quote "I want to set $\beta_{11}$ and $\beta_{22}$ to $1$" - I thought these corresponded to the same variable in both equations but I can see that is not the case. Someone may have the right R code to help you here but I suspect no such code exists and the answer to the question (which you may not want to hear), is to write your own code to fit this model. This wouldn't be terribly complicated and if you need help deriving the likelihood equations, etc. then you may consider posting that as a separate question. – Macro Aug 24 '12 at 14:49

I'm not sure I understand what the OP meant when he/she says "I can't use offset because it completely removes the corresponding regressor from the regression." You can fix a parameter using the offset() function in R. I'm using lm() below, but it should work in your model as well.

dat  <- data.frame(x=rnorm(30))
dat$y <- dat$x * 2 + rnorm(30)
free <- lm(y ~ x,dat)
fixed1<- lm(y ~ offset(2 * x),dat)

summary(free)
#Coefficients:
#            Estimate Std. Error t value Pr(>|t|)
#(Intercept)  0.03899    0.17345   0.225    0.824
#x            2.17532    0.18492  11.764 2.38e-12 ***

summary(fixed1)
#Coefficients:
#            Estimate Std. Error t value Pr(>|t|)
#(Intercept)  0.05043    0.17273   0.292    0.772


The fixed parameter doesn't show up in the output, but it's still fixed at 2. Next I'll fix the x parameter to its estimated value in the free model

fixed2<- lm(y ~ offset(2.17532 * x),dat)
summary(fixed2)
#Coefficients:
#            Estimate Std. Error t value Pr(>|t|)
#(Intercept)  0.03899    0.17002   0.229     0.82


Notice the intercept in fixed2 is estimated with the same value as in the free model.