Je vois une régression similaire similaire ici:
Régression linéaire contrainte à travers un point spécifié
mais mon exigence est légèrement différente. Il me faut les coefficients pour faire un total de 1. Plus précisément, je régresse les rendements d'une série de devises contre trois autres séries de devises, de sorte que les investisseurs puissent remplacer leur exposition à cette série par une combinaison de l'exposition aux 3 autres, mais leur les dépenses en espèces ne doivent pas changer, et de préférence (mais ce n'est pas obligatoire), les coefficients doivent être positifs.
J'ai essayé de rechercher une régression contrainte dans R et Google mais avec peu de chance.
r
regression
Thomas Browne
la source
la source
Réponses:
Si je comprends bien, votre modèle est avec et . Vous devez minimiser sous réserve de ces contraintes. Ce type de problème est connu sous le nom de programmation quadratique .Σ k π k = 1 π k ≥ 0 Σ i ( Y i - ( π 1 X i 1 + π 2 X i 2 + π 3 X i 3 ) ) 2
Voici quelques lignes de codes R donnant une solution possible ( sont les colonnes de , les valeurs vraies de sont 0.2, 0.3 et 0.5).π kX1,X2,X3 πk
X
Je ne connais aucun résultat sur la distribution asymptotique des estimateurs, etc. Si quelqu'un a des indicateurs, je serais curieux d'en obtenir (si vous le souhaitez, je peux ouvrir une nouvelle question à ce sujet).
la source
Comme mentionné par whuber, si vous êtes uniquement intéressé par les contraintes d'égalité, vous pouvez simplement utiliser la fonction standard lm () en réécrivant votre modèle:
Mais cela ne garantit pas que vos contraintes d'inégalité sont satisfaites! Cependant, dans ce cas, vous obtenez exactement le même résultat qu'avec l'exemple de programmation quadratique ci-dessus (en plaçant le X3 à gauche):
la source
Si je comprends bien votre modèle, vous cherchez à trouver tel que Σ[ ˉ b ]=1
J'ai trouvé que le moyen le plus simple de traiter ce type de problèmes consiste à utiliser les propriétés associatives des matrices pour traiter en fonction d'autres variables.b¯
Par exemple, est une fonction de via le bloc de transformation . Dans votre cas, ci-dessous est . ici , nous pouvons séparer nos nowns et nknowns. ˉ c ¯ ¯ T c r1 ˉ b =[ k 0 k 1 k 2 ]= ¯ ¯ T c ⋅ ˉ c =[ 1 0 0 0 1 0 - 1 - 1 1 ]⋅[ k 0 k 1 r ]kb¯ c¯ Tc¯¯ r 1
la source
Vieille question mais comme je suis confronté au même problème, j'ai pensé poster mon 2p ...
Utilisez la programmation quadratique comme suggéré par @Elvis mais en utilisant sqlincon à partir du paquet pracma . Je pense que l’avantage
quadrpog::solve.QP
est une interface utilisateur plus simple pour spécifier les contraintes. (En fait,lsqlincon
c'est un wrapper autoursolve.QP
).Exemple:
Mêmes résultats que ceux d'Elvis:
EDIT Pour essayer de répondre au commentaire de gung, voici une explication. sqlincon émule le lsqlin de matlab qui a une belle page d’aide. Voici les bits pertinents avec quelques modifications (mineures):
la source