Pregunta vieja pero como estoy enfrentando el mismo problema pensé en postear mis 2p...
Utilizar la programación cuadrática como sugiere @Elvis pero utilizando sqlincon de la practica paquete. Creo que la ventaja sobre quadrpog::solve.QP
es una interfaz de usuario más sencilla para especificar las restricciones. (De hecho, lsqlincon
es una envoltura alrededor de solve.QP
).
Ejemplo:
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
Los mismos resultados que los de 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
EDITAR Para tratar de abordar el comentario de gung aquí hay una explicación. sqlincon emula a matlab's lsqlin que tiene una buena página de ayuda. Aquí están las partes relevantes con algunas ediciones (menores) mías:
X
Matriz multiplicadora, especificada como una matriz de dobles. C representa el multiplicador de la solución x en la expresión C*x - Y. C es M por N, donde M es el número de ecuaciones, y N es el número de elementos de x.
Y
Vector constante, especificado como un vector de dobles. Y representa el término constante aditivo en la expresión C*x - Y. Y es M por 1, donde M es el número de ecuaciones.
Aeq
: Matriz de restricciones de igualdad lineal, especificada como una matriz de dobles. Aeq representa los coeficientes lineales en las restricciones Aeq*x = beq. Aeq tiene un tamaño de Meq por N, donde Meq es el número de restricciones y N es el número de elementos de x
beq
Vector de restricciones de igualdad lineal, especificado como un vector de dobles. beq representa el vector constante en las restricciones Aeq*x = beq. beq tiene longitud Meq, donde Aeq es Meq-por-N.
lb
Límites inferiores, especificados como un vector de dobles. lb representa los límites inferiores elementales en lb x ub.
ub
Límites superiores, especificados como un vector de dobles. ub representa los límites superiores elementales en lb x ub.
0 votos
¿Estás seguro de que se trata de un problema de regresión restringida? Según leo la pregunta, usted busca una relación de la forma $y_4$ (una serie de Forex) = $\beta_1 y_1 + \beta_2 y_2 + \beta_3 y_3$ (más, supongo, un cuarto término que representa una tasa de rentabilidad segura vigente). Eso es independiente de la decisión de inversión. Si un cliente quiere invertir $c$ capital en $y_4$ utilizando $y_1$ , $y_2$ y $y_3$ como apoderados, entonces sólo invertirían $c\beta_1$ en $y_1$ , $c\beta_2$ en $y_2$ y $c\beta_3$ en $y_3$ . Eso no añade ninguna complicación especial a la regresión, ¿verdad?
0 votos
Lo hace porque si modelas esto encontrarás que B1 + B2 + B3 > 1 en muchos casos (o < 1 en otros). Esto se debe a que la divisa que se intenta replicar con los descriptores tendrá normalmente una volatilidad mayor o menor que las demás, por lo que la regresión le dará ponderaciones menores o mayores en respuesta. Esto requiere que el inversor no esté totalmente invertido, o que se apalanque, lo que no quiero. En cuanto a la tasa de rendimiento seguro no. Todo lo que estamos tratando de hacer es replicar la serie1 utilizando otras variables. Siendo un tipo de finanzas y no un estadístico tal vez me he equivocado en el nombre de mi pregunta.
0 votos
La razón de incluir un término para una tasa de rendimiento segura es que a veces tendrá un coeficiente no nulo. Es de suponer que los instrumentos seguros (los depósitos bancarios a un día) están al alcance de todo el mundo a bajo coste, por lo que cualquiera que lo ignore como componente de su cesta de inversión podría estar eligiendo combinaciones subóptimas. Ahora bien, si los coeficientes no suman la unidad, ¿qué importa? Simplemente invierte todo lo que quieras en las proporciones estimado por la regresión.
0 votos
Derecho..... así de simple. Gracias. Me siento un poco tonto ahora jaja.
1 votos
No es ninguna tontería. El mero hecho de hacer esta pregunta refleja un alto nivel de pensamiento. Sólo estaba comprobando mi propia comprensión de su pregunta para asegurarme de que recibía una respuesta eficaz. Saludos.