2 votos

Cómo encontrar el coeficiente que minimice la distancia entre varias series temporales

Tengo 3 series temporales X1, X2, X3. Quiero encontrar el coeficiente (c1, c2) que minimizará la distancia entre ellos como sigue: $$MIN\sum\sqrt{(X1-(c1*X2+c2*X3))^2}$$

Las limitaciones son: $$-1< c1,c2 < 1$$

¿Cómo puedo hacerlo en R?

1 votos

Tenga en cuenta que $\sqrt{Y^2}$ es sólo $|Y|$ . Pero quizás quisiste poner la suma $\Sigma$ dentro de root cuadrada. Una sería la Norma Absoluta y la otra sería la Norma Euclidiana

1 votos

¿Puede aclararlo? ¿Quiere minimizar $\sqrt{ \sum_i \left( X_{i,1} - c_1 X_{i,2} - c_2 X_{i,3}\right)^2 }$ ? ¿O quiere minimizar $\sum_i \left| X_{i,1} - c_1 X_{i,2} - c_2 X_{i,3}\right| $ ? En cualquier caso, se trata de un problema de optimización convexo de fácil solución si las restricciones se relajan a $-1 \leq c_1, c_2 \leq 1$ .

0 votos

Sí minimizar los valores absolutos es lo que necesito. Me puede dirigir a un paquete en R hacer resolverlo?

3voto

YviDe Puntos 18

Defina $\|.\|_1$ como el $L_1$ norma . Utilizaré letras en negrita para denotar vectores y estoy utilizando $\mathbf{y} = \mathbf{x}_1$ . Tu problema es:

\begin{equation} \begin{array}{*2{>{\displaystyle}r}} \mbox{minimize (over $c_1, c_2$)} & \| \mathbf{y} - c_1 \mathbf{x}_2 - c_2 \mathbf{x}_3 \|_1 \\ \mbox{subject to} & -1 \leq c_1 \leq 1\\ & -1 \leq c_2 \leq 1 \end{array} \end{equation}

O que la matriz $X = \begin{bmatrix} \mathbf{x}_2 & \mathbf{x}_3 \end{bmatrix}$ . El problema puede escribirse más sucintamente como: \begin{equation} \begin{array}{*2{>{\displaystyle}r}} \mbox{minimize (over $\mathbf{c}$)} & \| X \mathbf{c} - \mathbf{y} \|_1 \\ \mbox{subject to} & \mathbf{c} \preceq \mathbf{1} \\ & -\mathbf{c} \preceq \mathbf{1} \end{array} \end{equation}

Minimizar la $L_1$ sujeta a restricciones afines es una optimización convexa problema. Hay una multitud de enfoques para resolver este problema, y puesto que es sólo en dos variables, es bastante trivial para resolver. Cualquier biblioteca de optimización de propósito general probablemente pueda resolverlo sin problemas.

A continuación encontrará una breve lista de cosas que puede hacer. No es una lista exhaustiva.

Opción 1: Utilizar CVX para resolver este problema:

Lo comento porque lo conozco bien. Hay formas de llamar a CVX desde R pero puede ser inconveniente. Si estuvieras en MATLAB o Python podrías hacer algo como:

%% initialize code (currently matlab code)
n = 200;
y = randn(n, 1);  
X = randn(n, 2);

%% CVX CODE
cvx_begin
variables c(2);
minimize(norm(y - X * c, 1))
subject to:
-1 <= c
c <= 1
cvx_end

Opción 2: Reescribir el problema como un programa lineal.

Introduciendo un vector $\mathbf{s} \in \mathbb{R}^n$ El $L_1$ se puede escribir como un programa lineal :

\begin{equation} \begin{array}{*2{>{\displaystyle}r}} \mbox{minimize (over $\mathbf{c}, \mathbf{s}$)} & \mathbf{1}'\mathbf{s} \\ \mbox{subject to} & \mathbf{c} \preceq \mathbf{1} \\ & -\mathbf{c} \preceq \mathbf{1} \\ & X\mathbf{c} - \mathbf{y} \preceq \mathbf{s} \\ & -X\mathbf{c} + \mathbf{y} \preceq \mathbf{s} \end{array} \end{equation}

Existen numerosos solucionadores en R para programas lineales .

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X