Я вижу похожую ограниченную регрессию здесь:
Ограниченная линейная регрессия через указанную точку
но мое требование немного отличается. Мне нужно, чтобы коэффициенты сложились в единицу. В частности, я регрессирую доходность 1 ряда валют против 3 других валютных рядов, чтобы инвесторы могли заменить свою подверженность этой серии комбинацией подверженности другим 3, но их денежные затраты не должны меняться, и желательно (но это не обязательно) коэффициенты должны быть положительными.
Я пытался искать ограниченную регрессию в R и Google, но без особой удачи.
r
regression
Томас Браун
источник
источник
Ответы:
Если я правильно понимаю, ваша модель - с и . Вам необходимо минимизировать учетом этих ограничений. Этот вид проблемы известен как квадратичное программирование .∑ k π k = 1 π k ≥ 0 ∑ i ( Y i - ( π 1 X i 1 + π 2 X i 2 + π 3 X i 3 ) ) 2
Здесь несколько строк из R кодов, дающих возможное решение ( - столбцы , истинные значения - 0,2, 0,3 и 0,5).π kX1,X2,X3 πk
X
Я не знаю каких-либо результатов об асимптотическом распределении оценок и т. Д. Если у кого-то есть указатели, мне будет любопытно получить некоторые из них (если вы хотите, я могу открыть новый вопрос по этому вопросу).
источник
Как упомянул whuber, если вас интересуют только ограничения равенства, вы также можете просто использовать стандартную функцию lm (), переписав вашу модель:
Но это не гарантирует, что ваши ограничения неравенства будут выполнены! Однако в этом случае это так, и вы получите точно такой же результат, как и в примере с квадратичным программированием, представленном выше (поместив X3 слева):
источник
Как я понимаю вашу модель, вы пытаетесь найти такой, что
Я обнаружил, что самый простой способ решения подобных проблем - использовать ассоциативные свойства матриц для обработки как функции других переменных.b¯
Например, является функцией через блок преобразования . В вашем случае ниже равно . Здесь мы можем разделить наши nowns и nknowns.b¯ c¯ Tc¯¯ r 1
источник
Старый вопрос, но так как я столкнулся с той же проблемой, я подумал опубликовать свой 2p ...
Используйте квадратичное программирование, предложенное @Elvis, но используя sqlincon из пакета pracma . Я думаю, что преимущество перед
quadrpog::solve.QP
более простым пользовательским интерфейсом для определения ограничений. (На самом деле,lsqlincon
это обертка вокругsolve.QP
).Пример:
Те же результаты, что и у Элвиса:
РЕДАКТИРОВАТЬ Чтобы попытаться ответить на комментарий гун, вот некоторые объяснения. sqlincon эмулирует от Matlab lsqlin , который имеет хорошую справочную страницу. Вот соответствующие биты с некоторыми (незначительными) моими правками:
источник