Як мені помістити обмежену регресію в R, щоб коефіцієнти були загальні = 1?


36

Я бачу подібну стриману регресію тут:

Обмежена лінійна регресія через задану точку

але моя вимога дещо інша. Мені потрібні коефіцієнти, щоб додати до 1. Зокрема, я регресую дохідність 1 валютної серії порівняно з 3 іншими валютними серіями, щоб інвестори могли замінити свою експозицію до цієї серії комбінацією з іншими 3, але їх грошові витрати не повинні змінюватися, і бажано (але це не обов'язково) коефіцієнти повинні бути позитивними.

Я намагався шукати обмежену регресію в R та Google, але з невеликою долею.


Ви впевнені, що це стримана регресія? Коли я читаю питання, ви шукаєте співвідношення форми (одна серія Forex) = (плюс, я припускаю, четвертий термін, що представляє переважну безпечну норму прибутку). Це не залежить від інвестиційного рішення. Якщо клієнт хоче інвестувати капітал в використовуючи , і як проксі, то вони б просто інвестувати в , в y_2 , і з \ beta_3 в y_3β 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. Це не додає особливих ускладнень регресу, чи не так?
whuber

Це відбувається тому, що якщо моделювати це, ви виявите, що B1 + B2 + B3> 1 у багатьох випадках (або <1 в інших). Це тому, що валюта, яку намагаються копіювати з дескрипторами, як правило, має більшу або меншу мінливість, ніж інші, і тому регресія дасть вам меншу або більшу вагу у відповідь. Це вимагає від інвестора або не повністю вкладеного капіталу, або залучення, чого я не хочу. Щодо безпечної норми прибутку немає. Все, що ми намагаємось зробити - це повторити серію1 за допомогою інших змінних. Будучи фінансистом, а не статистиком, можливо, я неправильно назвав своє запитання.
Томас Браун

Причиною включення терміну безпечної норми прибутку є те, що іноді він матиме ненульовий коефіцієнт. Імовірно, безпечні інструменти (банківські депозити в овернайт) доступні для всіх за низькою вартістю, тому кожен, хто ігнорує це як складову свого кошика для інвестицій, може вибрати неоптимальні комбінації. Тепер, якщо коефіцієнти не додають до єдності, то що? Просто вкладіть скільки завгодно у пропорції, оцінені регресією.
whuber

так ..... просто так. Спасибі. Я відчуваю себе трохи дурним зараз ха-ха.
Томас Браун

1
Зовсім не дурно. Просто запитання цього питання відображає високий рівень думки. Я просто перевіряв своє власне розуміння вашого питання, щоб переконатися, що ви отримали ефективну відповідь. Ура.
whuber

Відповіді:


35

Якщо я правильно розумію, ваша модель з і . Вам потрібно мінімізувати урахуванням цих обмежень. Така проблема відома як квадратичне програмування .

Y=π1X1+π2X2+π3X3+ε,
kπk=1πk0
i(Yi(π1Xi1+π2Xi2+π3Xi3))2

Тут декілька рядків кодів R, що дають можливе рішення ( - стовпці , справжні значення - 0,2, 0,3 та 0,5).π kX1,X2,X3Xπк

> 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

Я не знаю жодних результатів щодо асимптотичного розподілу оцінок тощо. Якщо у когось є вказівники, мені буде цікаво їх отримати (якщо ви хочете, я можу відкрити нове запитання з цього приводу).


Насправді швидке питання. Чи не варто мені мінімізувати дисперсію, а не суму? Хіба це не те, що регресія робить, це мінімізувати дисперсію квадрата помилок?
Томас Браун

6
Це розумно, Елвісе, але хіба ти не міг зробити те саме, перепрамерувавши регресію? Наприклад, нехай що еквівалентно Y - X 3 = α 1 ( X 1 - X 3 ) + α 2 ( X 2 - X 3 )Y=α1X1+α2X2+(1α1α2)X3+ε . Оцінки та стандартні похибки π i нескладно обчислити з оцінок та вар-коварної матриці α 1 та α 2 . YX3=α1(X1X3)+α2(X2X3)+επiα1α2
whuber

6
@whuber Так, але з більш галасливими даними або з деяким близьким до 0 , ви легко порушите обмеження π k > 0 , що є "важкою" частиною проблеми. πk0πk>0
Елвіс

2
Позитивний коефіцієнт говорить про придбання іноземної валюти; негативний коефіцієнт підказує вам продати його. Якщо ви вже не володієте цією валютою, її потрібно позичити для її продажу ("короткий продаж"). Оскільки необмежене запозичення може спричинити занепокоєння людей, існують обмеження щодо обсягу запозичень та способів його оплати ("вимоги до маржі" та "витрати на капітал" та "ринкова оцінка"). Тому запозичення можливе, але часто його уникають, за винятком великих гравців на ринках або якщо це не дає великих переваг.
whuber

2
Велике спасибі всім за допомогу. Насправді лише для того, щоб коментувати валютні ринки взагалі, їх легше брати за межі акцій чи облігацій, оскільки не потрібно позичати акції перед короткими продажами. Один просто гортає валюти знаменника та чисельника. Так, наприклад, продаж EURUSD та продаж USDEUR - це абсолютно рівнозначні торги з точки зору відділу ризику, але вони, звичайно, абсолютно протилежні позиції. Ось чому FX - це така прекрасна площадка для кількісних трейдерів, тому що їм не потрібно багато хвилюватися щодо спрямованих тертя, які набагато важливіші в акціях
Томас Броун,

8

Як зазначає whuber, якщо вас цікавлять лише обмеження рівності, ви також можете просто використовувати стандартну функцію lm (), переписавши свою модель:

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

Але це не гарантує, що ваші обмеження нерівності будуть задоволені! У цьому випадку це все-таки, тож ви отримуєте точно такий же результат, як і за прикладом квадратичного програмування (розміщення 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))

β1=0.75β2=0.5(1β1β2)=0,25

1
Дякуємо @AS, що вказали на це. Дійсно, це рішення працює лише для обмежень рівності, а не для нерівності. Я відповідно редагував текст.
Матифу

1

Як я розумію вашу модель, ви знайти ˉ ˉ xˉ b = ˉ y такий, що [ ˉ b ] = 1

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

Я знайшов найпростіший спосіб вирішити подібні проблеми - використовувати асоціативні властивості матриць для трактування як функції інших змінних.b¯

b¯c¯Tc¯¯r1 Тут ми можемо відокремити нашіkзараз іunknowns. ˉ c = [ k 0 k 1 r ] = ¯ ¯ S u ¯ c u + ¯ ¯ S k ¯ c k = [ 1 0 0 1 0 0 ] [ k 0 k 1 ] + [ 0 0 1 ]r

b¯=[k0k1k2]=Tc¯¯c¯=[100010111][k0k1r]
ku
c¯=[k0k1r]=Su¯¯cu¯+Sk¯¯ck¯=[100100][k0k1]+[001]r
x¯¯Tc¯¯(Su¯¯cu¯+Sk¯¯ck¯)=y¯v¯¯=x¯¯Tc¯¯Su¯¯w¯=y¯x¯¯Tc¯¯Sk¯¯ck¯
v¯¯cu¯=w¯

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

Ті ж результати, що і у Елвіса:

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

EDIT Щоб спробувати вирішити коментар Гунга, ось кілька пояснень. sqlincon імітує lsqlin matlab, який має гарну сторінку довідки. Ось відповідні біти з деякими (незначними) правками:

XМатриця множника, задана як матриця парних. C являє собою множник розчину x у виразі C * x - Y. C - M-на-N, де M - кількість рівнянь, а N - кількість елементів x.

YПостійний вектор, вказаний як вектор подвійних. Y являє собою аддитивний константний член у виразі C * x - Y. Y є M-на-1, де M - кількість рівнянь.

Aeq: Лінійна матриця обмеження рівності, задана як матриця парних. Aeq представляє лінійні коефіцієнти в обмеженнях Aeq * x = beq. Aeq має розмір Meq по-N, де Meq - кількість обмежень, а N - кількість елементів x

beqЛінійний вектор обмеження рівності, вказаний як вектор парних. beq являє собою постійний вектор у обмеженнях Aeq * x = beq. beq має довжину Meq, де Aeq - Meq по-N.

lbНижні межі, зазначені як вектор подвійних. lb являє собою нижні межі елементарно в lb ≤ x ≤ ub.

ubВерхні межі, вказані як вектор подвійних. ub являє собою верхні межі елементарно в фунтах ≤ x ≤ ub.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.