Eingeschränkte Regression in R: Koeffizienten positiv, Summe zu 1 und Achsenabschnitt ungleich Null

8

Ich habe das Modell, das ich schätzen muss, mit k π k = 1  für  k 1 und π k0  für  k 1 .

Y=π0+π1X1+π2X2+π3X3+ε,
kπk=1 for k1πk0 for k1

Die Antwort von Elvis auf eine andere Frage löst dies für den Fall von . Hier ist sein / ihr Code für diese Lösung:π0=0

   > library("quadprog");
   > X <- matrix(runif(300), ncol=3)
   > Y <- X %*% c(0.2,0.3,0.5) + rnorm(100, sd=0.2)
   > Rinv <- solve(chol(t(X) %*% X));
   > C <- cbind(rep(1,3), diag(3))
   > b <- c(1,rep(0,3))
   > d <- t(Y) %*% X  
   > solve.QP(Dmat = Rinv, factorized = TRUE, dvec = d, Amat = C, bvec = b, meq = 1)
   $solution
   [1] 0.2049587 0.3098867 0.4851546

   $value
   [1] -16.0402

   $unconstrained.solution
   [1] 0.2295507 0.3217405 0.5002459

   $iterations
   [1] 2 0

   $Lagrangian
   [1] 1.454517 0.000000 0.000000 0.000000

   $iact
   [1] 1

Wie kann ich diesen Code so anpassen, dass er einen Achsenabschnitt abschätzen kann?

Dies wurde hier gekreuzt , weil meine Gruppe in meiner Aufgabe sich darüber ärgert, dass ich diese Regression noch nicht geschätzt habe. Ich werde diese Frage hier beantworten, wenn die anderen Forumsteilnehmer zuerst dort ankommen.

Gemeinschaft
quelle

Antworten:

8

Sie müssen nur ein wenig mit den beteiligten Matrizen herumspielen. Fügen Sie den Achsenabschnitt hinzu zu X:

XX <- cbind(1,X)

Berechnen Sie die in verwendete DMatrix neu solve.QP()(ich arbeite lieber direkt damit, um einen Aufruf zu vermeiden solve():

Dmat <- t(XX)%*%XX

dMit dem neuen neu berechnen XX:

dd <- t(Y)%*%XX

Ändern Sie die Einschränkungsmatrix, indem Sie eine Nullspalte hinzufügen, da Sie anscheinend keine Einschränkungen für den Achsenabschnitt haben (richtig?):

Amat <- t(cbind(0,rbind(1,diag(3))))

Und schlussendlich:

solve.QP(Dmat = Dmat, factorized = FALSE, dvec = dd, Amat = Amat, bvec = b, meq = 1)
Stephan Kolassa
quelle
Danke Stephan. Ich möchte einen Bootstrap verwenden, um die Standardfehler dieser Koeffizientenschätzungen zu schätzen. Ich werde eine serielle Korrelation und einen hetero-robusten Bootstrap verwenden. Haben Sie eine Meinung zur Legitimität dieses Ansatzes (der Bootstrap im Allgemeinen, nicht die genaue Art des Bootstraps, den ich verwenden werde)?
Im Prinzip sieht es so aus, als wäre der Bootstrap hier legitim ... solange Sie die Einschränkungen berücksichtigen, unter denen er berechnet wurde, und diese Einschränkungen klar kommunizieren, aber Sie wollten das tun, nicht wahr? Aber ich bin weit davon entfernt, ein Experte zu sein. Vielleicht kann jemand, der kompetenter ist, einen Kommentar abgeben?
Stephan Kolassa
2
πii1πi
@ Whuber: Guter Punkt. Das andere Ziel dieser Sache ist natürlich, dass die Koeffizienten nicht nur nicht negativ sind, sondern auch zu 1 summieren. Angenommen, alle Koeffizienten sind weit von 0 entfernt. Wäre der Bootstrap mit der Summenbeschränkung gültig?
Stephan Kolassa
π3=1(π1+π2)π1π21