Jak dopasować regresję ograniczoną w R, aby współczynniki ogółem = 1?

36

Widzę tutaj podobną ograniczoną regresję:

Ograniczona regresja liniowa przez określony punkt

ale moje wymagania są nieco inne. Potrzebuję współczynników do zsumowania 1. W szczególności regresuję zwroty z 1 serii walut obcych w stosunku do 3 innych serii walutowych, aby inwestorzy mogli zastąpić ekspozycję na tej serii kombinacją ekspozycji na pozostałe 3, ale ich nakłady pieniężne nie mogą się zmieniać, a najlepiej (ale nie jest to obowiązkowe) współczynniki powinny być dodatnie.

Próbowałem szukać ograniczonej regresji w R i Google, ale przy odrobinie szczęścia.

Thomas Browne
źródło
Czy na pewno jest to problem z ograniczoną regresją? Jak czytam to pytanie, należy dążyć do relacji postaci y4 (jedna seria Forex) = β1y1+β2y2+β3y3 (plus, jak sądzę, czwarty termin reprezentujący panującą bezpieczną stopę powrót). To niezależne od decyzji inwestycyjnej. Jeśli klient chce zainwestować kapitał c w y4 przy użyciu y1 , y2 i y3 jako pełnomocników, wówczas po prostu zainwestuje cβ1 wy1 ,doβ2) wy2) orazdoβ3) wy3) . To nie dodaje żadnych szczególnych komplikacji do regresji, prawda?
whuber
Dzieje się tak, ponieważ jeśli modelujesz to, w wielu przypadkach znajdziesz B1 + B2 + B3> 1 (lub <1 w innych). Wynika to z faktu, że waluta, którą próbuje się powielić za pomocą deskryptorów, będzie zazwyczaj miała większą lub mniejszą zmienność niż inne, a zatem regresja da ci mniejsze lub większe wagi w odpowiedzi. Wymaga to od inwestora albo całkowitego zainwestowania, albo dźwigni finansowej, czego nie chcę. Co do bezpiecznej stopy zwrotu nie. Wszystko, co próbujemy zrobić, to powielić series1 przy użyciu innych zmiennych. Będąc facetem od finansów, a nie statystykiem, może źle nazwałem moje pytanie.
Thomas Browne
Powodem włączenia terminu bezpiecznej stopy zwrotu jest to, że czasami będzie on miał niezerowy współczynnik. Prawdopodobnie bezpieczne instrumenty (depozyty bankowe z dnia na dzień) są dostępne dla wszystkich po niskich kosztach, więc każdy, kto zignoruje to jako element koszyka inwestycyjnego, może wybrać kombinacje nieoptymalne. Teraz, jeśli współczynniki nie zwiększają jedności, co z tego? Po prostu zainwestuj tyle, ile chcesz w proporcje oszacowane przez regresję.
whuber
prawda ..... takie proste. Dzięki. Czuję się teraz trochę głupio haha.
Thomas Browne,
1
Wcale nie głupie. Samo zadawanie tego pytania odzwierciedla wysoki poziom myślenia. Właśnie sprawdzałem, w jaki sposób rozumiem twoje pytanie, aby upewnić się, że masz skuteczną odpowiedź. Twoje zdrowie.
whuber

Odpowiedzi:

35

Jeśli dobrze rozumiem, twój model to przy k π k = 1 i π k0 . Musisz zminimalizować i ( Y i - ( π 1 X i 1 + π 2 X i 2 + π 3 X i

Y=π1X1+π2)X2)+π3)X3)+ε,
kπk=1πk0 zastrzeżeniem tych ograniczeń. Ten rodzaj problemu jest znany jakoprogramowanie kwadratowe.
i(Yi(π1Xi1+π2Xi2+π3Xi3))2

Tutaj kilka linii kodów R daje możliwe rozwiązanie ( są kolumnami , a prawdziwe wartości π k wynoszą 0,2, 0,3 i 0,5).X1,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

Nie znam żadnych wyników na asymptotycznym rozkładzie estymatorów itp. Jeśli ktoś ma wskaźniki, chętnie je zdobędę (jeśli chcesz, mogę otworzyć nowe pytanie w tej sprawie).

Elvis
źródło
Właściwie szybkie pytanie. Czy nie powinienem minimalizować wariancji zamiast sumować? Czy to nie regresja minimalizuje wariancję kwadratu błędów?
Thomas Browne
6
To sprytne, Elvis, ale czy nie mógłbyś osiągnąć tego samego, zmieniając parametry regresji? Np. Niech Odpowiada to Y - X 3 = α 1 ( X 1 - X 3 ) + α 2 ( X 2 - X 3 )Y=α1X1+α2)X2)+(1-α1-α2))X3)+ε . Oszacowania i standardowe błędy π i są łatwe do obliczenia na podstawie oszacowań i macierzy var-covar α 1 i α 2 . YX3=α1(X1X3)+α2(X2X3)+επiα1α2
whuber
6
@ whuber Tak, ale przy większej ilości zaszumionych danych lub przy niektórych wartościach zbliżonych do 0 , łatwo złamałbyś ograniczenie π k > 0 , co stanowi „trudną” część problemu. πk0πk>0
Elvis
2
Dodatni współczynnik mówi o zakupie waluty obcej; ujemny współczynnik mówi, żebyś go sprzedał. Jeśli nie posiadasz tej waluty, musisz ją pożyczyć, aby ją sprzedać („krótka sprzedaż”). Ponieważ nieograniczone zaciąganie pożyczek może wpędzać ludzi w kłopoty, istnieją ograniczenia co do kwoty pożyczki i sposobu jej spłaty („wymogi dotyczące depozytu zabezpieczającego” i „koszty pokrycia kapitału” oraz „wycena według wartości rynkowej”). Dlatego pożyczanie jest możliwe, ale często unika się go, z wyjątkiem dużych graczy na rynkach lub chyba, że ​​daje duże korzyści.
whuber
2
Wielkie dzięki wszystkim za wszelką pomoc. Właściwie tylko po to, aby skomentować ogólnie rynki walutowe, łatwiej jest je skrócić niż akcje lub obligacje, ponieważ nie trzeba pożyczać akcji przed krótką sprzedażą. Po prostu odwraca się walutę mianownika i licznika. Na przykład sprzedaż EURUSD i sprzedaż USDEUR są dokładnie równoważnymi transakcjami pod względem działu ryzyka, ale oczywiście są dokładnie przeciwnymi pozycjami. Właśnie dlatego FX jest tak świetnym placem zabaw dla handlowców kwantowych, ponieważ nie muszą martwić się o tarcia kierunkowe, które są o wiele ważniejsze w akcjach
Thomas Browne
8

Jak wspomniał Whuber, jeśli jesteś zainteresowany tylko ograniczeniami równości, możesz również użyć standardowej funkcji lm (), przepisując swój model:

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

Ale to nie gwarantuje, że twoje ograniczenia nierówności zostaną spełnione! W tym przypadku jednak tak jest, więc otrzymujesz dokładnie taki sam wynik, jak w powyższym przykładzie programowania kwadratowego (umieszczenie X3 po lewej):

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
źródło
β1=0,75β2)=0,5(1-β1-β2))=-0,25
1
Dzięki @AS za zwrócenie na to uwagi. Rzeczywiście, to rozwiązanie działa tylko w przypadku ograniczeń równości, a nie nierówności. Odpowiednio zredagowałem tekst.
Matifou,
1

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

b¯

Np jest funkcją ° C za pomocą bloku przekształcania ] Tutaj możemy oddzielić nasze k nowns oraz u nknowns. ˉ c = [b¯do¯T.do¯¯r1

b¯=[k0k1k2)]=T.do¯¯do¯=[100010-1-11][k0k1r]
ku
do¯=[k0k1r]=S.u¯¯dou¯+S.k¯¯dok¯=[100100][k0k1]+[001]r
x¯¯T.do¯¯(S.u¯¯dou¯+S.k¯¯dok¯)=y¯przeciwko¯¯=x¯¯T.do¯¯S.u¯¯w¯=y¯-x¯¯T.do¯¯S.k¯¯dok¯
przeciwko¯¯dou¯=w¯
Augi Lynch
źródło
1

Stare pytanie, ale ponieważ mam ten sam problem, postanowiłem opublikować moje 2p ...

Użyj programowania kwadratowego, jak sugeruje @Elvis, ale używając sqlincon z pakietu pracma . Myślę, że zaletą quadrpog::solve.QPjest prostszy interfejs użytkownika do określania ograniczeń. (W rzeczywistości lsqlinconjest to opakowanie solve.QP).

Przykład:

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

Te same wyniki, co Elvisa:

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

EDYCJA Aby spróbować odnieść się do komentarza Gunga, oto wyjaśnienie. sqlincon emuluje Matlab na lsqlin który ma ładny stronę pomocy. Oto odpowiednie bity z niektórymi (mniejszymi) modyfikacjami:

XMacierz mnożnika, określona jako macierz podwójnych. C reprezentuje mnożnik rozwiązania x w wyrażeniu C * x - Y. C jest M-na-N, gdzie M jest liczbą równań, a N jest liczbą elementów x.

YStały wektor, określony jako wektor podwójnych. Y oznacza addytywny stały składnik w wyrażeniu C * x - Y. Y oznacza M-1, gdzie M jest liczbą równań.

Aeq: Liniowa macierz ograniczeń równości, określona jako macierz podwójnych. Aeq reprezentuje współczynniki liniowe w ograniczeniach Aeq * x = beq. Aeq ma rozmiar Meq-by-N, gdzie Meq to liczba ograniczeń, a N to liczba elementów x

beqWektor ograniczenia liniowej równości, określony jako wektor podwójnych. beq reprezentuje wektor stały w ograniczeniach Aeq * x = beq. beq ma długość Meq, gdzie Aeq to Meq-by-N.

lbDolne granice określone jako wektor podwójnych. lb reprezentuje elementarne dolne granice w lb ≤ x ≤ ub.

ubGórne granice, określone jako wektor podwójnych. ub reprezentuje górne granice elementarnie w lb ≤ x ≤ ub.

Dariober
źródło