Wie passe ich eine eingeschränkte Regression in R an, so dass die Koeffizienten insgesamt = 1 sind?

36

Ich sehe hier eine ähnliche eingeschränkte Regression:

Eingeschränkte lineare Regression durch einen bestimmten Punkt

aber meine anforderung ist etwas anders. Ich brauche die Koeffizienten, um 1 zu addieren. Insbesondere regressiere ich die Renditen von 1 Devisenserie gegen 3 andere Devisenserien, so dass Anleger ihr Engagement in dieser Serie durch eine Kombination des Engagements in den anderen 3, aber deren, ersetzen können Der Geldaufwand darf sich nicht ändern, und vorzugsweise (dies ist jedoch nicht obligatorisch) sollten die Koeffizienten positiv sein.

Ich habe versucht, in R und Google nach einer eingeschränkten Regression zu suchen, aber mit wenig Glück.

Thomas Browne
quelle
Sind Sie sicher, dass dies ein eingeschränktes Regressionsproblem ist? Während ich die Frage lese, suchen Sie nach einer Beziehung der Form (eine Forex-Reihe) = (plus, ich nehme an, ein vierter Term, der eine vorherrschende sichere Rendite darstellt). Das ist unabhängig von der Investitionsentscheidung. Wenn ein Kunde mit , und als Stellvertreter Kapital in investieren möchte, würde er nur in , in und inβ 1 y 1 + β 2 y 2 + β 3 y 3 c y 4 y 1 y 2 y 3 c β 1 y 1 c β 2 y 2 c β 3 y 3y4β1y1+β2y2+β3y3cy4y1y2y3cβ1y1cβ2y2cβ3y3. Das macht die Regression nicht besonders kompliziert, oder?
whuber
Wenn Sie dies modellieren, werden Sie in vielen Fällen feststellen, dass B1 + B2 + B3> 1 ist (oder <1 in anderen Fällen). Dies liegt daran, dass die Währung, die mit den Deskriptoren repliziert werden soll, in der Regel eine größere oder geringere Volatilität aufweist als die anderen, sodass Sie durch die Regression eine kleinere oder größere Gewichtung erhalten. Dies erfordert, dass der Investor entweder nicht voll investiert ist oder eine Hebelwirkung ausübt, die ich nicht möchte. Bezüglich der sicheren Rendite nr. Wir versuchen lediglich, series1 mit anderen Variablen zu replizieren. Als Finanzmann und nicht als Statistiker habe ich meine Frage vielleicht falsch benannt.
Thomas Browne
Der Grund für die Aufnahme einer Frist für eine sichere Rendite ist, dass sie manchmal einen Koeffizienten ungleich Null hat. Vermutlich stehen jedem sichere Instrumente (Tagesgeldeinlagen) zu geringen Kosten zur Verfügung, sodass jeder, der dies als Bestandteil seines Anlagekorbs ignoriert, suboptimale Kombinationen wählen könnte. Wenn die Koeffizienten nicht zur Einheit beitragen, was dann? Investieren Sie einfach so viel Sie möchten in die durch die Regression geschätzten Anteile .
whuber
richtig ... so einfach ist das. Vielen Dank. Ich fühle mich jetzt ein bisschen albern, haha.
Thomas Browne
1
Gar nicht dumm. Das bloße Stellen dieser Frage spiegelt ein hohes Maß an Nachdenken wider. Ich habe nur mein eigenes Verständnis Ihrer Frage überprüft, um sicherzustellen, dass Sie eine effektive Antwort erhalten haben. Prost.
Whuber

Antworten:

35

Wenn ich das richtig verstehe, ist Ihr Modell mit und . Sie müssen unter diesen Bedingungen . Diese Art von Problem ist als quadratische Programmierung bekannt .Σ k π k = 1 π k0 Σ i ( Y i - ( π 1 X i 1 + π 2 X i 2 + π 3 X i 3

Y.=π1X1+π2X2+π3X3+ε,
kπk=1πk0
ich(Y.ich-(π1Xich1+π2Xich2+π3Xich3))2

Hier einige Zeilen mit R-Codes, die eine mögliche Lösung ( sind die Spalten von , die wahren Werte von sind 0,2, 0,3 und 0,5).& pgr; kX1,X2,X3Xπk

> 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

Ich kenne keine Ergebnisse zur asymptotischen Verteilung der Schätzer usw. Wenn jemand Zeiger hat, bin ich gespannt auf welche (wenn Sie möchten, kann ich eine neue Frage dazu eröffnen).

Elvis
quelle
Eigentlich schnelle Frage. Sollte ich nicht eher die Varianz als die Summe minimieren? Ist es nicht so, dass eine Regression die Varianz des Fehlerquadrats minimiert?
Thomas Browne
6
Das ist klug, Elvis, aber können Sie nicht dasselbe erreichen, indem Sie einfach die Regression neu parametrisieren? ZB sei Das entspricht . Die Schätzungen und Standardfehler von sich einfach aus den Schätzungen und der Var-Covar-Matrix von und berechnen . Y - X 3 = αY.=α1X1+α2X2+(1-α1-α2)X3+εY.-X3=α1(X1-X3)+α2(X2-X3)+επichα1α2
whuber
6
@whuber Ja, aber mit mehr verrauschten Daten oder mit einem Teil von nahe Sie leicht die Einschränkung verletzen , was der "harte" Teil des Problems ist. 0 π k > 0πk0πk>0
Elvis
2
Ein positiver Koeffizient sagt Ihnen, dass Sie eine Fremdwährung kaufen müssen. Ein negativer Koeffizient weist Sie an, es zu verkaufen. Wenn Sie diese Währung noch nicht besitzen, müssen Sie sie ausleihen, um sie zu verkaufen ("Leerverkauf"). Da eine uneingeschränkte Kreditaufnahme Menschen in Schwierigkeiten bringen kann, gibt es Einschränkungen in Bezug auf die Höhe der Kreditaufnahme und deren Bezahlung ("Margin-Anforderungen" und "Kapitalkosten" sowie "Mark-to-Market" -Verfahren). Aus diesem Grund ist eine Kreditaufnahme möglich, wird jedoch häufig vermieden, es sei denn, die großen Marktteilnehmer haben große Vorteile.
whuber
2
Vielen Dank an alle für die Hilfe. Eigentlich, nur um einen Kommentar zu den Devisenmärkten im Allgemeinen abzugeben, sind sie leichter zu leerverkaufen als Aktien oder Anleihen, da man sich vor Leerverkäufen keine Aktie ausleihen muss. Man dreht einfach die Nenner- und Zählerwährungen um. So sind beispielsweise der Verkauf von EURUSD und der Verkauf von USDEUR in Bezug auf die Risikoabteilung genau gleichwertige Geschäfte, aber es handelt sich natürlich um genau entgegengesetzte Positionen. Aus diesem Grund ist FX ein großartiger Spielplatz für Quanttrader, da sie sich nicht um direktionale Reibungen kümmern müssen, die für Aktien viel wichtiger sind
Thomas Browne,
8

Wie von whuber erwähnt, können Sie, wenn Sie nur an den Gleichheitsbeschränkungen interessiert sind, auch einfach die Standardfunktion lm () verwenden, indem Sie Ihr Modell umschreiben:

Y.=α+β1X1+β2X2+β3X3+ϵ=α+β1X1+β2X2+(1-β1-β2)X3+ϵ=α+β1(X1-X3)+β2(X2-X3)+X3+ϵ

Dies garantiert jedoch nicht, dass Ihre Ungleichungsbeschränkungen erfüllt sind! In diesem Fall erhalten Sie jedoch genau das gleiche Ergebnis wie im obigen quadratischen Programmierbeispiel (Platzieren des X3 auf der linken Seite):

X <- matrix(runif(300), ncol=3)
Y <- X %*% c(0.2,0.3,0.5) + rnorm(100, sd=0.2)
X1 <- X[,1]; X2 <-X[,2]; X3 <- X[,3]
lm(Y-X3~-1+I(X1-X3)+I(X2-X3))
Matifou
quelle
Was soll im obigen Fall von Matifou verhindern, dass der dritte Koeffizient negativ ist? Wenn wir zum Beispiel die optimalen Koeffizienten für und hätten, würden wir was hier impliziert, dass unser dritter Koeffizient negativ ist und daher nicht auf unserer basiert gewünschte Regression. β1=0,75β2=0,5(1-β1-β2)=-0,25
AS
1
Vielen Dank an @AS für den Hinweis. Tatsächlich funktioniert diese Lösung nur für die Gleichheitsbeschränkungen, nicht für die Ungleichheitsbeschränkungen. Ich habe den Text entsprechend bearbeitet.
Matifou
1

Nach meinem Verständnis für Ihr Modell suchen Sie nach , sodass

x¯¯b¯=y¯
[b¯]=1

Ich habe herausgefunden, dass die einfachste Möglichkeit zur Behandlung solcher Probleme darin besteht, die assoziativen Eigenschaften von Matrizen zu verwenden, um als Funktion anderer Variablen zu behandeln.b¯

Beispielsweise ist eine Funktion von über den Transformationsblock . In Ihrem Fall unten ist . Hier können wir unsere trennen nowns und nknowns. b¯c¯Tc¯¯r1

b¯=[k0k1k2]=Tc¯¯c¯=[100010-1-11][k0k1r]
ku
c¯=[k0k1r]=Su¯¯cu¯+Sk¯¯ck¯=[100100][k0k1]+[001]r
Während ich die verschiedenen Transformationen kombinieren könnte / Trennblöcke, die bei komplexeren Modellen umständlich werden. Diese Blöcke ermöglichen die Trennung von Bekanntem und Unbekanntem. ˉ ˉ v ¯ c u = ˉ w
x¯¯Tc¯¯(Su¯¯cu¯+Sk¯¯ck¯)=y¯v¯¯=x¯¯Tc¯¯Su¯¯w¯=y¯-x¯¯Tc¯¯Sk¯¯ck¯
Schließlich hat das Problem eine vertraute Form.
v¯¯cu¯=w¯
Augi Lynch
quelle
1

Alte Frage, aber da ich vor dem gleichen Problem stehe, dachte ich, meine 2P zu posten ...

Verwenden Sie quadratische Programmierung, wie von @Elvis vorgeschlagen, aber verwenden Sie sqlincon aus dem pracma- Paket. Ich denke, der Vorteil gegenüber quadrpog::solve.QPist eine einfachere Benutzeroberfläche, um die Einschränkungen zu spezifizieren. (In der Tat lsqlinconist ein Wrapper um solve.QP).

Beispiel:

library(pracma)

set.seed(1234)

# Test data
X <- matrix(runif(300), ncol=3)
Y <- X %*% c(0.2, 0.3, 0.5) + rnorm(100, sd=0.2)

# Equality constraint: We want the sum of the coefficients to be 1.
# I.e. Aeq x == beq  
Aeq <- matrix(rep(1, ncol(X)), nrow= 1)
beq <- c(1)

# Lower and upper bounds of the parameters, i.e [0, 1]
lb <- rep(0, ncol(X))
ub <- rep(1, ncol(X))

# And solve:
lsqlincon(X, Y, Aeq= Aeq, beq= beq, lb= lb, ub= ub)

[1] 0.1583139 0.3304708 0.5112153

Gleiche Ergebnisse wie bei Elvis:

library(quadprog)
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

BEARBEITEN Um zu versuchen, Gungs Kommentar anzusprechen, folgen einige Erklärungen. sqlincon emuliert das lsqlin von matlab, das eine nette Hilfeseite hat. Hier sind die relevanten Teile mit einigen (geringfügigen) Änderungen von mir:

XMultiplikatormatrix, angegeben als Doppelmatrix. C stellt den Multiplikator der Lösung x im Ausdruck C * x - Y dar. C ist M-mal-N, wobei M die Anzahl der Gleichungen und N die Anzahl der Elemente von x ist.

YKonstanter Vektor, angegeben als Doppelvektor. Y stellt den additiven konstanten Term in dem Ausdruck C * x - Y dar. Y ist M-mal-1, wobei M die Anzahl der Gleichungen ist.

Aeq: Lineare Gleichheitsbeschränkungsmatrix, angegeben als Doppelmatrix. Aeq repräsentiert die linearen Koeffizienten in den Nebenbedingungen Aeq * x = beq. Aeq hat die Größe Meq-by-N, wobei Meq die Anzahl der Nebenbedingungen und N die Anzahl der Elemente von x ist

beqLinearer Gleichheitsbeschränkungsvektor, angegeben als Doppelvektor. beq repräsentiert den konstanten Vektor in den Nebenbedingungen Aeq * x = beq. beq hat die Länge Meq, wobei Aeq Meq-by-N ist.

lbUntere Schranken, angegeben als Doppelvektor. lb repräsentiert die unteren Grenzen elementweise in lb ≤ x ≤ ub.

ubObere Schranken, angegeben als Doppelvektor. ub repräsentiert die oberen Grenzen elementweise in lb ≤ x ≤ ub.

dariober
quelle