계수의 총계가 1이되도록 제약 된 회귀를 R에 맞추려면 어떻게해야합니까?


36

비슷한 구속 회귀가 여기에 있습니다.

지정된 점을 통한 제한된 선형 회귀

그러나 내 요구 사항은 약간 다릅니다. 1을 더하는 계수가 필요합니다. 구체적으로, 저는 1 개의 외환 시리즈의 수익률을 3 개의 다른 외환 시리즈에 대해 회귀 시키므로 투자자는 해당 시리즈에 대한 노출을 다른 3에 대한 노출 조합으로 대체 할 수 있습니다. 현금 지출은 변하지 않아야하며, 바람직하게는 (필수적이지는 않음) 계수는 양수 여야합니다.

R과 Google에서 제한된 회귀를 검색하려고 시도했지만 운이 거의 없습니다.


이것이 제한된 회귀 문제인지 확실합니까? 질문을 읽으면서 (하나의 외환 시리즈) = 형식의 관계를 . 그것은 투자 결정과 무관합니다. 고객이 투자하고자하는 경우 자본을 사용 , 및 프록시 등을, 그들은 단지 투자 할 것 에서 , 에서 및 에서y4β1y1+β2y2+β3y3cy4y1y2y3cβ1y1cβ2y2cβ3y3. 그것은 회귀에 특별한 합병증을 추가하지 않습니까?
whuber

모델링하는 경우 많은 경우 B1 + B2 + B3> 1 (또는 다른 경우 <1)이 발견되기 때문입니다. 설명자와 함께 복제하려는 통화는 일반적으로 다른 것보다 크거나 작은 변동성을 가지기 때문에 회귀는 응답에 따라 더 작거나 더 큰 가중치를 부여하기 때문입니다. 이를 위해서는 투자자가 완전히 투자하지 않거나 내가 원하지 않는 것을 활용해야합니다. 안전한 수익률은 우리가하려는 것은 다른 변수를 사용하여 series1을 복제하는 것입니다. 통계 전문가가 아닌 재무 전문가이기 때문에 내 질문의 이름을 잘못 지정했을 수 있습니다.
Thomas Browne

안전한 수익률에 대한 용어를 포함시키는 이유는 때로는 0이 아닌 계수를 갖기 때문입니다. 아마도 안전한 도구 (야간 은행 예금)는 저렴한 비용으로 모든 사람이 이용할 수 있으므로이를 투자 바구니의 구성 요소로 무시하는 사람은 차선책을 선택할 수 있습니다. 이제 계수가 단일성에 추가되지 않으면 어떻게 될까요? 회귀로 추정 한 비율에 원하는만큼 투자 하십시오.
whuber

맞습니다 ... 그렇게 간단합니다. 감사. 나는 지금 조금 어리석은 느낌이 듭니다.
Thomas Browne

1
전혀 바보가 아닙니다. 이 질문을하는 것은 단지 높은 수준의 생각을 반영합니다. 귀하의 질문에 대한 내 자신의 이해를 확인하여 효과적인 답변을 얻었습니다. 건배.
whuber

답변:


35

만약 내가 제대로 이해하고, 모델은 와 과 . 당신은 최소화 할 필요가 이 제약 될 수 있습니다. 이런 종류의 문제를 2 차 프로그래밍이라고 합니다.Σ K π K = 1 π K0 Σ I ( Y I - ( π 1 X I 1 + π 2 X I 2 + π 3 X i 3 ) ) 2

와이=π1엑스1+π2엑스2+π엑스+ε,
케이π케이=1π케이0
나는(와이나는(π1엑스나는1+π2엑스나는2+π엑스나는))2

여기에 가능한 솔루션을 제공하는 몇 줄의 R 코드가 있습니다 ( 열이고 의 실제 값 은 0.2, 0.3 및 0.5입니다).π k엑스1,엑스2,엑스Xπ케이

> 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

견적 자 등의 점근 적 분포에 대한 결과를 모르겠습니다. 누군가 포인터가 있으면 궁금한 점이 있습니다 (원하는 경우 새 질문을 열 수 있음).


실제로 빠른 질문입니다. 합계보다는 분산을 최소화해서는 안됩니까? 회귀가하는 것이 오차의 제곱의 분산을 최소화하는 것이 아닙니까?
Thomas Browne

6
이것은 영리한 일이지만, 당신은 단순히 회귀를 다시 매개 변수화하여 같은 것을 달성 할 수 없었습니까? 예를 들어, 이는 . 의 추정치 및 표준 오차 는 및 의 추정치 및 var- 행렬에서 계산하기가 간단합니다 . 와이=α1엑스1+α2엑스2+(1α1α2)엑스+ε와이엑스=α1(엑스1엑스)+α2(엑스2엑스)+επ나는α1α2
whuber

6
@whuber 네, 그러나 더 시끄러운 데이터 또는 일부 가 가까우 면 문제의 "고질적 인" 제약 인 제약 조건을 쉽게 위반하게 됩니다. π케이0π케이>0
Elvis

2
양의 계수는 외화를 사라고 말합니다. 음수 계수는 판매를 지시합니다. 해당 통화를 아직 소유하고 있지 않은 경우 판매하려면 ( "짧은 판매") 통화를 빌려야합니다. 무제한 차입은 사람들을 곤란에 빠뜨릴 수 있기 때문에, 차입 금액과 지불 방법 ( "여백 요건"및 "자본 운송 비용"및 "시장 대 시장"절차)에 제약이 있습니다. 따라서 차용이 가능하지만 시장의 주요 업체를 제외하고 또는 큰 이점을 제공하지 않는 한 종종 회피됩니다.
whuber

2
모든 도움을 주신 모든 분들께 감사드립니다. 실제로 FX 시장에 대해 일반적으로 의견을 말하면 주식이나 채권보다 짧은 매도가 더 쉬워집니다. 짧은 매도 전에 주식을 빌릴 필요가 없기 때문입니다. 하나는 단순히 분모와 분자 통화를 뒤집습니다. 예를 들어, EURUSD 판매와 USDEUR 판매는 위험 부서 측면에서 정확히 동등한 거래이지만 물론 반대 위치에 있습니다. FX가 퀀트 트레이더에게는 훌륭한 운동장이기 때문에 주식에서 훨씬 더 중요한 방향 마찰에 대해 걱정할 필요가 없기 때문에
Thomas Browne

8

whuber가 언급했듯이 등식 제약에만 관심이 있다면 모델을 다시 작성하여 표준 lm () 함수를 사용할 수도 있습니다.

와이=α+β1엑스1+β2엑스2+β엑스+ϵ=α+β1엑스1+β2엑스2+(1β1β2)엑스+ϵ=α+β1(엑스1엑스)+β2(엑스2엑스)+엑스+ϵ

그러나 이것이 불평등 제약 조건이 충족되는 것을 보장하지는 않습니다! 그러나이 경우에는 위의 2 차 프로그래밍 예제를 사용하는 것과 정확히 동일한 결과를 얻습니다 (왼쪽에 X3 입력).

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에 의한 경우, 세 번째 계수가 음수가되는 것을 방지하는 방법은 무엇입니까? 예를 들어,에 대한 최적의 계수를 가지고 및 우리 얻을 것이라고 세 번째 계수가 음수이므로 기반으로 보유하지 않는 여기 의미 우리 원하는 회귀. β1=0.75β2=0.5(1β1β2)=0.25
AS

1
이것을 지적 해 주셔서 감사합니다. 실제로이 솔루션은 불평등이 아닌 평등 제약에 대해서만 작동합니다. 그에 따라 텍스트를 편집했습니다.
Matifou

1

모델을 이해 하면서 와 같은 를 찾으려고

엑스¯¯¯=와이¯
[¯]=1

이러한 종류의 문제를 처리하는 가장 쉬운 방법은 행렬의 연관 속성을 사용하여 를 다른 변수의 함수로 처리하는 것입니다.¯

예를 들어 는 변환 블록 통한 의 함수입니다 . 귀하의 경우 아래 은 입니다. 여기서 우리는 분리 할 수 nowns 및 nknowns한다. ˉ C ¯ ¯ R ]= ¯ ¯ S U¯¯¯¯아르 자형1

¯=[케이0케이1케이2]=¯¯¯=[100010111][케이0케이1아르 자형]
케이
¯=[케이0케이1아르 자형]=에스¯¯¯+에스케이¯¯케이¯=[100100][케이0케이1]+[001]아르 자형
다른 변형 / 더 복잡한 모델에서는 성가신 분리 블록. 이 블록들은 알려진 것과 알려지지 않은 것이 분리되도록합니다. ˉ ˉ v ¯ c u = ˉ w
엑스¯¯¯¯(에스¯¯¯+에스케이¯¯케이¯)=와이¯V¯¯=엑스¯¯¯¯에스¯¯¯=와이¯엑스¯¯¯¯에스케이¯¯케이¯
마지막으로 문제는 익숙한 형태입니다.
V¯¯¯=¯

1

오래된 질문이지만 동일한 문제에 직면 한 이후 2p를 게시하는 것으로 생각했습니다 ...

@Elvis에 의해 제안하지만 사용으로 차 프로그램을 사용 sqlincon를 으로부터 pracma의 패키지로 제공된다. 장점 quadrpog::solve.QP은 제약 조건을 지정하는 더 간단한 사용자 인터페이스 라고 생각합니다 . (실제로 lsqlincon래퍼입니다 solve.QP).

예:

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

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

편집 gung의 의견을 해결하기 위해 여기에 몇 가지 설명이 있습니다. sqlincon은 멋진 도움말 페이지가있는 matlab의 lsqlin 을 에뮬레이트 합니다. 여기에 약간의 사소한 편집 내용이있는 관련 비트가 있습니다.

X승수 행렬로, double의 행렬로 지정됩니다. C는 C * x-Y 표현식에서 솔루션 x의 승수를 나타냅니다. C는 MxN이며, 여기서 M은 방정식의 수이고 N은 x의 요소 수입니다.

Y상수 벡터로, double의 벡터로 지정됩니다. Y는 표현식 C * x-Y에서 가산 상수 항을 나타냅니다. Y는 Mx1이며, 여기서 M은 방정식의 수입니다.

Aeq: 선형 등식 제약 조건 행렬로, double의 행렬로 지정됩니다. Aeq는 제약 조건 Aeq * x = beq의 선형 계수를 나타냅니다. Aeq의 크기는 Meq-by-N입니다. 여기서 Meq는 제약 조건의 수이고 N은 x의 요소 수입니다.

beq선형 항등 구속 조건 벡터로, double의 벡터로 지정됩니다. beq는 제약 조건 Aeq * x = beq의 상수 벡터를 나타냅니다. beq는 길이 Meq를 가지며, 여기서 Aeq는 Meq-by-N입니다.

lb하한으로, double의 벡터로 지정됩니다. lb는 하한을 lb ≤ x ≤ ub로 요소 단위로 나타냅니다.

ub상한으로, double의 벡터로 지정됩니다. ub는 상한을 lb ≤ x ≤ ub로 요소 단위로 나타냅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.