Wie kann man einen Koeffizienten in einer ordinalen logistischen Regression ohne proportionale Quotenannahme in R festlegen?

11

Ich möchte eine ordinale logistische Regression in R ohne die Annahme der Proportionalitätswahrscheinlichkeit durchführen. Ich weiß, dass dies direkt mit der vglm()Funktion in Rdurch Einstellung erfolgen kann parallel=FALSE.

Mein Problem ist jedoch, wie ein bestimmter Satz von Koeffizienten in diesem Regressionssetup festgelegt werden kann. Angenommen, die abhängige Variable ist diskret und ordinal und kann Werte Y = 1 , 2 oder 3 annehmen . Wenn die Regressoren X 1 und X 2 sind , sind die RegressionsgleichungenYY=123X1X2

logit(P(Y1))=α1+β11X1+β12X2logit(P(Y2))=α2+β21X1+β22X2

Ich möchte und β 22 auf 1 setzen . Bitte lassen Sie mich wissen, wie ich dies erreichen kann. Wenn dies nicht möglich ist, können Sie mir bitte auch mitteilen, ob ich dies in einer anderen Statistiksoftware erreichen kann.β11β221R

Shanker
quelle
X.1
Danke für die Antwort Peter. Sowohl X1 als auch X2 sind kontinuierlich.
Shanker
Ist es also der Punkt, dass Sie nur die Anpassung dieses Modells über Alpha optimieren möchten?
Gung - Reinstate Monica
2
1
1
@ Shanker, sorry - ich habe dein Zitat falsch verstanden "Ich möchte setzenβ11 und β22 zu 1" - Ich dachte, dass diese in beiden Gleichungen der gleichen Variablen entsprechen, aber ich kann sehen, dass dies nicht der Fall ist. Jemand hat möglicherweise den richtigen RCode, um Ihnen hier zu helfen, aber ich vermute, dass kein solcher Code existiert und die Antwort auf die Frage (die Sie vielleicht haben) nicht hören wollen), ist es, Ihren eigenen Code zu schreiben, der zu diesem Modell passt. Dies wäre nicht besonders kompliziert. Wenn Sie Hilfe beim Ableiten der Wahrscheinlichkeitsgleichungen usw. benötigen, können Sie dies als separate Frage veröffentlichen.
Makro

Antworten:

2

Ich bin nicht sicher, ob ich verstehe, was das OP bedeutete, wenn er / sie sagt: "Ich kann es nicht verwenden, offsetweil es den entsprechenden Regressor vollständig aus der Regression entfernt." Sie können einen Parameter mit der offset()Funktion in R korrigieren. Ich verwende ihn lm()unten, aber er sollte auch in Ihrem Modell funktionieren.

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

Der feste Parameter wird in der Ausgabe nicht angezeigt, ist aber immer noch auf 2 festgelegt. Als Nächstes werde ich den xParameter auf seinen geschätzten Wert im freeModell festlegen

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

Beachten Sie, dass der Achsenabschnitt in fixed2mit demselben Wert wie im freeModell geschätzt wird .

ndoogan
quelle