Guía de uso de Matlab en el desarrollo de modelos de volatilidad

Anuncio
Guía de uso de Matlab
en el desarrollo de
modelos de volatilidad
Óscar H. Moratto
Guía de uso de Matlab
en el desarrollo de modelos de volatilidad
Óscar H. Moratto
Guía de uso de Matlab
en el desarrollo de
modelos de volatilidad
Moratto, H. Óscar
Guía de uso de MatLab en el desarrollo de modelos de volatilidad / Óscar H. Moratto; editado por Eduardo
Norman Acevedo. -- Bogotá: Editorial Politécnico Grancolombiano, 2011.
155 p.; ¿? cm.
Incluye bibliografía e índice.
ISBN: 978-958-8721-03-3
ISBN Digital: 978-958-8721-04-0
1.
MATLAB (LENGUAJE DE PROGRAMACIÓN DE COMPUTADORES) -- GUÍAS. 2. ANÁLISIS NÚMERICO
-- PROCESAMIENTO DE DATOS POR COMPUTADOR -- GUIAS. 3. MATLAB -- GRAFICOS POR COMPUTADOR -- GUÍAS. 4. VOLATILIDAD -- MATLAB (LENGUAJE DE PROGRAMACIÓN DE COMPUTADORES)
-- GUÍAS. I. Tít. II. Moratto, H. Óscar. III. Norman Acevedo, Eduardo, ed.
005.262 cd. 21 ed.
Biblioteca María Cristina Niño de Michelsen
Institución Universitaria Politécnico Grancolombiano.
© Politécnico Grancolombiano Institución Universitaria
Miembro de American University System
ISBN: 978-958-8721-03-3
ISBN DIGITAL: 978-958-8721-04-0
Editorial Politécnico Grancolombiano
Calle 57 No. 3 – 00 Este Bloque A Primer piso
PBX: 3 46 88 00 ext. 808
www.poligran.edu.co/editorial
Noviembre de 2011
Bogotá, Colombia
Fundación Politécnico Grancolombiano Institución Universitaria
Facultad de Ingeniería y Ciencias Básicas
Pablo Michelsen Niño
Rector
Rafael García Gómez
Decano Facultad de Mercadeo, Comunicación y Artes
Eduardo Norman Acevedo
Director editorial
David Ricciulli
Coordinador editorial
npg comunicaciones
[email protected]
Corrección de estilo
Taller de edición - rocca S.a.
Diseño y armada electrónica
Ana María Salcedo Aguilar
Magda Lucia Quiñones Franco
Finalización de artes
PENDIENTE
Impresión y encuadernación
Impreso y hecho en Colombia
Printed in Colombia
La Editorial del Politécnico Grancolombiano pertenece a la Asociación
de Editoriales Universitarias de Colombia, ASEUC.
El contenido de esta publicación se puede citar o reproducir con propósitos
académicos siempre y cuando se de cuenta de la fuente o procedencia. Las
opiniones expresadas es responsabilidad exclusiva del autor.
Nota del autor
Este texto describe cómo implementar por medio de MatLab® modelos de
volatilidad. La audiencia objetivo son estudiantes y profesores que requieran para sus actividades académicas o profesional, el uso de modelos de
volatilidad y no tengan conocimiento profundo de MatLab®. Personas que
hayan utilizado herramientas tales como GAUSS, R, RATS y SPSS, les
será útil hacer la transición a MatLab, primordialmente por dos razones: i.
es una herramienta con grandes capacidades matemáticas y algoritmos numéricos; ii. Provee una batería de Toolboxes –conjunto de funciones agrupadas lógicamente según su objetivo primario– que hacen que la labor de
diseño de modelos sea mucho más rápida y eficiente. Cabe anotar que esta
guía ha sido desarrollada bajo la versión 7.8 de MatLab.
ÓSCAR MORATTO
Índice
Capítulo 1
13
Capítulo 2
19
Capítulo 3
31
Capítulo 4
59
Capítulo 5
69
Capítulo 6
77
Capítulo 7
95
Introducción a MatLab, se hace una breve
presentación del entorno de desarrollo de MatLab,
sus ventanas y principales características.
Matemáticas Escalares, Operadores y Variables, se
presenta la forma de manipulación básica de escalares,
sus operadores aritméticos y la creación de variables.
Vectores, Matrices y Arreglos, se muestra cómo se
pueden realizar operaciones básicas con matrices
y vectores, su declaración y manipulación.
Gráficos en MatLab, se incluye una breve descripción a cerca
de la realización de gráficos bidimensionales en Matlab.
Manejo de archivos en MatLab, se explica cómo exportar
e importar archivos de datos y de código fuente.
Fundamentos de programación en MatLab, se presenta los
principios fundamentales de programación, las estructuras de
selección y de iteración, y su implementación en MatLab.
Modelamiento de volatilidad en MatLab, se
enfoca en la implementación de diversos modelos
de volatilidad a través de MatLab.
Capítulo 1
Introducción a MatLab
Introducción a MatLab
MatLab® (Matrix Laboratory) es un ambiente computacional desarrollado por la empresa MathWorks (www.mathworks.com) que permite cálculos numéricos y visualización de datos. Inicialmente fue creado en los años
70 por Cleve Moler, como una herramienta de apoyo didáctico para sus
estudiantes. Provee diferentes funciones matemáticas para álgebra lineal,
estadística, análisis de Fourier, optimización, integración numérica, entre
otras. Es ampliamente usado para realizar diseños de control, análisis numérico, procesamiento de imágenes, matemáticas y finanzas.
Ejecución de MatLab
En Windows, haga doble click en el ícono de MatLab en el escritorio o seleccione MatLab del listado de programas de inicio (Figura 1 - Ejecución
de MatLab).
Figura 1. Ejecución de MatLab
13
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
El escritorio de MatLab
El escritorio de MatLab está compuesto por las siguientes partes (véase Figura 2):
1. Ventana de Comandos (Command Window): para digitar comandos o datos, adicionalmente, muestra los resultados de las operaciones o instrucciones.
2. Ventana de Historia de Comandos (Command History Window):
Muestra el historial de comandos o datos ejecutados previamente,
a menos que sean borrados específicamente. Para ejecutar cualquier comando en el historial de comandos, haga doble click sobre él.
3. Botón de inicio (Start Button). Funciona de forma similar al botón
de inicio de windows, en el sentido que permite acceder a diversas
funciones y características de MatLab.
4. Ventana de documentos (Documents Window) –que incluye el Editor (M-File Editor) / Debugger y el Editor de Arreglos (Array Editor): Crea y edita scripts de comandos denominados M-files, con
el objetivo de no digitar la totalidad de comandos cada vez que se
desee utilizar MatLab. El editor es un software de edición de texto
programado con varias características y colores, dependiendo del
tipo de acción que se programe. Por ejemplo, los comentarios se
colocan en verde, las variables y números, en negro; palabras reservadas del sistema, en azul, etc. De esta forma, es más fácil la
identificación de errores sintácticos.
5. Ventana de Figuras (Figures Window): Despliega las gráficas y figuras creadas en respuesta a comandos.
6. Workspace Browser. En esta ventana, se presentan las variables
definidas en el momento. Si se hace doble click sobre un ítem, el
Workspace Browser permite ver y editar el valor de dicha variable.
El contenido de esta ventana puede listarse con el comando whos
7. Buscador de ayuda (Help Browser). Para buscar ayuda, respecto a
comandos o funcionalidades.
8. Path Browser. MatLab viene con un número amplio de archivos
M-files en diversos directorios, éstos componen los denominados
Toolboxes. Cuando MatLab encuentra un nombre, verifica primero el dato para determinar si es el nombre de una variable. Luego, busca el mismo nombre dentro del directorio actual bajo el
nombre: M-file. Finalmente busca M-file dentro de los directorios
del path de búsqueda. Si alguna de las variables definidas tiene el
14
Capítulo 1 / Introducción a MatLab
mismo nombre que un M-file o que una palabra reservada del sistema, dicha palabra reservada o M-file no son accesibles. El path
de búsqueda puede ser modificado (seleccionar Desktop Tools
→ Path).
Figura 2. Escritorio de MatLab
Al iniciar la ejecución de MatLab, la ventana de comandos es la ventana
activa. A medida que los comandos son ejecutados, las ventanas apropiadas automáticamente aparecerán.
Obtención de ayuda
Existen diversas formas de obtener ayuda en MatLab:
1.
2.
Presionar tecla F1 o seleccionar el ícono [?] del toolbar, el cual
despliega la ventana de ayuda (Help Window).
Utilizar el comando help en la ventana de comandos, seguidamente help despliega todos los temas de ayuda, así:
• help tema: provee ayuda para el tema específico
• help comando: provee ayuda para el comando específico
15
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
• help help: provee información sobre cómo utilizar el comando help.
• helpwin: es una ayuda on-line, ventana separada de la
navegación. Presionar F1.
• helpdesk: documentación en hipertexto. Equivale a presionar F1.
• demo: ejecuta demostraciones
• intro: presenta una introducción interactiva a MatLab.
Interrumpir y terminar MatLab
Si por alguna circunstancia se desea interrumpir o finalizar la ejecución de
alguna instrucción, (p.e., un ciclo que no termina), pueden usarse los comandos que se exponen a continuación:
•
•
•
Ctrl-C (teclas Ctrl y C simultáneamente ^C): interrumpe (aborta)
el procesamiento, pero no cierra MatLab.
quit : finaliza MatLab.
exit : finaliza MatLab.
Comandos varios
Clc: limpia el contenido de la ventana de comandos.
Clf: limpia el contenido de la ventana de figuras.
16
Capítulo 2
Matemáticas Escalares,
Operadores y Variables
Matemáticas Escalares,
Operadores y Variables
En este capítulo, se presentan los fundamentos para la realización de operaciones matemáticas a través de MatLab.
Matemáticas Escalares
Las matemáticas escalares involucran operaciones de variables con un único valor (valores unidimensionales). El comando básico de MatLab es la
expresión matemática que debe cumplir con las siguientes propiedades:
•
•
Ser un constructo matemático que tiene un valor o un set de valores
Construida a partir de números, operadores y/o variables.
Para evaluar la expresión, se debe presionar la tecla Enter
Números
MatLab representa los números de dos formas: de punto fijo y punto
flotante.
Punto Fijo: forma decimal, con punto decimal opcional. Por ejemplo:
3.2114
-152
0.00014
Punto Flotante: en notación científica, representando m x 10e. Por ejemplo:
2.7823 x 105 se representa como 2.7823e5
Esta representación se denomina como punto flotante dado que el punto
decimal puede moverse. El número tiene dos partes:
19
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
•
Número decimal (con o sin signo), con el punto decimal opcional
(2.7823 en el ejemplo anterior)
Exponente e, el cual es un número entero (con o sin signo) (5 en
el ejemplo anterior).
•
Generalmente, la notación científica es más sencilla para representar números muy grandes o muy pequeños (por ejemplo, es más fácil representar
0.0000000002 como 2e-10).
Operadores
Para evaluar una expresión, se utilizan los operadores, los cuales operan
sobre operandos. En la Tabla 1. Operadores Numéricos, se presentan los
operadores básicos de MatLab.
Tabla 1. Operadores Numéricos
Forma
algebráica
Representación
en MatLab
Ejemplo
Adición
a+b
a + b
6+8
Substracción
a-b
a – b
12.45-3.14
Multiplicación
axb
a * b
0.089*2.74
División (derecha)
a÷b
a / b
4/2
División (izquierda)
b÷a
a \ b
8\52
ab
a ^ b
3^3
Operación
Exponenciación
Precedencia de operadores
Dado que se pueden combinar múltiples operaciones matemáticas en una
misma instrucción, existen reglas para la evaluación de dichas operaciones:
1.
2.
3.
20
Paréntesis: siendo los internos, los primeros en evaluarse.
Exponenciación (^): de izquierda a derecha
Multiplicación (*) y división (/ ó \) con igual precedencia: de
izquierda a derecha.
Capítulo 2 / Matemáticas Escalares, Operadores y Variables
4.
Adición (+) y substracción (–) con igual precedencia: de izquierda a derecha.
Variables y declaración de asignación
Una variable es un nombre simbólico dado a una cantidad o valor desconocido que puede cambiar, no solo en el tiempo sino en el contexto bajo el
cual la variable es usada. Se busca entonces utilizar el nombre de la variable de forma independiente del valor que tome, es decir, como representación de dicho valor. Las reglas para la definición de variables en MatLab
son las siguientes:
1.
2.
3.
4.
Debe iniciar por una letra
Su nombre solo puede contener las letras [a, z], dígitos [0, 9]
y/o el caracter underscore (_).
Puede tener la longitud que se desee pero MatLab solo reconoce
los primeros 31 caracteres.
Es sensible a mayúsculas y minúsculas. Por esto: Prueba,
pRueba, PRUEBA representan en MatLab variables diferentes.
Declaración de asignación
Por medio de esta instrucción se asigna o reasigna valor a una variable. En
MatLab, la asignación se hace por medio del operador igual (=); es decir,
los valores ubicados a la derecha del operador de asignación se asignan a la
variable ubicada a la izquierda de dicho operador. Generalizando, se pueden dar dos tipos de asignaciones:
•
•
variable = número
variable = número
MatLab Workspace
Las variables creadas en la ventana de comandos o en un M-file residen en
el workspace, el cual retiene sus valores con el fin de que puedan ser utilizadas posteriormente en otras expresiones. Así por ejemplo la expresión y = x
+ 8; exige que previamente se haya asignado un valor a la variable x.
21
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Redefinición de variables
Una variable puede ser redefinida simplemente ejecutando una nueva instrucción de asignación que involucre dicha variable. Cabe anotar que a
diferencia de una hoja de cálculo, en MatLab modificar una variable que
tiene relación con otra en su asignación, no cambia en cascada el valor de
la variable encadenada, solo a través de una redefinición de la variable se
puede actualizar el valor de la misma.
Variables especiales
Existen un grupo de variables predefinidas en MatLab. Estas son:
ans: nombre de la variable default. Si se escribe una expresión y ésta no
se asigna a ninguna variable, MatLab automáticamente asigna el valor a la
variable ans.
pi: razón entre la circunferencia del círculo y su diámetro. π = 3.1415926…
eps: cantidad más pequeña por la cual dos números pueden diferir.
Inf ó inf: infinito (p.e., 1/0)
NaN ó nan: no numérico (not-a-number) (p.e., 0/0)
date: fecha actual
flops: conteo de número de operaciones de punto flotante
realmax: número de punto flotante de mayor valor que posee MatLab
realmin: número de punto flotante de menor valor que posee MatLab
Comandos que involucran variables
who: es la lista de los nombres de las variables definidas
whos: es la lista de los nombres y tamaños de las variables definidas.
22
Capítulo 2 / Matemáticas Escalares, Operadores y Variables
clear: limpia todas las variables
clear var: limpia la variable var
Puntuación y comentarios
Utilizar un punto y coma (;) al final de una línea de comandos, suprime su
resultado e impide que se muestre en la ventana de comandos, pero su ejecución se realiza normalmente.
Se pueden usar comas, y puntos y comas en una misma línea, con el objeto de desplegar los resultados en la ventana de comandos y suprimir los
puntos y comas.
Para crear comentarios, se utiliza el signo (%) al comienzo del comentario,
de tal forma que el texto ubicado a su derecha sea ignorado por MatLab. En
los archivos M-file, los comentarios son de color verde.
Tres puntos seguidos (. . .) al final de un comando indica que el comando continúa en la siguiente línea.
Ejemplo 1. Uso de puntuación y comentarios
>> a = 36
a =
36
>> b
b =
90
>> b = a + c + d
b =
94
>> a=32, c =18; d=40; % múltiples comandos
a =
32
>> b = a + c + d;
>> costo = a*0.12 + c*0.18 + d*0.08;
>> costo_promedio = costo/… % continuación del comando
b
costo_promedio =
0.1142
23
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Operaciones matemáticas básicas
MatLab soporta diversas funciones matemáticas. Las funciones matemáticas elementales son (para una lista más completa, digite el comando help
elfun):
Tabla 2. Funciones matemáticas elementales
abs(x)
Valor absoluto |x|
sign(x)
Retorna -1 si x < 0; 0 si x = 0 y 1 si x > 0
exp(x)
Exponencial ex
log(x)
Logaritmo natural ln x
log10(x)
Logaritmo en base 10 log10 x
sqrt(x)
Raíz cuadrada √x
Para información detallada de éstas funciones o cualquier otra, como se expuso previamente, se puede utilizar la función help. Por ejemplo:
>> help sqrt
SQRT Square root.
SQRT(X) is the square root of the elements of X. Complex
results are produced if X is not positive.
See also SQRTM.
Ejemplo 2. Uso de funciones matemáticas
Suponga que se desea evaluar la siguiente expresión:
Cuando x es igual a:
24
Capítulo 2 / Matemáticas Escalares, Operadores y Variables
>> x = sqrt(2)/2
x =
0.7071
>> y = exp(-(x^2)/2)/sqrt(2*pi)
y =
0.3107
Opciones de presentación
Existen diversas formas de desplegar o presentar el valor de una variable.
La forma más sencilla es colocar, en la ventana de comandos, el nombre
de la variable; de esta forma, el nombre se repetirá y su valor se desplegará en la siguiente línea.
Opciones para presentación de números
•
Enteros: se despliegan como enteros mientras contengan 9 o menos dígitos. Para 10 o más dígitos, se despliegan en notación científica. Por ejemplo:
>> x = 5
x =
5
•
Punto fijo corto: el default se usa para presentar los números decimales con cuatro (4) dígitos a la derecha del punto decimal y hasta
tres (3) dígitos a la izquierda del punto decimal. Se conoce como
el formato short. Por ejemplo:
>> 610./12.
ans =
50.8333
•
Punto flotante corto: se usa cuando el resultado tiene más de tres
(3) dígitos a la izquierda del punto decimal, se presenta en notación científica, bajo el cual, un valor se expresa como un número entre uno (1) y diez (10) multiplicado por una potencia de diez
(10). Por ejemplo:
>> 61000./12.
ans =
5.0833e+003
25
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
La forma como se presenta el valor puede cambiarse especificando un formato numérico diferente en la opción Preferencias, del menú Archivo o digitando la palabra reservada FORMAT en la línea de comandos.
Ejemplo 3. Efecto de selección de múltiples formatos numéricos
>> razon = 610./12
razon =
50.8333
Tabla 3. Formatos numéricos diferentes
Comando de MatLab
Variable razon
Comentarios
format short
50.8333
4 dígitos decimales
format long
50.83333333333334
14 dígitos decimales
format short e
format long e
format short g
format long g
4 dígitos decimales más
exponente
14 dígitos decimales más
5.083333333333334e+001
exponente
Mejor entre
format short
50.8333
o
format short e
Mejor entre
format long
5.083333333333334e+001
o
format long e
5.0833e+001
format bank
50.83
2 dígitos decimales
format +
+
Positivo, negativo o cero
Mostrar valores y texto
Existen tres (3) formas de mostrar valores y texto en MatLab
1.
26
Desde la línea de comandos: se escribe el nombre de la variable
sin punto y coma; al final, puede usarse en combinación con una
instrucción de asignación.
Capítulo 2 / Matemáticas Escalares, Operadores y Variables
2.
Usando el comando disp. Existen dos formas de utilizar el comando disp.:
a. disp(variable): muestra el valor de la variable sin mostrar el nombre de la variable.
b. disp(string): muestra el string, quitando las comillas
sencillas de ella y mostrando los caracteres entre comillas.
Una cadena de caracteres (string) es un grupo de caracteres enmarcados entre comillas sencillas (‘). Por ejemplo:
>> temp=78;
>> disp(temp); disp(‘Grados F’)
78
Grados F
3.
Usando los comandos fprintf o sprintf. Estas funciones
tienen un comportamiento similar a la función fprint del lenguaje
de programación C. La función fprintf sirve para formatear la
salida en un archivo o en la ventana de comandos, mientras que la
función sprintf es utilizada para formatear la salida a otra cadena de caracteres. Los ejemplos que se den serán sobre la función
fprintf, pero su uso es extensible a la función sprintf. Existen
varias versiones de estas dos funciones, sin embargo, la más usada es la siguiente:
fprintf(formato, A)
formato: consiste en una cadena de caracteres entre comillas
sencillas que describe el formato de los campos de salida. Dentro
del formato se puede incluir:
Tabla 4. Formatos de campos de salida
• w.d%f
• Muestra los resultados como de punto fijo o notación decimal,
• w.d%e
•
• w.d%E
•
• w.d%g
•
con un ancho de w caracteres (incluyendo el punto decimal
y el signo negativo de tener), con d decimales. Por ejemplo,
%4.0f presenta hasta cuatro dígitos sin decimales.
Muestra los resultados usando notación científica. Por ejemplo, 3.141593e+00
Igual que el w.d%e, pero en mayúsculas. Por ejemplo,
3.141593E+0
Muestra los resultados en la versión más compacta de w.d%e
o w.d%f.
27
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Los especificadores w.d son opcionales.
El formato previo puede complementarse con las siguientes acciones:
Tabla 5. Acciones complementarias dentro del formato
'-'
Justificar a la izquierda. Por ejemplo %-5.2f
'+'
Imprime el signo positivo o negativo. Por ejemplo %+5.2f
' '
Inserta un espacio antes del valor. Por ejemplo % 5.2f
'0'
Llena con ceros a la izquierda. Por ejemplo, %05.2f
A su vez, pueden incluirse caracteres de escape:
Tabla 6. Caracteres de escape
28
Caracter
Descripción
Caracter
Descripción
''
Comillas sencillas
%%
Carácter porcentaje
\\
Backslash
\t
Tab horizontal
\n
Nueva línea
\v
Tab vertical
Capítulo 3
Vectores, Matrices
y Arreglos
Vectores, Matrices y Arreglos
La variable básica en MatLab es el arreglo. Por arreglo se entiende una variable que representa más de un valor. Cada valor del arreglo se denomina
elemento del arreglo. En realidad, las variables numéricas corresponden a
arreglos de 1 x 1. Los vectores columnas son arreglos de n x 1 (donde n es
el número de filas) y los vectores fila arreglos de 1 x n (donde n es el número de columnas). Adicionalmente, MatLab tiene la capacidad de manipular arreglos multidimensionales; por ejemplo, un arreglo bidimensional
puede ser de m x n (donde m es el número de filas y m el número de columnas). En la Figura 3. Ejemplos de arreglos, se muestra gráficamente la
diferencia entre los vectores fila, columna y matrices multidimensionales.
Los arreglos proveen una forma eficiente de almacenar y manipular datos
que pueden agregarse en un mismo conjunto de información.
Figura 3. Ejemplos de arreglos
Vector fila (1 x n)
Vector columna (n x 1)
Vector bidimensional (m x n)
Suponga, por ejemplo, que se debe evaluar la función y = cos(x) cuando
x ε [0,π]. Debido a que existe un número infinito de puntos entre cero (0)
y π, se debe escoger un conjunto de puntos para evaluar la función. Si se
toman los valores de x del conjunto x = 0.1 * π, 0.2π, ···π, se puede construir una lista o arreglo de valores tanto para x como para y (véase Tabla
7. Ejemplo de valores posibles de Arreglo). En este caso, tanto x como y
se considerarían arreglos fila, donde cada uno tiene una (1) fila y once (11)
columnas para almacenar valores.
31
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Tabla 7. Ejemplo de valores posibles de Arreglo
x
0
0.1π
0.2π
0.3π
0.4π
0.5π
0.6π
y
1.00
0.95
0.81
0.59
0.31
0.00
-0.31 -0.59 -0.81 -0.95 -1.00
0.7π
0.8π
0.9π
π
Declaración de arreglos
Existen diversas formas de crear arreglos en MatLab.
Declaración por lista explícita
Una de las más comunes es la creación por medio de una lista explícita.
Los elementos de una misma fila se digitan encerrados entre llaves ([ ])
y se encuentran separados por espacios o comas.
Para el ejemplo que hemos planteado en este Capítulo, el vector x se declararía como:
>> x=[0 .1*pi .2*pi .3*pi .4*pi .5*pi .6*pi .7*pi .8*pi
.9*pi pi]
x =
Columns 1 through 7
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850
Columns 8 through 11
2.1991 2.5133 2.8274 3.1416
De esta forma, se crea un arreglo fila de once (11) columnas o un arreglo
de 1 x 11.
Para generar una nueva fila, se coloca un punto y coma ( ; )al final del último elemento de cada fila, con excepción de la última fila. Por ejemplo:
32
Capítulo 3 / Vectores, Matrices y Arreglos
Ejemplo 4. Creación de arreglos por lista explícita
>> z=[1; 2; 3; 0] % Vector columna de (4 x 1)
z =
1
2
3
4
>> k=[1,2,3;4,5,6] % matriz de (2 x 3)
k =
1 2 3
4 5 6
Declaración a partir de otro arreglo
Algunas veces, la utilización de la lista explícita para la creación de un
arreglo puede ser algo engorroso; por lo cual, MatLab provee alternativas
para la creación de arreglos.
Un arreglo puede usarse como base para la creación de otro arreglo.
Por uso de funciones sobre arreglos
Las distintas funciones matemáticas generalmente pueden aplicarse a arreglos, para obtener un vector de resultados. Así para el ejemplo que nos
compete, se puede observar:
>> y=cos(x)
y =
Columns 1 through 7
0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511
Columns 8 through 11
0.8090 0.5878 0.3090 0.0000
Declaración por operador puntos
El formato de esta notación es el siguiente:
(inicio: incremento: fin)
33
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Genera un arreglo cuyo primer valor es inicio, aumenta en incremento
y llega hasta que sea menor o igual a fin. Cualquiera de los tres componentes puede ser número de punto flotante. Así, por ejemplo, para generar
el arreglo x sobre el que se ha venido trabajando, se puede usar:
>> x=(0:0.1:1)*pi
x =
Columns 1 through 7
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850
Columns 8 through 11
2.1991 2.5133 2.8274 3.1416
No necesariamente la secuencia llega exactamente hasta el valor final, por
ejemplo:
>> z = 0:2:9
z =
0 2 4 6 8
Si se omite el argumento de incremento, se utiliza el incremento default
de uno (1). Si se utiliza esta versión, solo pueden usarse como inicio y fin,
valores enteros:
>> z = 0:5
z =
0 1 2 3 4 5
Declaración por Linspace
Esta función de MatLab genera un vector con valores incrementales uniformes, a diferencia que el operador ( : ), no especifica el incremento, sino
el número de valores deseados. La función se define de la siguiente forma:
linspace (inicio, fin, número)
El incremento es calculado internamente según la siguiente expresión:
34
Capítulo 3 / Vectores, Matrices y Arreglos
Por ejemplo, para generar el arreglo x del ejemplo, se utilizaría la siguiente expresión:
>> x=linspace(0,pi,11)
x =
Columns 1 through 7
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850
Columns 8 through 11
2.1991 2.5133 2.8274 3.1416
Declaración por Logspace
Esta función crea un vector uniformemente espaciado de forma logarítmica. La sintaxis es la siguiente:
logspace(exponenteinicial,exponentefinal,número)
Por ejemplo, para crear un vector que comience en 100 y termine en
102 = 100 que tenga 11 valores, utilice logspace como se muestra a
continuación:
>> logspace(0,2,11)
ans =
Columns 1 through 7
1.1189 1.5849 2.5119 3.9811 6.3096 10.0000 15.8489
Columns 8 through 11
25.1189 39.8107 63.0957 100.0000
35
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Declaración por combinación
Un arreglo puede declararse usando otro arreglo previamente creado, así:
>> x=(0:0.1:1)*pi;
>> z = [x pi*1.1]
Creación de vectores especiales
MatLab provee funciones para la creación de vectores con ciertas características.
Vector de números aleatorios uniformemente distribuidos
Por medio de la función rand, se construyen vectores con números pseudoaletorios uniformemente distribuidos en el intervalo abierto (0,1):
Tabla 8. Uso de la función rand
Forma de uso
Descripción
rand(n)
Crea una matriz de (n x n) con números pseudoaletorios
rand(m, n)
Crea una matriz de (m x n) con números pseudoaletorios
rand(m, n, p, …)
Crea una matriz de (m x n x p x …) con números
pseudoaletorios
Vector de números aleatorios normalmente distribuidos:
Por medio de la función randn se construyen vectores con números pseudoaletorios normalmente distribuidos, es decir, que siguen una distribución
normal estándar N(0,1):
Tabla 9. Uso de la función randn
Forma de uso
randn(n)
randn(m, n)
randn(m, n, p, …)
36
Descripción
Crea una matriz de (n x n) con números
pseudoaletorios
Crea una matriz de (m x n) con números
pseudoaletorios
Crea una matriz de (m x n x p x …) con número
pseudoaletorios
Capítulo 3 / Vectores, Matrices y Arreglos
Matriz Identidad
Una matriz identidad es aquella en la cual, todos los elementos son ceros, con excepción de aquellos ubicados en su diagonal, de los cuales su
valor es uno. Para la creación de matrices de identidad, se utiliza la función eye.
Tabla 10. Uso de la función eye
Forma de uso
Descripción
eye(n)
Crea una matriz identidad de (n x n)
eye(m, n)
Crea una matriz identidad de (m x n)
Vector de unos (1)
La función ones permite la creación de matrices cuyo único valor es uno
(1)
Tabla 11. Uso de la función ones
Forma de uso
Descripción
ones(n)
Crea una matriz de unos de (n x n)
ones(m, n)
Crea una matriz de unos de (m x n)
ones(m, n, p, …)
Crea una matriz de unos de (m x n x p x …)
37
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Matriz de ceros
Al igual que la función ones, la función rank crea una matriz llena de ceros
Tabla 12. Uso de la función rank
Forma de uso
Descripción
rank(n)
Crea una matriz de ceros de (n x n)
rank(m, n)
Crea una matriz de ceros de (m x n)
rank(m, n, p, …)
Crea una matriz de ceros de (m x n x p x …)
Tamaño de un arreglo
Para conocer el número de elementos de un arreglo, utilice el comando
length:
>> length(x)
ans =
11
Hay que tener en cuenta que la función length retorna la longitud (número de elementos) de la mayor dimensión con mayor número de elementos.
Es decir, en un vector fila, retorna el número de columnas, y en un vector
columna, el número de filas.
Z = [4, 2.8, 72, 28/4, 3.61, 11 74 89];
length(X)
ans =
8
W = [3, 5, 7; 1 2 4]
Lenght(W)
ans =
3
38
Capítulo 3 / Vectores, Matrices y Arreglos
En caso que se requiera conocer la longitud en cada una de las dimensiones
del arreglo, se utiliza el comando size. Existen diversas formas de utilizar
la función (véase Tabla 13. Formas de uso comando size).
Tabla 13. Formas de uso del comando size
Forma de uso
Descripción
d = size(X)
Retorna un arreglo con el número de elementos igual
al número de dimensiones del arreglo (véase función
ndims)
[m,n] = size(X)
Retorna el tamaño de la matriz X en las variables m y n
m = size(X,dim)
[d1,d2,d3,…,dn] = size(X)
Retorna el length de la dimensión de X especificada por
el número escalar dim
Retorna cada una de las dimensiones de X en las variables d1,d2,d3,…,dn. Si el número de dimensiones de X
no es igual a n entonces.
Si n es menor al número de dimensiones del arreglo:
retorna hasta n-1 el tamaño de la dimensión, para n,
la multiplicación de las dimensiones restantes.
Si n es mayor al número de dimensiones del arreglo, el
número de dimensiones +1 hasta n asigna como tamaño,
el valor de uno (1).
Si lo que se desea saber es el número de dimensiones, se utiliza el comando ndims. Hay que tener en cuenta que el número de dimensiones de un
arreglo en MatLab, por construcción, es como mínimo dos (2). Ndims(x)
es igual a length(size(x)).
El comando size puede ser utilizado también para la creación de matrices
especiales; por ejemplo, para crear una matriz identidad del mismo tamaño
de x, se utiliza la instrucción a = eye(size(x)).
Acceso a elementos del vector
Los elementos individuales de un vector, se acceden en MatLab a través de
un número entero, denominado subíndice, encerrado entre paréntesis. Si el
vector tiene más dimensiones, se separa cada una de las dimensiones por
una coma (,).
39
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Por ejemplo, si se requiere acceder al segundo elemento del vector x:
x(2)
ans = 0.9425
otro ejemplo, en este caso, de matriz:
z = [1 2 3; 4 5 6; 7 8 9]
para acceder al elemento de la primera fila, segunda columna:
z(1,2)
ans = 2
Acceso a elementos de un vector, operador dos puntos
La notación de dos puntos ( : ) se utiliza para acceder a bloques de elementos en un vector, de forma similar a como se utiliza para la creación de
arreglos. La forma en que se emplea el operador dos puntos para el acceso
a elementos de vectores, se presenta en la Tabla 14.
40
Capítulo 3 / Vectores, Matrices y Arreglos
Tabla 14. Uso del operador dos puntos (:) para acceder a elementos de un arreglo
Uso*
A(:, j)
A(i:end)
A(i:j:k)
Descripción
Representa la j-ésima columna de A.
En un arreglo unidimensional retorna los elementos
desde i hasta el final del arreglo.
En un arreglo unidimensional, retorna los elementos
desde i hasta k, en incrementos de j unidades (j puede
ser negativo).
A(i, (:)
Representa la i-ésima fila de A
A(:, (:)
Es el equivalente a una arreglo bidimensional. Para matrices, es igual a A
A(j:k)
Equivale a A(j), A(j+1), . . ., A(k)
A(:, j:k)
Equivale a A(:, j), A(:, j+1), . . ., A(:,
k)
A(: :, k)
Es la k-ésima página de un arreglo tridimensional.
A(i, j, k, (:)
A(:)
Es un vector en un arreglo de cuatro dimensiones. El
vector incluye A(i,j,j,1), A(i,j,k,2), etc.
Todos los elementos de A, reorganizados como una única columna.
* En todos los casos, se supone que la matriz A existe y ha sido declarada previamente.
Acceso por medio de arreglo
Las posiciones que se desean extraer de un arreglo, pueden ser definidas en
un arreglo para tal fin. Por ejemplo:
>> x([1 3 6 10]
Operaciones Matriciales
Existen diversas operaciones que pueden realizarse con matrices, a continuación, se presentan las principales de ellas:
41
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Invertir Matrices
Una matriz A (n x n) se dice que puede ser invertible o no singular, si existe una matriz B (n x n) tal que:
AB - BA = I
En MatLab puede usarse la función inv(A) para invertir una matriz:
Transponer matrices
Por efectos de notación, se usará el operador ( ' ) para representar la transpuesta de una matriz (por ejemplo, la transpuesta de la matriz A se denota
por A’). Formalmente, el transponer una matriz implica que el elemento
(i, j) de la matriz transpuesta corresponde al elemento (j, i) de la
matriz original.
A´(i,j) = A(j,i)
En el caso de MatLab, existen dos formas diferentes de transponer matrices:
A través del operador de transposición ( ' )
Es la transposición linear algebraica de la matriz. En caso que la matriz sea
una matriz compleja, es la transpuesta conjugada compleja.
Si se usa en conjunción con el operador punto ( . ), en caso de matrices
complejas, la transpuesta ( .' ) no involucra conjugación. En el caso de matrices reales, el uso de cualquiera de los dos operadores produce el mismo
resultado (A' = A.').
Adición de matrices
Se utiliza el operador más ( + ) para realizar la suma de matrices, las dos
matrices deben ser del mismo tamaño, a menos que uno de los argumentos
sea un número escalar.
42
Capítulo 3 / Vectores, Matrices y Arreglos
Substracción de matrices
Se utiliza el operador menos ( - ) para realizar la resta de matrices, las dos
matrices deben ser del mismo tamaño, a menos que uno de los argumentos
sea un número escalar.
Multiplicación de matrices
El producto algebraico de matrices se realiza por medio del operador ( * ).
Si A y B son dos matrices, el número de columnas de A debe ser igual al
número de filas de B, a menos que uno de los dos sea un escalar. La matriz
resultado está dada por la siguiente expresión:
Multiplicación vectorial de matrices
Es la multiplicación del elemento por elementos de las dos matrices, que
se realiza con el operador ( .* ), las cuales deben ser del mismo tamaño, a
menos que uno de ellos sea un escalar.
División de matrices
Al igual que en el caso escalar, existen dos formas de dividir matrices: división izquierda (mldivide u operador \) y división derecha (mrdivide u operador /).
División izquierda
mldivide(A, B) es equivalente a A \ B.
Si A es una matriz cuadrada es equivalente a inv(A) * B, aunque se pre-
fiere la notación con Backslash debido a que es mucho más rápida de ejecutar. Si A es de n x n y B es de n x 1, X = A \B es la solución al sistema
AX = B, es decir, de regresión lineal. Si A es m x n y B es 1 x m con m~
43
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
= n entonces X = A \ B es la solución en mínimos cuadrados al sistema
sobre o subdeterminado AX = B (X minimiza norm(A*X – B)). Si A es
un escalar, es igual que la división dato a dato, es decir, A \ B = A .\B
División derecha
mrdivide(A, B) es equivalente a A / B. A y B deben tener el mismo
número de columnas. Si A es una matriz cuadrada B / A es equivalente B
* inv(A). si A es n x n y B es 1 x n, entonces X = B / A es la solución al sistema XA = B
La división derecha e izquierda están relacionadas por la ecuación:
B/A = (A'\B')'
División vectorial de matrices
La división elemento por elemento puede realizarse también con matrices.
División vectorial derecha de matrices
Por medio del operador ( ./ ), se realiza la operación con los elementos
A(i, j) / B (i, j); por lo tanto A y B deben tener el mismo tamaño, a menos
que uno de ellos sea un escalar.
División vectorial izquierda de matrices
Por medio del operador ( .\ ), se realiza la operación con los elementos
B(i, j) / A (i, j); por lo tanto A y B deben tener el mismo tamaño, a menos
que uno de ellos sea un escalar.
Potencia de matrices
El operador ( ^ ) permite elevar la matriz A a la potencia p ( A ^ p ). Si
p es positivo, la potencia se calcula elevando al cuadrado repetidamente;
si es negativo, la matriz primero es invertida, y para otros valores de p,
44
Capítulo 3 / Vectores, Matrices y Arreglos
el cálculo involucra la determinación de los vectores propios, de tal forma
que si [V, D] = eig(A) entonces A ^ p = V*D.^p/V
Potencia vectorial
La potencia vectorial (A.^B) es la matriz que cumple con la siguiente
relación:
C(i,j) = A(i, j)^B(i, j)
A y B deben ser del mismo tamaño, a menos que uno de ellos sea escalar.
Producto Kronecker
Si A es una matrix m x n, B es una matriz p x q, entonces el producto
Kronecker es una matriz de m*p x n*q que se define como:
El producto Kronecker en MatLab se implementa por medio de la función
kron(A, B).
Producto Punto
El producto escalar entre dos vectores columna, con el mismo número de
filas A y B, puede ser calculado de dos formas: utilizando la función dot,
por ejemplo dot(A, B), o por medio de la multiplicación de matrices,
es decir, A’*B.
La función dot puede usarse también en arreglos multimensionales, en tal
caso, retorna el producto escalar sobre la primera dimensión de los dos
vectores. Si se desea sobre alguna dimensión en particular, se utiliza la versión dot(A,B,dim), la cual retorna el producto escalar de los dos vectores sobre la dimensión dim.
45
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Producto cruz
Dado que el producto cruz es una operación binaria de dos vectores en un
espacio tridimensional y su resultando es un vector perpendicular a los dos
vectores iniciales, el requisito primordial para realizar el producto cruz en
MatLab es que los vectores con los cuales se realiza el producto cruz sean
vectores fila de tres (3) elementos. Si los vectores son multidimensionales,
deben tener tres elementos sobre la primera dimensión, que es aquella sobre la cual se realiza el producto cruz: Cross(A,B).
El producto cruz puede aplicarse a vectores multidimensionales sobre la
dimensión que se desee, así por ejemplo cross(A,B, dim)calcula el
producto cruz sobre la dimensión dim, la cual debe contener, en cada arreglo, tres (3) elementos.
Ejemplo 5. Uso de operadores matriciales
Operaciones Matriciales
a
a = [1; 2; 3]
1
2
3
b
b = [4; 5; 6]
4
5
6
a’
1 2 3
b’
4 5 6
a+b
a+2
5
7
9
3
4
5
a-b
a-2
a*b
Error
a.*b
a’*b
32
a’.*b
a*2
a/b
a\b
46
Operaciones de Arrays
2
4
6
0 0 1/6
0 0 1/3
0 0 1/2
16/7
a.*2
a./b
a.\b
-3
-3
-3
-1
0
1
4
10
18
Error
2
4
6
1/4
2/5
1/2
4
5/2
2
continua
Capítulo 3 / Vectores, Matrices y Arreglos
continuación
Operaciones Matriciales
2/a
a/2
1/2
1
3/2
1/2
1
3/2
Operaciones de Arrays
2./a
a./2
a^b
Error
a.^b
a^2
Error
a.^2
2^a
Error
2.^a
(a+i*b)’
1-4i 2-5i 3-6i
(a+i*b).’
1+4i 2+5i 3+6i
dot(a,b)
32
cross(a, b)
kron(a,b)
-3
6
-3
4
5
6
8
10
12
12
15
18
2
1
2/3
1/2
1
3/2
1
32
729
1
4
9
24
8
dot(a’,b)
32
cross(a’, b)
-3 6 -3
kron(a’,b)
4 8 12
5 10 15
6 12 18
Contenedores: Estructuras y CellArrays
Bajo ciertas circunstancias, es necesario almacenar información de diferente tipo y organizada jerárquicamente en un mismo contenedor, lo cual
no es posible hacer a través con matrices, incluso multidimensionales. En
estos casos, MatLab provee dos tipos de datos para realizar esta tarea: las
estructuras (struct) y los cellarrays.
47
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Estructuras
Una estructura es un tipo de datos de MatLab que provee funcionalidades
para almacenar datos de forma jerárquica en una única entidad; de manera
sencilla, se puede entender que la estructura permite agrupar datos de diferente tipo, bajo un mismo contenedor. Una estructura está conformada por
los denominados campos (fields), cada uno de los cuales corresponde a un
arreglo de un tipo de datos determinado. A manera de ejemplo, se requiere
almacenar la información de un estudiante, sus notas y las asignaturas que
cursa, esto puede hacerse a través de una estructura.
Figura 4. Ejemplo de Agregación de información con estructura
Datos
notas
3.8 4.0 2.6 4.5 3.2
Asignaturas
Calculo Fisica
nombre
Carlos
Sociales
En la Figura 4. Ejemplo de Agregación de información con estructura, se
muestra la estructura denominada “Datos” que contiene tres (3) campos:
“Notas”, “Nombre” y “Asignaturas”. Como puede observarse, cada campo
almacena información diferente, notas es un arreglo de números, nombre
es una cadena de caracteres y asignaturas es un arreglo de cadenas de caracteres. De la misma forma, la estructura podría contener vectores o matrices multidimensionales. Así mismo, aunque se almacenen arreglos en
una estructura no se exige que todos ellos tengan el mismo número de elementos; así, en el ejemplo propuesto, notas tiene: cinco elementos; nombre
tiene: un único elemento y asignaturas tiene: tres elementos.
Como todos los tipos de datos en MatLab, una estructura en realidad es
un arreglo, de esta forma, dado que el tipo de datos struct define estructuras, un arreglo de estructuras se define como un struct array. Es
más, cada estructura dentro de un arreglo de estructuras, puede contener
una configuración totalmente diferente entre sí (véase Figura 5. Array de
estructuras).
48
Capítulo 3 / Vectores, Matrices y Arreglos
Figura 5. Array de estructuras
Datos
Datos(1)
Datos(2)
notas
3.8 4.0 2.6 4.5 3.2
notas
3.1 2.0
Asignaturas
Calculo Fisica
Asignaturas
Español Calculo
nombre
Carlos
Sociales
nombre
Maria
Aunque por consistencia lógica en el ejemplo previo las estructuras mostradas tienen los mismos tipos de datos en cada uno de los campos, aunque los arreglos son de diferente tamaño en cada caso, puede presentarse el
caso donde campos distintos en diferentes posiciones del arreglo de estructuras contengan incluso tipos de datos diferentes.
Para crear una estructura se utiliza la sentencia struct('nombre_cam-
po1', valores, 'nombre_campo2', valores, . . ., 'nombre_campon', valores). Por ejemplo, para construir la estructura que
se presenta en la Figura 4. Ejemplo de Agregación de información con estructura, se haría de la siguiente forma:
Datos = struct('notas', [3.8 4.0 2.6 4.5 3.2], 'nombre', 'carlos', 'Asignaguras', ['Calculo ' 'Fisica '
'Sociales'])
Cuando se ejecuta el comando de creación de la estructura, MatLab presenta el siguiente mensaje:
Datos =
notas: [3.8000 4 2.6000 4.5000 3.2000]
nombre: 'carlos'
Asignaturas: 'Calculo Fisica Sociales'
Para acceder a los campos de la estructura, se coloca el nombre de la estructura, el operador punto (.) y luego, el nombre del campo; así por ejemplo, para acceder (o cambiar) el campo nombre:
Datos.nombre
49
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
La respuesta en la ventana de comandos en MatLab es:
ans =
carlos
Para modificar el campo:
Datos.nombre = 'Pedro'
La estructura modificada se verá como:
Datos =
notas: [3.8000 4 2.6000 4.5000 3.2000]
nombre: 'Pedro'
Asignaturas: 'Calculo Fisica Sociales'
Para crear arreglos de estructuras, se utiliza el operador corchetes {}. Por
ejemplo, para construir el arreglo de estructuras que se presentan en la Figura 5. Array de estructuras:
Datos = struct('notas', { [3.8 4.0 2.6 4.5 3.2], [3.1
2.0]} , 'nombre', {'carlos', 'Maria'}, 'Asignaguras', { ['Calculo ' 'Fisica ' 'Sociales'], ['Español'
'Calculo']})
Una vez creada la estructura, MatLab presentará el siguiente mensaje:
Datos =
1x2 struct array with fields:
notas
nombre
Asignaturas
Para acceder a los elementos del arreglo de la estructura, se indica el elemento y luego su campo, así por ejemplo, para acceder a la totalidad del
primer elemento la instrucción Datos(1) retorna:
50
Capítulo 3 / Vectores, Matrices y Arreglos
ans =
notas: [3.8000 4 2.6000 4.5000 3.2000]
nombre: 'carlos'
asignaturas: 'Calculo Fisica Sociales'
Para modificar el nombre, se utiliza la instrucción Datos(1).nombre =
'Pedro'.
Algunas de las funciones principales para el manejo de estructuras se presentan a continuación:
Tabla 15. Funciones de manipulación de struc
Función
fieldnames(X)
getfield(nombre)
isfield(nombre)
Descripción
Valor de retorno
Retorna los nombres de los
campos de la estructura X.
Retorna el valor del campo
especificado.
Determina si el campo pertenece o no a la estructura.
Cellarray de strings con
los nombres de los campos
true= sí pertenece y false no pertenece
CellArrays
La principal diferencia entre una estructura y un cellarray es la siguiente: en el primero, los campos se diferencian por un nombre, mientras que
en el cellarray, los campos se acceden por un índice numérico. De esta
forma, el cellarray también permite almacenar datos heterogéneos en
un mismo elemento. En términos generales, un cellarray es una colección de contenedores denominados celdas en las cuales se pueden almacenar diferentes tipos de datos. En palabras sencillas, un cellarray es una
matriz donde cada elemento puede almacenar cualquier otro tipo de datos,
incluyendo estructuras (struct) u otros cellarray. Un cellarray debe ser
rectangular, pues todos los arreglos se deben hacer así en MatLab.
La creación de un cellarray es igual que un struct, con la diferencia
que no se utiliza la instrucción struct ni se asignan nombres a los nombres de los campos.
51
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Si se representa el ejemplo de la Figura 4. Ejemplo de Agregación de información con estructura como una matriz cellarray, quedará de la siguiente forma:
Datos = {[3.8 4.0 2.6 4.5 3.2], 'carlos', ['Calculo '
'Fisica ' 'Sociales']}
El resultado de la creación del cellarray es:
Datos =
[1x5 double]
'carlos'
[1x24 char]
Los cellarrays se pueden crear con múltiples columnas, separando los campos por punto y coma (;) entre filas. Si se utiliza la siguiente instrucción:
Datos = {[3.8 4.0 2.6 4.5 3.2], 'carlos'; ['Calculo '
'Fisica ' 'Sociales']}
Si resulta en un error (CAT arguments dimensions are not consistent), se debe a la forma como se expuso previamente, pues debe ser
siempre rectangular. Esto se corrige incluyendo una columna adicional en
la segunda fila del cellarray:
Datos = {[3.8 4.0 2.6 4.5 3.2], 'carlos'; ['Calculo '
'Fisica ' 'Sociales'], NaN}
El resultado de la creación del cellarray es:
Datos =
[1x5 double] 'carlos'
[1x24 char] [NaN]
Los cellarray pueden crearse también celda por celda, utilizando el operador paréntesis y las celdas separadas por coma; por ejemplo, la creación
del cellarray del ejemplo debe quedar así:
Datos(1,1)
Datos(1,2)
Datos(2,1)
Datos(2,2)
52
=
=
=
=
[3.8 4.0 2.6 4.5 3.2];
'carlos';
['Calculo ' 'Fisica ' 'Sociales'];
NaN;
Capítulo 3 / Vectores, Matrices y Arreglos
Si se desea preasignar memoria al cellarray, se puede utilizar la instrucción cell(número_filas, número_columnas), y luego la instrucción nombre_cellArray{número_filas, número_columnas}
= [] para crear un cellarray de número_filas x número_columnas vacío, por ejemplo:
A = cell(5,5);
A{5, 5} = []
Crea un cellarray de 5 x 5 vacío. Si se desea ver una representación gráfica
del cellarray, se utiliza la función cellplot.
Figura 6. Representación gráfica de un cellarray
Carlos
NaN
A continuación, se presentan algunas de las funciones primordiales de manipulación de un cellarray.
53
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Tabla 16. Funciones de manipulación del cellarray
Función
Descripción
cell(m,n)
Crea un cellarray de m filas y n columnas
ndims(X)
Retorna el número de dimensiones del cellarray X
celldisp(X)
Muestra el contenido de todas las celdas del cellarray X
cellplot(X)
Muestra una representación gráfica del cellarray X
iscell(X)
Determina si X es un cellarray
struct2cell(X)
Convierte la estructura X a un cellarray
cellfun(@fun, X)
Aplica la función fun a todas las celdas del cellarray X
num2cell(X)
Convierte el arreglo numérico X en un cellarray
cell2struct(X)
Convierte el cellarray X a estructura
Análisis Matricial
MatLab provee una serie de funciones que permiten realizar análisis matricial, a continuación se presentan las más comunes de ellas:
Rango de una matriz
Por medio de la función rank, se puede determinar el máximo número de
columnas o filas linealmente independientes que corresponde al rango de
una matriz.
Determinante de una matriz
La instrucción det(X) retorna el determinante de la matriz X. Es importante que la matriz sobre la cual se evalúa el determinante, sea cuadrada.
54
Capítulo 3 / Vectores, Matrices y Arreglos
Valores y vectores propios de una matriz
Para determinar los valores y vectores propios de una matriz, se utiliza la
instrucción eig de la siguiente forma:
[V,D] = eig(x)
Donde V es una matriz de vectores propios y D es la matriz de valores propios de la matriz X, de tal forma que la relación A* V = V * D que es la definición formal de vector y valor propio.
Descomposición de Cholesky
La descomposición o el triángulo de Cholesky es una descomposición de
una matriz simétrica positiva definida, en el producto de una matriz triangular y su transpuesta conjugada. Existen diversas formas de utilizar la
función chol que realiza la descomposición de Cholesky, sin embargo, la
forma tradicional de usarla es:
[R,p] = chol(x)
Donde A es una matriz positiva definida, R es la matriz superior triangular
y p es cero. Se debe cumplir la relación R´ * R = A. En caso que A no sea
positiva definida, p es una valor positivo.
Otras funciones sobre matrices
MatLab provee múltiples funciones sobre matrices y prácticamente cualquier función que se aplique a un escalar puede replicarse sobre los elementos de una matriz, a continuación se presentan algunas funciones de
utilidad y uso común en matrices.
55
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Tabla 17. Algunas funciones sobre matrices
Función
diff
sum
cumsum
Descripción
Calcula las diferencias entre elementos adyacentes de la matriz,
generando un nuevo vector, con
un elemento menos que el vector
original.
Suma los elementos de un arreglo.
Si X es un vector de n elementos,
sum(X) corresponde a
Ejemplo
diff(X)
Crea el vector
[X(2)-X(1) X(3)-X(2) . . .
X(n)-X(n-1)]
sum(X)
sum(X, dim) suma los elementos
de X en la dimensión dim
Retorna la suma acumulada en las
diferentes dimensiones de un arreglo. Si X es un vector de n elemen- cumsum(X)
tos, cumsum(X) corresponde al
cumsum(X,dim)
vector y que contiene los elementos
y(k) tal que y(k)
prod
cumprod
log
56
Retorna los productos a lo largo de
las diferentes dimensiones de un
arreglo. Si X es un vector de n elementos, prod(X) corresponde a
Retorna el producto acumulado a
lo largo de las diferentes dimensiones de un arreglo. Si X es un vector de n elementos, cumprod(X)
corresponde al vector y que contiene los elementos y(k) tal que y(k)
Calcula el logaritmo natural de todos los elementos del vector.
prod(X)
prod(X,dim)
cumprod(X)
cumprod(X,dim)
log(X)
Capítulo 4
Gráficos en MatLab
Gráficos en MatLab
MatLab permite realizar diferentes tipos de gráficos, tanto bidimensionales como tridimensionales. Para los efectos de este documento, se presentarán ejemplos en dos dimensiones que pueden ser extendidos a tres
dimensiones.
Para representar variables en un plano bi o tridimensional, existen diversos
comandos; sin embargo, el comando plot es el más ampliamente utilizado. En la Tabla 18. Uso del comando plot, se presentan las distintas formas
de utilizar este comando.
Tabla 18. Uso del comando plot
Uso
Descripción
Dibuja las columnas de Y contra el subíndice de Y. Si Y es
complejo, dibuja la parte real contra la compleja.
Dibuja cada vector Yi contra el vector Xi en el mismo
plot(X1, Y1, X2, Y2,
eje. Si Xi es un escalar y Yi es un vector, dibuja Yi pun…, Xn, Yn)
tos discretos verticalmente en Xi.
plot(X1, Y1, LineSDibuja las líneas definidas por la tripleta Xi, Yi, Lipec, X2, Y2, LineSpec, donde LineSpec especifica el tipo de línea,
neSpec, …, Xn, Yn,
marcador y color.
LineSpec)
plot(Y)
Por ejemplo:
x = -2*pi:.1:2*pi;
y = cos(x);
plot(x,y)
59
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Ejemplo6. Uso del comando plot
En el LineSpec, se especifica el color y marcador de la línea a utilizar; adicionalmente, se puede especificar el estilo de la línea, el ancho de la línea,
el color, el tamaño del marcador, entre otras características.
Especificación de líneas
El tipo de línea se especifica según la Tabla 19 - Especificación de estilo
de línea.
Tabla 19. Especificación de estilo de línea
Especificador
60
Tipo de línea
'-'
Línea sólida (Default)
'--'
Línea intercalada
':'
Línea punteada
'-.'
Línea de punto-línea
'none'
Sin línea
Capítulo 4 / Gráficos en MatLab
Especificación de marcadores
Al igual que las líneas, los marcadores pueden especificarse según se
muestra a continuación:
Tabla 20. Especificación de marcadores
Especificador
Tipo de Marcador
'+'
Signo más (+)
'o'
Círculo
'.'
Punto (•)
'*'
Asterisco (*)
'x'
Cruz
's'
Cuadrado (□)
'd'
Diamante (◊)
'^'
Triángulo apuntando hacia arriba
'v'
Triángulo apuntando hacia abajo
'<'
Triángulo apuntando a la izquierda
'>'
Triángulo apuntando a la derecha
'p'
Pentagrama (estrella de 5 puntas)
'h'
Hexagrama (estrella de 6 puntas)
'none'
No marcador, default
61
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Especificación de color
Los colores se especifican según se presentan a continuación:
Tabla 21. Especificación de colores
Especificador
Tipo de Color
'r'
Rojo
'b'
Azul
'g'
Verde
'm'
Magenta
'y'
Amarillo
'k'
Negro
'w'
Blanco
'c'
Cyan
figure
t = -2*pi:.1:2*pi;
y = cos(x);
plot(t,cos(t),'-.m*')
Dibujará una línea punteada, magenta con asteriscos como marcadores.
Otros comandos de utilidad
Existen diversos comandos de utilidad en lo que respecta a la manipulación de gráficos en MatLab. A saber:
Comando hold
El comando hold determina si las nuevas gráficas se adicionan a la gráfica
actual o si eliminan y reemplazan la información. Así, el comando hold
62
Capítulo 4 / Gráficos en MatLab
on, retiene la gráfica actual y las propiedades de los ejes, de tal forma que
las gráficas subsecuentes sean adicionadas a la gráfica existente.
Por ejemplo,
figure
t = -2*pi:pi/20:2*pi;
plot(t,cos(t),'-.bo')
hold on
plot(t,cos(t-pi/2),'--rs')
plot(t,cos(t-pi),':g<')
hold off
Ejemplo 7. Comando hold on/off
Comando subplot
El comando subplot divide la figura actual en secciones rectangulares. De
esta forma, el comando subplot(m,n,p) divide la ventana de la figura en
una matriz de mxn.
63
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Ejemplo:
figure
subplot(2,2,1)
text(.5,.5,{'subplot(2,2,1)';'o subplot 221'},…
'FontSize',14,'HorizontalAlignment','center')
subplot(2,2,2)
text(.5,.5,{'subplot(2,2,2)';'o subplot 222'},…
'FontSize',14,'HorizontalAlignment','center')
subplot(2,2,3)
text(.5,.5,{'subplot(2,2,3)';'o subplot 223'},…
'FontSize',14,'HorizontalAlignment','center')
subplot(2,2,4)
text(.5,.5,{'subplot(2,2,4)';'o subplot 224'},…
'FontSize',14,'HorizontalAlignment','center')
Figura 7. Comando subplot
1
0.8
0.6
0.4
0.2
0
0
1
0.8
0.6
0.4
0.2
0
0
1
0.8
0.6
subplot (2,2,1)
o subplot 221
0.5
0.4
1
0
0
1
0.8
0.6
subplot (2,2,3)
o subplot 223
0.5
0.2
0.4
1
0.2
0
0
subplot (2,2,2)
o subplot 222
0.5
1
subplot (2,2,4)
o subplot 224
0.5
1
Si se requiere que una o más figuras ocupen más de una sección, se puede
utilizar el comando subplot también, así:
64
Capítulo 4 / Gráficos en MatLab
Ejemplo, subplots asimétricos:
figure
subplot(2,2,[1 3])
text(.5,.5,'subplot(2,2,[1 3])',…
'FontSize',14,'HorizontalAlignment','center')
subplot(2,2,2)
text(.5,.5,'subplot(2,2,2)',…
'FontSize',14,'HorizontalAlignment','center')
subplot(2,2,4)
text(.5,.5,'subplot(2,2,4)',…
'FontSize',14,'HorizontalAlignment','center')
Figura 8. Comando subplot asimétrico
1
1
0.8
0.9
0.6
0.8
0.4
0.7
0.6
0.5
0.4
0.2
0
0
subplot (2,2,[13])
0.8
0.6
0.2
0
0
0.4
0.5
0.5
1
0.3
0.1
subplot (2,2,2)
1
0.2
1
subplot (2,2,4)
0
0
0.5
1
Asignación de títulos y valores en los ejes
La asignación de títulos de gráficos, se hace por medio del comando title. Si se desea modificar el título de los ejes, se emplean los comandos
xlabel y ylabel. Cuando en uno de los ejes (generalmente el eje horizontal) se manejan fechas, se utiliza la función datetick.
65
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Tabla 17. Manejo de comandos title, xlabel, ylabel y datetick
Comando
title('string')
xlabel('string')
ylabel('string')
datetick(tickaxis,
dateformat)
66
Descripción
Ejemplo
title('Gráfica de
coseno(\Theta)')
Agrega el título Gráfica
de coseno(θ)
xlabel('-\pi \leq \
Theta \leq \pi')
Agrega la cadena de texto
como rótulo del eje de las x. Agrega como título del eje
de las x la leyenda –π≤ θ≤ π
ylabel('cos(\
Theta)')
Agrega la cadena de texto
Agrega como título del
como rótulo del eje de las y.
eje de las x la leyenda
coseno(θ)
datetick('x','mmm'
Define el eje tickaxis
Define que el eje x contiene
como eje que contiene fefechas y deben presentarchas que se despliegan en el
se en el formato mmm (p.e,
formato dateformat.
Jan para enero)
Agrega la cadena de texto
como título del gráfico.
Capítulo 5
Manejo de archivos
en MatLab
Manejo de archivos en MatLab
MatLab provee diversos métodos para almacenar información de una sesión de trabajo.
El comando diary
El comando diary permite almacenar todas las entradas y salidas de MatLab de la sesión actual de trabajo. De esta forma, se crea un log de las
entradas por teclado y los resultados de salida de tipo texto (no incluye gráficas ni otros elementos de este tipo).
Tabla 22. Uso del comando diary
Comando
Descripción
diary filename
Escribe una copia de todas las entradas de teclado subsecuentes y las salidas resultantes en el archivo especificado. El argumento filename es la ruta completa de
ubicación del archivo log, si solo contiene el nombre del
archivo, se almacenará en el directorio de MatLab actualmente activo.
diary off
Suspende la escritura en el archivo.
diary on
Reanuda la escritura en el archivo log actual.
Salvar y almacenar variables de MatLab
En los casos en los que se requiera almacenar el valor de las variables de
MatLab para procesamiento futuro, es necesario almacenar la información
en el formato binario de MatLab con el fin que se mantenga la precisión
completa de dichas variables. El formato binario de MatLab se denomina
MAT-files y los archivos generados tienen la extensión .mat. Para almace69
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
nar los valores de las variables, se utiliza el comando save, mientras que
el comando load carga el archivo de variables.
Tabla 23. Uso del comando save y load
Comando
save(filename)
save(filename,
variables)
load(filename)
Load(filename,
varibles)
Descripción
Almacena todas las variables del workspace actual y activo, en MatLab, en un MAT-file llamado filename .
Almacena solo las variables especificadas.
Carga las variables del MAT-file llamado filename
en el workspace actual.
Carga las variables especificadas del MAT-file.
Leer y guardar archivos de Excel y CSV
MatLab soporta la importación y exportación de información de dos formatos adicionales, archivos: CSV (comma separated values) y Excel.
Tabla 24. Comandos para manipulación de archivos Excel y CSV
Comando
Descripción
Lee los datos de la primera hoja del archivo de
Excel llamado filename y retorna los valores
[num,txt,raw] =
numéricos en el arreglo num. Opcionalmente,
xlsread(filename)
retorna los encabezados de las columnas en el
arreglo txt y los datos no procesados (valores
y texto) en el arreglo raw.
Abre una ventana de Excel para seleccionar in[num,txt,raw] =
teractivamente los datos (data), de la hoja de
xlsread(filename,-1)
cálculo llamada filename.
[num,txt,raw] =
Lee los datos de la hoja sheet del archivo de
xlsread(filename,sheet)
Excel llamado filename.
Escribe el arreglo A en la primera hoja del arxlswrite(filename,A)
chivo de Excel filename empezando en la
celda A1.
Escribe el arreglo A en la hoja sheet del arxlswrite(filename,A,sheet) chivo de Excel filename empezando en la
celda A1.
70
Capítulo 5 / Manejo de archivos en MatLab
A = csvread(filename)
Cvswrite(filename, A)
Lee el archivo separado por comas llamado
filename. El resultado se almacena en el
vector A. El archivo solo puede contener valores numéricos.
Escribe la matriz A en el archivo separado por
comas filename.
Ejemplo
Escritura en un archivo de Excel:
valores = {1, 2, 3 ; 4, 5, ‘x’ ; 7, 8, 9};
encabezados = {'Primera', 'Segunda', 'Tercera'};
xlswrite('Ejemplo.xls', [encabezados; valores]);
La hoja1 del archivo Ejemplo contiene:
Primera
1
4
7
Segunda
2
5
8
Tercera
3
x
9
Lectura del archivo:
A = xlsread('Ejemplo.xls')
xlsread retornará:
A =
1
2
3
4
5
NaN
7
8
9
Archivos de script M-files
Para problemas simples, digitar las instrucciones en la ventana de comandos es una forma sencilla y eficiente de trabajar. Sin embargo, cuando el
número de instrucciones aumenta, así como su complejidad, y adicionalmente se desea reutilizar los comandos en otra oportunidad, se hace necesario contar con una forma de almacenar los comandos y poderlos ejecutar.
71
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
En estos casos, se desarrolla lo que se denomina un script, que no es más
que una secuencia de comandos almacenados en un archivo de texto. MatLab puede abrir y ejecutar comandos de la misma forma como si fuesen
digitados en la ventana de comandos. Este tipo de archivos se denominan
M-files y su extensión es .m.
Los archivos M-files son archivos de texto que pueden ser creados y modificados en cualquier editor de texto, sin embargo, MatLab provee un editor
propio denominado el EditorM-file, el cual se puede acceder seleccionando File → New → M-file.
Figura 9. Archivo de texto M-file
Para ejecutar el script, desde el M-file editor, seleccione File → Run Script.
Una forma alterna es utilizar el comando Debug → Save And Run o presionando la Tecla F5.
72
Capítulo 5 / Manejo de archivos en MatLab
Algunas sugerencias para el manejo de M-files
1. Asigne un nombre significativo al script, es decir, que tenga relación con el propósito del script.
2. No asigne como nombre del script, el mismo nombre de alguna
variable que se calcula dentro del mismo, pues MatLab no podrá
ejecutar dicho script más de una vez, a menos que el valor de dicha variable se limpie, porque luego de la primera ejecución, en el
workspace, quedará la variable ―con el mismo nombre del script
cargada―.
3. No asigne al script, el mismo nombre de una función o comando
de MatLab. Para verificar la existencia del nombre utilice el comando which.
4. Trate de mantener las convenciones de asignación de nombres de
variables de MatLab, es decir, debe comenzar por una letra, puede
incluir dígitos y el carácter underscore.
73
Capítulo 6
Fundamentos de
programación
en MatLab
Fundamentos de
programación en MatLab
Dentro de un archivo M-File existe una serie de comandos o acciones.
Cuando una acción (instrucción) sigue otra en secuencia, es decir, las acciones se realizan siguiendo un orden preciso preestablecido de manera
que una instrucción se realiza inmediatamente después de otra, se dice que
se establece una Estructura Secuencial. De esta forma, el flujo del programa coincide exactamente con el orden en el cual se han escrito dichas
instrucciones.
Control de flujo – Estructuras de selección
Sin embargo, generalmente un programa no se compone de una serie de
instrucciones que se siguen en un orden establecido, sino que requiere la
ejecución de una serie de acciones, que son más complicadas respecto a
una lista sencilla de instrucciones. Uno de estos casos se presenta cuando
existen una serie de posibles alternativas que se ejecutarán en función del
cumplimiento de determinadas condiciones. De esta manera, es necesario
que el programa realice una serie de acciones en función del cumplimiento o no, de determinadas sentencias. Para esto se utilizan las Estructuras
de Selección.
Definición: una estructura de selección es aquella en la cual determinadas acciones o instrucciones, se ejecutan según se cumplan o no determinadas condiciones.
Las estructuras de selección se utilizan con el fin de tomar decisiones lógicas, de tal forma que también se denominan: estructuras de decisión o
alternativas.
77
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
En este tipo de estructuras, se evalúa una o varias condiciones y en función
del resultado retornado, se ejecuta una o varias instrucciones. Las condiciones se definen por medio de expresiones lógicas.
Para evaluar las condiciones, se hace uso de los denominados operadores
lógicos. Para los operadores lógicos y relacionales, una condición se denomina como verdadera si contiene un valor distinto de cero y falsa, lo contrario. La respuesta de un operador lógico es uno (1), si es verdadero y cero
(0), si es falso.
Tabla 25. Operadores relacionales y lógicos
Operador
Descripción
|
Menor que. Retorna a verdadero si el operando de la izquierda es exclusivamente menor que el operando de la derecha.
Menor o igual que. Retorna a verdadero si el operando de la
izquierda es menor o igual que el operando de la derecha.
Mayor que. Retorna a verdadero si el operando de la izquierda es exclusivamente mayor que el operando de la derecha.
Mayor o igual que. Retorna a verdadero si el operando de la
izquierda es mayor o igual que el operando de la derecha.
Igual. Retorna a verdadero si el operando de la izquierda es
exactamente igual que el operando de la derecha.
Diferente. Retorna a verdadero si el operando de la izquierda
es diferente que el operando de la derecha.
Operador Y. Retorna a verdadero si los dos operandos son
verdaderos.
Operador O. Retorna a verdadero si cualquiera de los dos
operandos son verdaderos.
~
Operador no
<
<=
>
>=
==
~=
&
xor(A,B)
O exclusivo: retorna 1 si A o B son Verdaderos; retorna a
Falso si A y B son los dos Falsos o los dos son Verdaderos.
Ejemplo
A<B
A<=B
A>B
A>=B
A == B
A ~= B
A & B
A | B
~A
xor(A,B)
En conjunto con los operadores relacionales y lógicos, MatLab provee
un conjunto de instrucciones que permiten realizar control de flujo de
programas.
78
Capítulo 6 / Fundamentos de programación en MatLab
Estructura if simple
Las estructuras de selección simples evalúan una sola condición o conjunto
de condiciones; y dependiendo del resultado retornado, se ejecuta una acción si este resultado es verdadero y, o de lo contrario, es decir, si el resultado de la instrucción es falso, no realiza ninguna acción.
Las estructuras de selección simple se representa en MatLab, con la instrucción (sintaxis varias líneas):
if (Condición o condiciones)
<instrucciones>
end
Donde condición o condiciones es una expresión(es) numérica(s) o
de cadena(s) que puede ser evaluada como verdadero (True) o falso (False). Las condiciones de evaluación pueden combinarse por medio de los
operadores lógicos (AND, OR, NOT, XOR).
Ejemplo
if A <= B
disp('A es menor o igual a B')
end
Estructura if doble
Las estructuras de selección simples son bastante limitadas y rígidas. Generalmente en un programa requiere de estructuras que permitan por lo
menos evaluar entre dos (2) opciones, es decir, si se cumple la condición o
condiciones, se realicen una serie de instrucciones; y si no se cumple dicha
condición(es), se realiza una serie diferente de instrucciones.
Para realizar este tipo de acciones, se utilizan las estructuras de selección
dobles, las cuales se construyen, como se describe a continuación:
if (Condición o condiciones)
<instrucciones-Verdadero>
79
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
else
<instrucciones-Falso>
end
Ejemplo:
if A <= B
disp('A es menor o igual a B')
else
disp('A es mayor que B')
end
Estructura if múltiple
Las estructuras de selección simple, se emplean para ejecutar una sola instrucción cuando una condición es verdadera; de otro lado, las estructuras
de selección doble, se emplean para ejecutar unas instrucciones determinadas si una condición es Verdadera y ejecutar otro grupo de instrucciones si
la condición es Falsa. Las estructuras de selección múltiple se utilizan para
comprobar una segunda condición si la primera condición es Falsa.
Usualmente se requiere que existan más de dos elecciones posibles, de
tal forma que se puedan ejecutar determinadas acciones dependiendo del
resultado que se obtenga al evaluar una expresión o expresiones. Dependiendo del tipo y número de expresiones a evaluar, se utilizarán diferentes
estructuras de selección múltiple.
En MatLab existen dos tipos de instrucciones para representar estructuras de selección múltiples, que en función de su nivel de complejidad son:
•
•
Función switch
Instrucción if – elseif – else – end
Función switch
La función switch evalúa una lista de expresiones y devuelve un valor
o una expresión asociada a la primera instrucción de la lista que produce
como resultado: Verdadero (True).
80
Capítulo 6 / Fundamentos de programación en MatLab
La sintaxis de la función switch es como sigue:
switch expresión-prueba
[case lista_expresión-n
[instrucciones-n]] . . .
[otherwise
[instrucciones_else]]
end
Donde:
Expresión-prueba es la expresión que será evaluada. Puede ser de tipo numérico o de cadena de caracteres.
Lista_expresión-n es una lista delimitada por comas y encerradas en corchetes {}: expresión, expresión. Solo si el primer conjunto de expresiones
asociadas al primer caso se cumplen, es ejecutada. Pero si no existen coincidencias, las instrucciones del otherwise, se ejecutan.
En general, la instrucción switch se emplea para evaluar una expresión
que puede tomar n valores distintos, de tal forma que en función del valor
que tome la expresión, se realizará una serie de acciones distintas asociadas al primer valor que, entre los valores a los que está ligado, cuente con
el obtenido al evaluar la expresión.
Ejemplo:
switch Número
case {1,2,4,5}
disp('Entre
case {6, 7, 8}
disp('Entre
case {9, 10}
disp('Entre
otherwise
disp('Mayor
end
1 y 5')
6 y 8')
9 y 10')
a 10')
81
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Instrucción if . . . elseif . . . else . . . end
El método alterno para evaluar estructuras de selección múltiples es el empleo de la instrucción if . . . elseif . . . else . . . end .
Esta instrucción trabaja de manera similar a la instrucción if . . . else
. . . end; con la diferencia que en lugar de evaluar una sola condición
y determinar si es Falsa o Verdadera, evalúa la primera condición; en caso
de resultar Falsa, evalúa la segunda, y así sucesivamente hasta que encuentre una condición que se cumpla para realizar una serie de instrucciones. Si
ninguna de las condiciones es verdadera, se ejecutan las acciones contempladas en el caso else. La sintaxis de formato de bloque para esta instrucción es como sigue:
if condición
[instrucciones]
[elseif condición-n
[instrucciones_elseif] …
[else
[instrucciones_else]]
end
Ejemplo:
if rendimiento == 1
bonificación = salario * 0.1
elseif rendimiento == 2
bonificación = salario * 0.09
elseif rendimiento == 3
bonificación = salario * 0.07
else
bonificación = 0
end
De esta forma, se pueden añadir instrucciones elseif a una instrucción if
. . . else para comprobar una segunda condición si la primera es falsa.
Por ejemplo, el siguiente procedimiento calcula una bonificación salarial
dependiendo de la clasificación del trabajador. La instrucción que sigue a
la instrucción else sólo se ejecuta cuando las condiciones de todas las restantes instrucciones if y elseif son Falsos.
82
Capítulo 6 / Fundamentos de programación en MatLab
Cada estructura de selección y sus tipos de representación en MatLab tienen un objetivo claro y específico, para utilizar la estructura y el tipo de
representación que se ajuste a sus necesidades, así como concepto del programa y requerimientos del problema. En general, si sus condiciones y
acciones pueden asociarse con un tipo de datos específico (valor) o si sus
condiciones reciben un valor específico, y, en función de ese valor, se ejecuta una acción o grupo de acciones, utilice la instrucción switch. En
caso que su problema no se ajuste a ninguna de estas características, utilice
la instrucción if . . . elseif . . . else . . . end.
Es importante recalcar que las instrucciones de tipo if . . . elseif
. . . else . . . end son más flexibles en cuanto al tipo de condiciones a evaluar y a las acciones a realizar, por lo que pueden ser implementadas en cualquier tipo de requerimiento. Todo depende del tipo de
estructura con la cual se sienta cómodo.
Estructuras de selección anidadas
Las estructuras de selección se pueden anidar o encajar, es decir, introducir
unas en el interior de otras, con el fin de realizar un análisis un poco más
complejo. De las dos estructuras de selección estudiadas en este apartado
(switch e if .. else – y sus combinaciones), tan solo las de tipo if
.. else se pueden anidar. La estructura de selección anidada típica se escribe tal y como se presenta a continuación:
if <condición1>
if <condición2> %Esta estructura está
anidada
<acciones2>
else
<acciones-else2>
end %Fin estructura anidada
else
<acciones3>
end
Obsérvese que la estructura anidada se “cierra” completamente dentro de
la estructura contenedora. No se puede cerrar una estructura anidada fuera
de su estructura contenedora. Es decir, no se pueden tener estructuras de
83
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
selección anidadas superpuestas. También es importante recalcar que las
estructuras anidadas pueden no ser del mismo tipo de instrucción, es decir,
se pueden anidar, en el caso de estructuras de selección, una o varias instrucciones switch dentro de una estructura if . . . else.
Adicionalmente, las estructuras anidadas pueden reemplazar las estructuras
de selección múltiple. Sin embargo, la utilización de estructuras anidadas
en reemplazo de estructuras de selección múltiple aumenta la complejidad
del código, haciendo más difícil su corrección, mantenimiento y detección de errores. Una estructura de selección de n alternativas o de decisión
múltiple, puede ser construida utilizando una estructura con el siguiente
formato:
if <condición 1>
<acciones1>
else
if <condición2>
<acciones2>
else
if <condición3>
<acciones3>
. . .
. . .
end
end
end
También pueden utilizarse cuando se realizan análisis similares al realizado por una estructura de selección múltiple, pero con la diferencia que en
el caso de estructuras anidadas, para que se realicen determinadas acciones en función de algunas condiciones, tuvo que cumplirse una condición
con anterioridad.
Generalmente, las estructuras de selección anidadas se utilizan en conjunción con estructuras de selección múltiple.
Dado que el anidado de estructuras de selección llegan a ser bastante complejas, para que el programa sea claro, es preciso utilizar identación (sangría), de modo que exista una correspondencia entre bloques de estructuras
de selección.
84
Capítulo 6 / Fundamentos de programación en MatLab
Estructuras de iteración
Las estructuras de iteración, también denominadas bucles o ciclos (loops),
se utilizan para realizar un proceso repetidas veces. Este proceso se repite mientras se cumpla una determinada condición o condiciones. Hay que
prestar especial atención a los loops infinitos, hecho que ocurre cuando la
condición de finalizar el bucle no se llega a cumplir nunca. Se trata de un
error muy típico de programación y debe prevenirse al máximo.
Generalmente, una iteración se especifica con los siguientes componentes:
1.
2.
3.
4.
5.
Inicialización: se asignan valores iniciales a cantidades usadas en
el ciclo antes que inicie la iteración.
Variables de control: una o más variables que toman nuevos valores para cada repetición sucesiva.
Instrucciones sucesivas: una o más instrucciones que asignan nuevos valores a las variables de control como preparación para la siguiente repetición.
Cuerpo del ciclo: secuencia de cero o más instrucciones que se
ejecutan una vez por cada iteración.
Condición de continuación: expresión lógica o relacional que se
prueba antes o después de cada repetición. Si la condición es verdadera, entonces se realiza la siguiente repetición, de lo contrario el control fluye a la instrucción del programa que se encuentra
después del ciclo.
En términos generales, hasta donde sea posible, se debe evitar el uso de
ciclos, debido a que incrementan de forma substancial el tiempo y los recursos necesarios para la ejecución del script. Cuando se trabaja con arreglos (matrices o vectores) es común su manipulación por medio de ciclos.
Como práctica recomendada es el pre-asignar memoria a todos los arreglos, con el fin de evitar que en cada iteración, MatLab tenga que aumentar
el tamaño del arreglo de forma automática.
85
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Conceptos Preliminares
Antes de seguir con los conceptos de las estructuras de iteración utilizadas
en MatLab, es importante conocer ciertos conceptos preliminares que tienen alta relación con el concepto de bucle.
Contadores
Generalmente cuando se emplea un bucle, es necesario contar los sucesos
o acciones internas del bucle, como pueden ser el número de iteraciones
realizadas, etc. Una forma de controlar un bucle es mediante un contador.
Definición: un contador es una variable cuyo valor se incrementa o decrece en una cantidad constante en cada iteración.
Es importante tener claro que un contador no siempre incrementa, puede
darse el caso en que un contador disminuye de valor. Por ejemplo, si se desea realizar un ciclo diez (10) veces, el contador se inicia en 1 y aumenta
con cada iteración; mientras que si el contador se inicia en 10, deberá disminuir su valor en cada iteración. Todo depende de los requisitos y características del problema a resolver. Adicionalmente, aunque el incremento
–o decremento– unitario es el más común, no en todos los casos se requiere
que el contador aumente en la unidad.
Se debe recalcar que los contadores requieren de una inicialización –asignación de un valor inicial base– antes de su empleo en un ciclo, donde posteriormente será incrementado o disminuido ese valor inicial.
La inicialización se realiza de la siguiente forma:
nombre_contador = valor_inicial;
Mientras que el incremento se realiza como sigue:
nombre_contador = nombre_ contador +
valor_constante_incremento;
86
Capítulo 6 / Fundamentos de programación en MatLab
Donde: valor_constante_incremento puede ser un número positivo
o negativo. También puede utilizarse la instrucción de incremento/decremento unitario.
nombre_contador++;
El uso principal de los contadores es como controladores del flujo, es decir,
determinar cuántas veces se realiza la iteración.
Acumulador
Además de contar cuántas veces se ejecuta un ciclo, constantemente es
necesario almacenar, acumular o totalizar valores o datos en una variable.
Para tal fin, se emplean los acumuladores.
Definición: un acumulador es una variable que se incrementa o decrece
una cantidad variable en cada ciclo.
Como se observa claramente, el concepto de acumulador es bastante cercano al concepto de contador, con la diferencia que el acumulador se incrementa o decrece una cantidad variable, en contraposición al contador, que
lo hace en una cantidad constante.
Al igual que los contadores, los acumuladores requieren de una instrucción
de inicialización previa a su empleo dentro del ciclo.
Cada vez que se ejecuta un lazo, el acumulador requiere de una operación
de acumulación, que es del tipo:
nombre_acumulador = nombre_del_acumulador +
valor_variable;
Nótese lo siguiente:
•
•
valor_variable puede ser un valor que cambia con cada iteración o puede ser la asignación del valor almacenado por una
variable.
La operación de acumulación no se refiere exclusivamente a la
suma o resta. Esta puede incluir operaciones tales como multiplicación, división, etc y puede involucrar dos (2) o más operandos.
87
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Interruptor
Los interruptores, conmutadores, indicadores, banderas, flags o switches
son variables que pueden tomar diversos valores a lo largo de la ejecución
del programa.
Definición: un interruptor es una variable que puede tomar dos valores
diferentes a lo largo de la ejecución de un programa, comunicando así
información de una parte a otra del mismo.
Los interruptores deben su nombre al hecho que por convención, únicamente adoptan dos valores diferentes ( 0 o 1; Falso o Verdadero; Rojo o
Verde) al igual de un interruptor eléctrico. Estos dos valores no necesariamente deben ser una pareja, pero si deben ser del mismo tipo de datos si la
variable se ha definido como de un tipo específico.
Usualmente, los interruptores son utilizados en conjunción con estructuras
de iteración y estructuras de selección, ya sea para el control de bucles o
para la transmisión y almacenamiento de información.
La instrucción for
Cuando se conoce exactamente cuántas veces se debe realizar determinada
acción o grupo de acciones por medio de un ciclo, la instrucción for . . .
end es la instrucción idónea a emplear. La estructura de repetición for se encarga de todos los detalles de la repetición controlada por un contador. La repetición controlada por un contador requiere de los siguientes factores :
1.
2.
3.
4.
El nombre de un variable de control (o contador de ciclo)
El valor inicial de la variable de control
La condición de prueba o valor final de la variable de control (hasta donde hacer el ciclo)
El incremento o decremento que tendrá la variable de control cada
vez que suceda el ciclo.
Cabe anotar que el número de repeticiones no se hace modificando directamente la variable de control, sino barriendo un vector de valores, es decir,
se barre sobre una matriz.
88
Capítulo 6 / Fundamentos de programación en MatLab
Los errores más comunes cuando se escriben estructuras de iteración son:
•
•
Ciclos sin fin.
Errores por diferencia de uno. Es decir, el ciclo se realiza una vez
más o una vez menos de lo requerido. Para evitar errores por diferencia de uno, utilice el valor final en la condición de una estructura de iteración y el operador relacional <=, partiendo de un valor
inicial de uno (1), si utiliza como valor inicial cero (0), el operador
lógico a emplear es <.
La sintaxis general de la estructura for es:
for variable = expresion
[instrucciones]
end
los comandos entre el for y el end se ejecutan una vez cada vez que se evalúa la expresión. Algunas de las reglas para la ejecución de un for son:
1. Si la expresión resultante es una matriz vacía, el loop no se ejecutará. El control pasa directamente a la instrucción que le sigue al
end del for.
2. Si el resultado de la expresión es un escalar, el loop se ejecutara
una vez, con el valor de la variables igual al valor del escalar.
3. Un loop for no puede terminarse, reasignado el valor de la variable del loop dentro del mismo.
4. A la finalización del for, la variable contiene el último valor
usado.
5. Puede hacerse uso del operador dos puntos: para definir el número de repeticiones, de la siguiente forma for índice =
valor_inicial:incremento:valor_final
Ejemplo:
for i = 7:1:12
%Instruccion
end
89
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
La instrucción while
Esta instrucción ejecuta una serie de instrucciones mientras la condición
dada sea verdadera.
Sintaxis:
while condición
[intrucciones]
end
Si condición es True, todas las instrucciones se ejecutan hasta que se encuentra la instrucción end. Después, el control vuelve a la instrucción
while y se comprueba de nuevo la condición. Si la condición es aún True,
se repite el proceso. Si no es True, la ejecución se reanuda con la instrucción que sigue a la instrucción end. Los bucles while… end se pueden
anidar a cualquier nivel. Cada end coincide con el while más reciente.
Ejemplo:
while A<B
%Instrucciones
end
La instrucción while permite que el ciclo sea terminado de forma implícita
si se cumple alguna condición, por medio de la instrucción break. Sintaxis:
while condición
[intrucciones]
Condición_terminacion
Break;
end
Ejemplo
while A<B
%Instrucciones
if A == 0
break;
end
end
90
Capítulo 6 / Fundamentos de programación en MatLab
En este caso, el ciclo se ejecuta mientras que la variable A sea menor a
la variable B y en el caso que la variable A tome el valor de cero, el ciclo
finalizaría.
Estructuras Iterativas Anidadas
De la misma forma en que se pueden anidar estructuras de selección, es
posible insertar un bucle dentro de otro. Las reglas para construir estructuras repetitivas anidadas son iguales en ambos casos: la estructura interna
debe estar incluida totalmente dentro de la externa (no deben haber bucles
superpuestos).
Adicionalmente, es importante tener contadores diferentes para cada bucle
interno. Las variables de control de los bucles toman valores, de modo tal
que por cada valor de la variable índice del ciclo externo se debe ejecutar
totalmente el bucle interno.
Las estructuras de iteración se anidan generalmente para recorrer una serie
de datos (un bucle externo recorre por ejemplo las filas y un bucle interno
recorre en el sentido contrario, en este caso, las columnas).
La anidación o encajamiento que se presenta frecuentemente es la anidación de estructuras de iteración con estructuras de selección.
Ejemplo estructuras de iteración anidadas:
for i = 7:1:12
end
for j = 3:1:5
valor(i-6, j-2) = i*j
end
91
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Ejemplo estructuras de iteración anidadas con estructuras de selección:
for i = 7:1:12
for j = 2:1:5
if j == 2
%Instrucción
end
if j == 3
%Instruccion 2
end
end
end
92
Capítulo 7
Modelamiento de
Volatilidad en MatLab
Modelamiento de
Volatilidad en MatLab
El estudio de la volatilidad y su pronóstico, entendida como la varianza
condicional del activo subyacente, es relevante en diversos aspectos relacionados con la econometría financiera (Bauwens L., Sebastien L., Rombouts. 2006). Dentro de las aplicaciones que tiene, están, por ejemplo, la
valoración de opciones, la selección y diversificación de portafolios, valoración de opciones, hedging y la administración de riesgos, como por
ejemplo, cálculo del Value at Risk VaR y otras medidas de riesgo como
lo es el Expected Shortfall ES; así como la implementación de teorías tales como CAPM (Capital Asset Pricing Model) y APT (Arbitrage pricing
theory) (Tsay 2006; Bauwens et al 2006, Long 2005; Pong S., Granger C.
2003; Hansen P., Lunde A. 2005). De forma complementaria, a medida que
se desarrollan nuevos instrumentos financieros, se incrementa la necesidad
de analizar la volatilidad (Kawakatsu, 2006). Incluso, la volatilidad puede
ser usada por los hacedores de política como un elemento que mide la vulnerabilidad de los mercados y de la economía, al conectar incertidumbre
en el mercado con confidencia del público (Pong S., Granger C. 2003). En
este contexto, el contar con pronósticos correctos de volatilidad es un elemento crucial en la implementación y evaluación de modelos de riesgo, de
valoración de activos y de estrategias de cobertura (McMillan D., Speight
A., 2004). Sin embargo, la volatilidad no es riesgo (Pong S., Granger C.
2003), cuando se interpreta como incertidumbre puede utilizarse por parte
de los inversionistas como un elemento para cuantificar el nivel de riesgo
de la inversión. En el caso de la volatilidad de acciones, ésta no es observable directamente, puesto que, por ejemplo, para precios de cierre de acciones, no se observa la volatilidad diaria, dado que se cuenta con un solo
dato al final del día.
Según Embrechts (2000), para el caso de retornos de acciones, existen una
serie de hechos estilizados que de alguna forma, deben ser contenidos en
los modelos matemáticos que representan su comportamiento. Los principales hechos estilizados presentes en las series de retornos de acciones son:
95
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
•
•
•
•
96
Las distribuciones de retornos son de “colas anchas” o Leptocurtosis (Brooks, 2008), es decir, existe mayor probabilidad de ocurrencia de hechos extremos que en el caso de la distribución normal
estándar (la cual, es ampliamente utilizada como parámetro de
múltiples modelos); de tal forma, que las pérdidas pueden ser mucho mayores a las calculadas con la distribución normal (Brooks,
2008; Franses, Van Dijk, 1996; Engle RF, Patton A. 2001; Huann,
D., Wand, H., Yao, Q., 2008).
Retornos pequeños y amplios no ocurren de forma separada en el
tiempo, como se espera en una secuencia de variables aleatorias,
sino en clusters, es decir, un valor bajo o alto del retorno se presenta, otros valores de tamaño comparable aparecen poco tiempo después (Brooks, 2008; Franses, Van Dijk, 1996; Giot, P., Laurent S.,
2003; Engle RF, Patton A. 2001; Engle, R., Focardi, S., Fabozzi
F., 2008; McMillan, D., Speight, A., 2004; Engle RF, 2002), es decir, las variaciones de los precios de activos financieros presentan
cierta dependencia que no desaparecen sino muy lentamente (Valderas, Alba y Olmedo, 2002), haciendo que los choques de volatilidad actuales influyen en la expectativa de volatilidad múltiples
periodos hacia adelante (Engle RF, Patton A., 2001). Otra forma
de entender la denominada volatility clustering es que las series
de retornos financieros generalmente no se encuentran correlacionadas, pero las series de retornos cuadráticos si lo son (Zang, K.,
Laiwan, C, 2009). Una explicación plausible para este fenómeno,
común a un gran número de series financieras, es que la información, afecta los cambios de precios, llega en bloques en la cual y
no en eventos aislados (Brooks, 2008).
Efectos Leverage. La tendencia a la volatilidad de aumentar cuando se presentan caídas en precios que cuando se presentan aumentos de precios de la misma magnitud (Brooks, 2008). Es decir, los
choques tienen efectos asimétricos (Engle RF, Patton A., 2001;
McMillan D., Speight A., 2004; Mills, 1999) y por lo tanto, las
distribuciones de retornos asociadas son a su vez asimétricas. Bajo
este escenario, existe una relación negativa entre la varianza actual
y el signo de choques previos; de esta forma, un choque negativo
incrementa la varianza condicional en una cantidad mayor que la
magnitud donde se afecta la varianza condicional por efecto de un
choque positivo.
Efecto de reversión a la media. (Engle RF, Patton A., 2001). Se
asocia la existencia de un nivel normal de volatilidad, al nivel
Capítulo 7 / Modelamiento de Volatilidad en MatLab
activo al cual, eventualmente, retornará la medida de volatilidad.
En otras palabras, la reversion a la media implica que la información actual no tiene efectos de largo plazo sobre la volatilidad.
Durante el capítulo se presentarán soluciones en MatLab a la implementación de los principales modelos que se estudien, usando tanto las librerías
estándar de MatLab, como dos librerías adicionales:
• UCSD GARCH. Disponible gratuitamente en http://www.kevinsheppard.com/wiki/UCSD_GARCH
• The Oxford MFE Toolbox. Disponible gratuitamente en http://
www.kevinsheppard.com/wiki/MFE_Toolbox
Volatilidad condicional y no condicional
El término condicional implica una dependencia explícita a la secuencia de
observaciones pasadas, mientras que el término no condicional se relaciona con el comportamiento de largo plazo de la serie de tiempo y asume que
no se conoce explícitamente el pasado.
La varianza condicional de una variable aleatoria
gún la siguiente expresión (Brooks, 2008):
se denota por
se-
(1)
Modelación de la volatilidad
La volatilidad, medida como desviación estándar o varianza de los retornos, es utilizada como una medida del riesgo total de un activo financiero.
Existen diversos modelos para volatilidad (Brooks, 2008).
Caminata Aleatoria
Bajo este modelo, se supone que los precios (o los logaritmos de los precios) son independientes (Wang, 2008). En este modelo, el mecanismo de
formación de precios sigue la siguiente expresión:
(2)
Pt = Pt-1+at
97
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Donde Pt es el precio del activo en el tiempo t y el término at es el error,
de media cero e independiente entre si. Esto se denomina una caminata
aleatoria sin drift. Cuando existe presencia de drift, el modelo puede expresarse como
(3)
Pt = Pt-1+at +θ0
El cambio de precio es at y es por lo tanto, independiente de otros cambios de precios previos. Por lo anterior Pt puede reescribirse, en el caso sin
drift como:
(4)
El valor esperado de Pt es E[(Pt│Pt-1,Pt-2,⋯)] = Pt-1 , es decir, que el mejor
pronóstico del precio, es el precio del periodo anterior.
O en el caso con drift como:
(5)
En este caso, el valor esperado de Pt es E[(Pt│Pt-1,Pt-2,⋯)] = P0+ tθ0
El retorno simple del activo se define como (Campbell, J., Lo, A., MacKinlay, A.,1997):
(6)
El retorno compuesto es (Campbell, J., Lo, A., MacKinlay, A. 1997;
Chakraborti, A., Santhanam, M., 2005):
(7)
En el contexto del modelo de caminata aleatoria, el pronóstico de la volatilidad del retorno resulta por (Pong, S., Granger, C., 2003):
(8)
98
Capítulo 7 / Modelamiento de Volatilidad en MatLab
Constituyendo el modelo más simple y sencillo de pronóstico de volatilidad.
En el caso de MatLab, el cálculo de retornos logarítmicos puede ser calculado de dos formas:
1. Calculando el logaritmo y las diferencias
2. Utilizando la instrucción price2ret
Suponga que en el vector, columna X, se tiene el listado de precios de
una acción, ordenados cronológicamente de menor a mayor tiempo. Para
determinar sus retornos continuamente compuestos se utiliza la siguiente
expresión.
1. Calculando las diferencias
Para retornos continuamente compuestos:
Z = log(x);
Retornos = diff(Z);
Para retornos periódicos diarios:
Retornos = diff(x) -1;
2. Utilizando el método price2ret. La función price2ret puede
ser utilizada para calcular retornos aritméticos o geométricos. En
términos generales, puede usarse de la siguiente forma:
a. Retornos = price2ret(precios). En el vector Retornos se presentan los retornos continuamente compuestos del
vector de precios utilizado, se asume que los precios están
organizados cronológicamente de forma creciente (el primer
elemento corresponde a la observación más antigua y el último elemento a la observación más reciente). El número de
elementos del vector de Retornos es igual al número de elementos del vector de precios, menos uno. Precios puede
ser también una matriz de precios, la única exigencia es que
sea una matriz rectangular, donde cada columna representa
una serie de precios de un activo diferente; de igual forma, los
precios deben estar organizados cronológicamente.
b. [Retornos, IntervalosRet] = price2ret(precios,
fechas, método. Donde precios es el vector o matriz de
99
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
precios, ordenados cronológicamente; fechas es un vector
columna que representa las fechas de los precios presentados, de tal forma que es un vector monotónamente creciente;
método indica la forma de componer los retornos (‘Continuos’ o [] indica retornos continuamente compuestos, mientras que ‘Periodic’ indica retornos periódicos simples. Así
como valores de retorno tiene retornos que corresponden
al vector o matriz de retornos calculados según la especificación dada; IntervalosRet es un vector columna de número de elementos de precios menos uno, correspondiente a los
tiempos entre las observaciones; por lo tanto si fechas es igual
a [], intervalosRet es un vector columna de unos.
Volatilidad histórica
Es el modelo más sencillo. Implica sencillamente calcular la varianza (o en
el caso de portafolios, la matriz de varianzas y covarianzas) de los retornos
para un periodo de tiempo determinado, siendo este el estimativo de volatilidad de periodos futuros. Este modelo se denomina el de volatilidad no
condicional. Generalmente, este modelo se utiliza como benchmark para
comparar la habilidad de pronóstico de otros tipos de modelos. Según RiskMetrics (1996), para un activo, la volatilidad histórica se representa por:
(9)
En este orden de ideas, para calcular la desviación estándar de una serie
de retornos (denominada R) en MatLab, se utiliza la siguiente expresión:
Desviación = std(R)
Si R es una matriz de retornos, lo que se debe calcular es la matriz de varianzas y covarianzas, por lo tanto se utiliza la siguiente expresión
Varianzas_covarianzas = cov(R)
Si se utiliza el comando std(R) sobre una matriz, producirá un vector fila con las desviaciones de cada una de sus columnas (cada elemento del vector corresponde a la desviación estándar de la columna
100
Capítulo 7 / Modelamiento de Volatilidad en MatLab
correspondiente); si por el contrario, se utiliza la instrucción cov(R), el
resultado es la matriz de varianzas y covarianzas; por lo tanto, la instrucción sqrt(diag(cov(R))) corresponde al mismo vector calculado con
std(R).
Modelos de promedio histórico
El modelo de promedio histórico (Pong, S., Granger, C., 2003) se utiliza
toda la serie histórica de realizaciones de volatilidad, según:
(10)
En MatLab, para calcular un modelo de promedio histórico, suponga que
se tiene la matriz sigma de volatilidades históricas, para el cálculo de la
volatilidad de promedio histórico, se utiliza la instrucción mean(sigma).
Si se tiene un vector de precios históricos, y a partir de él se desea calcular la volatilidad histórica, se puede calcular de diferentes formas. Un modelo sencillo es ir calculando la desviación a medida que se incluyen más
observaciones. Cabe anotar que se partiría de la segunda observación de
retornos para calcular la desviación entre el primer elemento y el segundo.
La segunda posición del vector de volatilidad histórica, correspondería a
la desviación entre los tres primeros retornos, y así sucesivamente. De esta
forma, si el vector de precios tiene n observaciones, el vector de retornos
tendrá n-1 observaciones y el de volatilidad histórica n-2 observaciones. A
continuación se presenta el cálculo de este modelo utilizando instrucciones
de MatLab, para una serie de precios de un solo activo.
Retornos = price2ret(precios)
Vol_histórica = zeros(length(Retornos-1))
for i = 1: length(Retornos)-1
Vol_histórica = std(Retornos(1:i+1))
end
vol_promedio_histórico = mean(Vol_histórica)
101
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Si lo que se tiene en precios es una matriz de precios, para calcular un
modelo de volatilidad de promedio histórico, se utilizan las siguientes
instrucciones:
Retornos = price2ret(precios)
Vol_historica = zeros(size(Retornos))
[filas, columnas] = size(Retornos)
for i = 1: filas-1
Vol_histórica = std(Retornos(1:i+1))
end
vol_promedio_histórico = mean(Vol_histórica)
Modelos de promedio móvil
En este modelo se supone que la serie de volatilidad no tiene una alta persistencia, por lo que se descartan las observaciones menos recientes.
(11)
Modelos de suavización exponencial
Este modelo, al igual que el de promedio histórico, utiliza toda la serie histórica de volatilidad, suponiendo que las observaciones más recientes tienen mayor relevancia en el cálculo del pronóstico actual de volatilidad.
(12)
102
Capítulo 7 / Modelamiento de Volatilidad en MatLab
Modelos de promedio móvil ponderado exponencialmente
EWMA (Exponentially widghted moving average). Es una extensión del
modelo de volatilidad histórica, más precisamente, del modelo de suavización exponencial con un finito, en el cual, las observaciones más recientes tienen un impacto mayor sobre el pronóstico de volatilidad que las
observaciones más antiguas; de tal forma que la importancia o peso de las
observaciones cae de manera exponencial. En este sentido, el modelo de
volatilidad histórica puede verse afectado por outliers en la misma proporción, mientras que la observación hace parte del universo de análisis.
El valor de la volatilidad se define por la siguiente expresión:
(13)
Aunque alternativamente, puede expresarse como (Pong, S., Granger, C.,
2003):
(14)
Según RiskMetris (1996), el modelo EWMA está gobernado por la siguiente expresión:
(15)
Donde λ ε (0,1) es el parámetro de decaimiento. Para el caso de retornos
diarios de acciones, Riskmetrics propone un valor de 0.94 y un igual a
cero (0), quedando la expresión transformada en:
(16)
,
,|
103
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Los dos problemas o limitantes del modelo EWMA son (Brooks, 2008):
•
•
El reemplazo de una suma infinita por una suma finita de datos
observados, lo cual puede llevar a diferencias importantes de los
modelos EWMA en muestras pequeñas.
Diversos modelos de series de tiempo, incluyendo los modelos
GARCH, tienen pronósticos que tienen a la varianza no condicional de la serie, a medida que el horizonte de predicción aumenta,
lo cual es adecuado, puesto que se espera que los modelos de volatilidad “reviertan a la media”. En el caso de los modelos EWMA
esta característica no se cumple, siendo, por el contrario, la volatilidad explosiva a medida que el horizonte de tiempo aumenta.
Para el desarrollo del modelo EWMA en MatLab, suponga que la matriz
precios contiene los precios de n activos.
R = price2ret(precios)'
[nobservaciones, nacciones] = size(R)
mediaRp_nc = mean(R)'
sigmaRp_nc = cov(R)
Siguiendo a Embrechts, el pronóstico de la media condicional es cero:
mediaXp_c = zeros(nacciones,1)
Para retornos diarios, Riskmetrics propone un lamda igual a 0.94:
EWMAlamda = 0.94;
nuXp_c = zeros(length(nacciones),1);
sigmaXp_c = X(:,1)*(X(:,1))';
varLp_c = (b')*sigmaXp_c*b
El cálculo de la varianza condicional se realiza de la siguiente forma:
for i = 2:length(X),
sigmaXp_c = EWMAlamda*(X(:,i)*(X(:,i))')+(1EWMAlamda)*sigmaXp_c;
end
104
Capítulo 7 / Modelamiento de Volatilidad en MatLab
Modelos de volatilidad implícita
Todos los modelos de valoración de opciones requieren como dato de entrada un pronóstico de volatilidad. Debido a que las opciones son un activo financiero transable en los mercados, el pronóstico de volatilidad puede
ser obtenido de forma implícita del modelo de valoración de la misma. Por
ejemplo, si se utiliza el modelo de valoración clásico de Black-Scholes,
se puede obtener la volatilidad dado que los demás elementos hacen parte
del contrato suscrito en la opción. Esta volatilidad implícita es el pronóstico de la volatilidad de los activos subyacentes para el periodo determinado. El modelo de valoración de Black-Scholes, se presenta a continuación
(Hull, 2002):
(17)
(18)
(19)
(20)
Donde:
N(X): la función acumulativa de distribución de probabilidad de la distribución normal estándar.
c: precio de la opción call
p: precio de la opción put
so: precio de la opción en el tiempo cero
k: precio strike
r: tasa libre de riesgo continuamente compuesta
σ: volatilidad de la acción
t: tiempo de maduración de la opción
MatLab provee una función que permite calcular la volatilidad implícita
por medio del modelo de Black-Scholes para acciones. La instrucción es
blsimpv y puede usarse de varias formas:
105
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
1.
2.
Volatilidad = blsimpv(So, K, r, T, c) donde So es el
valor actual del activo subyacente, K es el precio de ejercicio de la
opción (precio strike), r es la tasa libre de riesgo, T el tiempo de
maduración y c es el valor de la opción call.
Volatilidad = blsimpv(So, K, r, T, c, limite,
yield, Tolerancia, clase) donde So es el valor actual del
activo subyacente, K es el precio de ejercicio de la opción (precio strike), r es la tasa libre de riesgo, T el tiempo de maduración y c es el valor de la opción, limite es el límite superior para
la volatilidad implícita (el valor default es 10, el cualrepresenta
1000% por año), yield es el retorno anualizado del activo subyacente, tolerancia es la tolerancia para terminación de la búsqueda
de la solución (default 1-e-6) y clase indica el tipo de opción de la
cual se deriva la volatilidad, porque para especificar opciones call
se puede usar true o {‘Call’}, para opciones put false o
{‘Put’}; si no se indica, se supone que es una opción call.
Modelos autoregresivos condicionales
Son modelos en los cuales, la volatilidad pronosticada es función de una
función que incluye rezagos de la misma volatilidad. En estos modelos,
la metodología estándar Box-Jenkins para estimar modelos autoregresivos
puede ser aplicada. Si lo que se busca pronosticar es la volatilidad diaria,
generalmente se utilizan dos proxies:
•
•
Retornos diarios cuadráticos: en este modelo, el retorno cuadrático en el tiempo t se convierte en el pronóstico de la volatilidad
para dicho periodo.
Estimadores de rango diarios: Involucra calcular la razón logarítmica entre el precio más alto observado y el más bajo para el día
t, el cual corresponde al pronóstico de volatilidad para el tiempo t,
según la siguiente expresión:
(21)
En MatLab, su implementación se haría de la siguiente forma, suponiendo
que se tiene un vector de precios denominado precios:
106
Capítulo 7 / Modelamiento de Volatilidad en MatLab
sigma_Cuadrado = log(max(precios)/min(precios))
Una vez se obtiene el estimador de la volatilidad por cualquiera de los dos métodos previamente expuestos, un modelo autoregresivo estándar es estimado.
(22)
Como se observa, este es un modelo AR(p), en MatLab, puede estimarse
utilizando la función ar.
Tabla 26. Métodos de estimación modelos AR
Función
m = ar(R, n)
(MatLab)
[m, ref1]=ar(R, n,
método, ventana)
(MatLab)
*
Descripción
R es la serie de tiempos de retornos, n es un escalar
que representa el orden autoregresivo, m es un modelo idpoly*
R es la serie de tiempos de retornos, n es un escalar
que representa el orden autoregresivo, método es el
algoritmo utilizado para calcular el modelo de mínimos cuadrados, el cual puede ser: ‘burg’ que usa
las predicciones de errores cuadráticos, ‘fb’ que
es el modelo default que minimiza la suma de errores cuadráticos, ‘gl’ que utiliza la media geométrica durante la estimación, ‘ls’ que utiliza el método
de mínimos cuadrados y ‘burg’ que implementa
el modelo Yule-Walker. Por esto, la ventana define
cómo usar los datos fuera de la ventana de medición: ‘burg’ sin ventana (default), es decir, la extracción de datos inicia en la posición n+1, ‘pow’
postventana, los valores faltantes se reemplazan
con ceros y se agregan n observaciones al final de
la muestra, ‘ppw’pre y post ventana, usado en el
modelo Yule-Walker, ‘prw’preventana, los valores
faltantes se reemplazan con ceros al comienzo, de
tal forma que los datos arrancan desde el comienzo de la serie. m es un modelo idpoly, ref1 almacena información complementaria del modelo en
función del argumento método utilizado.
Un modelo idpoly es un modelo lineal de polinomios que representa un modelo de entrada-salida, en el cual se
contienen los parámetros (coeficientes) que describen la estructura del modelo. Debido a sus características, la
serie de tiempo de datos se convierte en un objeto iddata, por lo tanto, algunas de las funciones tradicionales
de MatLab no aplican sobre este objeto, por ejemplo, para determinar la matriz de varianzas y covarianzas de
una serie de tipo iddata, se utiliza el comando covf(data) en lugar de cov(data).
continua
107
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
continuación
Función
Descripción
Y es el vector de series de tiempo. Constant es un
entero, 1 si la regresión posee constante, 0 de lo contrario. Ar es el orden del modelo ar requerido. Ma
es el orden del modelo requerido (para estimación
de modelos ar, ma = 0). Parameters es un vec[parameters,
tor que consisten en [constante AR variaerrors, LLF,
SEregression,stderrors, bleExogena MA]. Stderrors es la matriz de
robustSE, scores, likel varianza-covarianza estimada para los parámetros.
ihoods]=armaxfilter(y,c robustSE es la matriz de covarianzas de White
onstant,ar,ma)
para errores. SERegression los errores estándar
UCSD _ GARCH Toolbox
de la regresión. Errores es un vector de errores. LLF
es la log- verosimilitud de la regresión. Scores es
una matriz de puntajes de coeficientes. Likelihoods es un vector de los log-verisimilitud de cada
coeficiente.
Y es el vector de series de tiempo. Constant es un
entero, 1 si la regresión posee constante, 0 de lo contrario. Ar es el orden del modelo ar requerido. ParaParameters =
meters es un vector que consisten en [constante
armaxfilter(y,contant,
AR variableExogena MA]. Por ejemplo, para
ar)
estimar un modelo AR = 3
MFE Toolbox
P = 3;
parameters = armaxfilter(y,1,[1:P]
Por ejemplo, si se tiene una señal sinoseudal, se pueden estimar los parámetros del modelo ar(4), así:
y = sin([1:600]') + 0.7*randn(600,1);
y = iddata(y);
mb = ar(y,4,'burg');
Modelos autoregresivos heterocedásticos
condicionales (ARCH)
Los modelos autoregresivos condicionales heterocedásticos (ARCH) son
un grupo de modelos poderosos y útiles en procesos de econometría financiera (Marcek, D., 2002). Es más, el ARCH se puede considerar como
el primer modelo econométrico específicamente diseñado para series
108
Capítulo 7 / Modelamiento de Volatilidad en MatLab
financieras (Franses, McAleer, 2002). Este tipo de modelos fue desarrollado por Engle (1982) con el fin de extender los elementos, en términos
autoregresivos realizados para la media, como es el modelo ARMA, desarrollado por Box y Jenkins (1970) a la varianza (Bauwens et al, 2006). En
resumen, la esencia del ARCH radica en la posibilidad de especificar un
proceso estocástico para los términos de error, de tal forma que se pueda
predecir el promedio término de error cuando el modelo se ajusta a datos
empíricos (Engle, R., Focardi, S., Fabozzi, F., 2008). El modelo ARCH ha
tenido una alta influencia tanto en la econometría práctica como aplicada,
es más, algunos autores (Bollerslev, 2001) consideran que este modelo ha
sido el desarrollo más importante en el campo de la econometría financiera, entendida como “la aplicación de herramientas econométricas a datos
financieros” (Engle, 2001, p. 53), especialmente en las últimas décadas,
impulsando además, el estudio de la volatilidad, uno de los principales tópicos de esta última (Franses, McAleer., 2002).
Bajo el modelo ARCH se asume que las varianzas y covarianzas condicionales dependen de las realizaciones de los residuales pasados y de las varianzas y covarianzas rezagadas (Attanasio, 1991). Una de las fortalezas
de este tipo de modelos es que bajo condiciones “tradicionales”, se tiene el
supuesto de homocedasticidad, es decir, que la varianza es constante en el
tiempo. Si en la realidad hay presencia de heterocedasticidad, pero se aplica un modelo homocedástico, como lo es la regresión lineal, se tienen diversas consecuencias (Hayashi, 2000; Wooldridge, 2000):
•
•
El teorema de Gauss-Markov no se mantiene para el estimador b =
(X´X)-1X´y. Por lo tanto, el estimador deja de ser BLUE (el mejor
estimador lineal insesgado).
Se afectan las estadísticas de prueba. La estadística t no tiene distribución t. La estadística F no tiene una distribución F. La estadística LM no tiene distribución asintótica Chi cuadrado.
Otro de los factores que soporta el uso de modelos ARCH en series financieras es el de volatility crustering, es decir, la volatilidad tiende a estar
correlacionada de forma positiva con sus niveles de los periodos de los periodos precedentes inmediatamente.
Un modelo ARCH(q) se describe como se presenta a continuación (Tsay,
2006; Brooks, 2008):
109
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
(23)
Otra forma de expresar el modelo es (Engle, R., Focardi, S., Fabozzi, F.,
2008):
(24)
La ecuación de media se describe por:
(25)
,
Para una descripción de los diferentes tipos de modelos ARCH, véase
Bollerslev et al. (1992, 1994), Bera and Higgins (1993), Pagan (1996) y
Shephard (1996), entre otros.
La estimación de modelos ARCH en MatLab puede realizarse por medio
de la función tarch del MFE Toolbox. La function tarch se puede utilizar para estimar modelos ARCH, GARCH, GJR, TARCH.
Tabla 27. Uso de la función TARCH - MFE Toolbox
Función
parameters =
tarch(serie,p,o,q)
110
Descripción
Serie es la serie de tiempo, p es el orden arch.
Los errores se suponen normales. Para modelos
arch, los parámetros o y q deben ser cero. Parametros es un vector de 1+p+o+q de los parámetros. Así por ejemplo, se desea estimar el modelo
arch de orden 5 para la serie R, se utiliza la siguiente expresión:
Parametros = tarch(R, 5, 0, 0)
Capítulo 7 / Modelamiento de Volatilidad en MatLab
Serie es la serie de tiempo, p es el orden arch.
ERROR _ TYPE es el tipo de error (‘NORMAL’
para errores normales, ‘STUDENTST’ para errores T-student standard, ‘GED’ para errores con
distribución GED y ‘SKEWT’ para errores tipo
[PARAMETERS,LL,HT,VCVROBU
Hansen skewd- t). TARCH _ TYPE 1 si se estima
ST,VCV,SCORES,DIAGNOSTICS=
un modelo de la familia zarch, 2 de lo contrario.
tarch(serie,P,O,Q,ERROR _
PARAMETERS es un vector de 1+p+o+q de los
TYPE,TARCH _
parámetros. LL es la log-verosimilitud en el òptiTYPE,STARTINGVALS,OPTIONS)
mo. HT es el vector de varianzas condicionales.
VCVROBUST es la matriz de covarianzas robusta
de Bollerslev-Wooldridge. VCV es la matriz de covarianzas según máxima verosimilitud. SCORES
Son los scores para diagnóstico de coeficientes.
Para simular un modelo TARCH
simulatedData = tarch_simulate(1000, [1 .1 .8], 1, 0, 0)
Para determinar los parámetros
parameters = tarch(simulatedData,1,0,0)
Restricciones de no negatividad
Debido a que es una varianza condicional, su valor debe ser siempre positivo. Debido a que por construcción, las variables del modelo de varianza
condicional son positivas (los rezagos están elevados al cuadrado), se debe
asegurar que los coeficientes de la ecuación de varianza no sean negativos.
Por lo tanto, para asegurar la no negatividad de la varianza condicional, se
debe cumplir la siguiente restricción adicional.
(26)
Si
entonces el proceso es estacionario débil y la varianza condicional es constante e igual a
(27)
Bajo la función tarch, la restricción de no negatividad es una de las restricciones impuestas al modelo.
111
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Modelos ARCH Generalizados (GARCH)
En el modelo GARCH, la volatilidad condicional puede ser dependiente de
sus propios rezagos. Constituye un promedio ponderado de residuales cuadráticos pasados, pero tiene unos pesos que se reducen paulatinamente sin
llegar a ser cero (Engle, R., Focardi, S., Fabozzi, F., 2008). Es uno de los
modelos más populares para la modelación de la volatilidad (Goyal, 2000)
y es útil a su vez en el pronóstico de volatilidad de series de retornos financieros (Zang, K., Laiwan, C., 2009). Sin embargo, una de sus mayores limitantes es la imposibilidad de capturar efectos asimétricos de los choques
de volatilidad (Lui, Q., Morimune, K., 2006).
Según Tsay, 2006, un GARCH(m,s) puede expresarse como:
(28)
at = σt εt
(29)
Con esta especificación, el mejor pronóstico de la varianza del siguiente
periodo es un promedio ponderado de la varianza de largo plazo, la varianza predicha para este periodo y la nueva información que es capturada por
el residual cuadrático más reciente; de esta forma, el modelo incorpora una
regla de actualización Bayesiana de adaptación de comportamiento (Engle,
R., Focardi, S., Fabozzi, F., 2008).
Los modelos GARCH son de amplia utilidad debido a que proporciona
modelos parsimoniosos que, incluso en sus formas más sencillas, son bastante efectivos prediciendo varianzas condicionales (Engle, R., Focardi, S.,
Fabozzi, F., 2008).
En trabajos aplicados, una variación comúnmente utilizada de los modelos
GARCH es la especificación GARCH(1,1) (Lega, Murcia, Vásquez, Venegas, 2007; Brooks, 2008), debido primordialmente, a tres (3) ventajas que
presentan este tipo de modelos:
112
Capítulo 7 / Modelamiento de Volatilidad en MatLab
•
•
•
Es la versión más parsimoniosa del GARCH(m,s), lo cual previene del problema de parametrización del modelo.
El cumplimiento de la condición de no negatividad es más probable que en el caso de los modelos ARCH.
Captura hechos estilizados de las series financieras, tales como el
volatlity Clustering y efectos Leverage que no capturan los modelos ARCH.
Respecto a la primera afirmación, que el GARCH(1,1) es más parsimonioso (Brooks, 2008; Wang, 2009), si se toma la especificación del
GARCH(1,1):
(30)
Si se resta uno (1) a los subíndices, se tiene:
(31)
Realizando esta labor nuevamente:
(32)
Sustituyendo en la ecuación del GARCH(1,1):
(33)
(
(34)
Sustituyendo
(35)
(36)
(37)
113
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Realizando sustituciones infinitas se tiene:
(38)
De la expresión anterior, el primer término del lado derecho es una constante y a medida que el número de observaciones aumenta, β∞ tiende a cero
(0). Por lo anterior, el modelo GARCH(1, 1) se puede expresar como:
(39)
La ecuación anterior corresponde a un ARCH infinito, por lo tanto, es más
parsimonioso.
El modelo GARCH(1, 1) ha sido ampliamente utilizado para modelar volatilidad, primordialmente por su facilidad de implementación, estimación
y de interpretación (Castaño, E., Gómez, K., Gallón, S. 2008).
Para una descripción de los diferentes tipos de modelos GARCH, véase
Palm (1996).
Para la estimación de modelos GARCH, se utiliza también la función
TARCH (véase Tabla 23. Uso de la función TARCH - MFE Toolbox), así
por ejemplo, para estimar un modelo GARCH (1,1) con errores normales:
parameters = tarch(y,1,0,1)
Para estimar un modelo GARCH(1,1) con errores
parameters = tarch(y,1,0,1,’SKEWT’)
Condición de no negatividad para GARCH (1,1)
La varianza condicional está dada por (Brooks, 2008):
(40)
114
Capítulo 7 / Modelamiento de Volatilidad en MatLab
Por lo tanto α0 > 0,1 - (α1 + β) ≥ 0; es decir (α1 + β) ≥ 1. Cuando se presenta
raíz unitaria, es decir, (α1 + β) = 1, se denomina IGARCH o GARCH integrado, el cual es estrictamente estacionario y tiene varianza infinita.
Condición de no negatividad para GARCH (p, q)
Las condiciones de no negatividad son (Bollerslev, 1986; Nelson, D., Cao,
C., 1992) son:
(41)
Ahora bien, expresando la varianza no condicional como (Wang, 2009):
(42)
Por lo tanto, una condición adicional es que
Si se utiliza la función tarch, para implementar un modelo GARCH(p, q)
con errores normales:
parameters = tarch(y,p,0,q)
Así por ejemplo, para simular un garch(1,1) se utiliza la instrucción:
simulatedData = tarch_simulate(1000, [1 .1 .8], 1, 0,
1)
Para este caso, la estimación del modelo sería:
parameters = tarch(simulatedData,1,0,1)
Adicionalmente, los modelos GARCH pueden ser estimados utilizando
funciones directas de MatLab.
115
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Tabla 28. Modelamiento GARCH univariado con funciones propias de MatLab
Función
[Kappa, Alpha, Beta] =
ugarch(U, P, Q)
[Coeff,Errors,LLF,Innovat
ions,Sigmas,Summary] = …
garchfit(Especificacion,
Serie)
116
Descripción
Estima los parámetros de modelos GARCH (p, q)
con errores normales. U corresponde al vector de
disturbancias. P representa el número de lags de
varianza condicional. Q representa el número de
lags de errores cuadráticos. Kappa corresponde
al término constante del modelo GARCH. Alpha
corresponde al vector de 1 x p de coeficientes
de lags de varianza condicional. Beta corresponde al vector de 1 x q de coeficientes de lags de
errores cuadráticos.
Estima los parámetros de modelos GARCH(1,1)
con errores gausianos de los datos incluidos en el
vector Series
Estima los parámetros de modelos GARCH(1,1)
EGARCH o GJR. Serie es el vector de datos. Especificación que corresponde al modelo, a ser estimado, para su definición, por ello debe utilizarse
la función garchset. Especificacion = ga
rchset(param1,val1,param2,val2,…)
parami donde corresponde a un valor de parámetro aceptable y vali a su valor correspondiente. Los valores del parámetro son:
VarianceModel: modelo de varianza condicional. Valores posibles:
'GARCH', 'EGARCH', 'GJR', or 'Constant'. Default 'GARCH'.
P: representa el número de lags de varianza
condicional. Valores posibles: enteros >= 0
Q representa el número de lags de errores cuadráticos. Valores posibles: enteros >= 0
K: coeficiente escalar de varianza condicional
constante. Valor default [].
GARCH: Vector de p elementos de coeficientes de
varianzas condicionales. Default []
ARCH: vector de q elementos de coeficientes de
lags de erroes cuadráticos. Default []
Leverage: Coeficientes de asimetría para
EGARCH y GJR.
Por ejemplo, para crear un modelo
GARCH(1,1), la especificación será spec =
garchset('P', 1, 'Q', 1)
Capítulo 7 / Modelamiento de Volatilidad en MatLab
Por ejemplo, para simular un proceso garch (2, 1) y posteriormente, estimar sus parámetros, se estiman así:
randn('seed', 10)
Kappa = 0.25;
Alpha = [0.2 0.1]';
gativo (P = 2).
Beta = 0.4;
NumSamples = 500;
%escalar positivo.
%vector columna con número no ne% Q = 1.
% número de muestras a simular
% Simulación del proceso
[U , H] = ugarchsim(Kappa, Alpha, Beta, NumSamples);
% Estimar los parámetros del proceso
P = 2;
% P (P = Longitud de Alpha).
Q = 1;
% Q (Q = Longitud de Beta).
[k, a, b] = ugarch(U , P , Q); %Estimacion
disp(' ')
disp(' Coeficientes Estimados:')
disp(' -----------------------')
disp([k; a; b])
disp(' ')
%Pronóstico de la varianza condicional
NumPeriods = 10;
% Tiempo de pronóstico.
[VarianceForecast, H1] = ugarchpred(U, k,
NumPeriods);
disp(' Pronóstico de varianza:')
disp(' ------------------')
disp(VarianceForecast)
disp(' ')
a,
b,
Los resultados del proceso se muestran a continuación:
Coeficientes Estimados:
---------------------0.2520
0.0708
117
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
0.1623
0.4000
Pronóstico de Varianza:
-----------------1.3243
0.9594
0.9186
0.8402
0.7966
0.7634
0.7407
0.7246
0.7133
0.7054
Otra forma de crear modelos garch es utilizando la función garchset,
por ejemplo, para crear un modelo garch(1,1):
spec = garchset('P', 1, 'Q', 1)
spec =
Comment: 'Mean: ARMAX(0, 0, ?);
Variance: GARCH(1, 1)'
Distribution: 'Gaussian'
C: []
VarianceModel: 'GARCH'
P: 1
Q: 1
K: []
GARCH: []
ARCH: []
Si se desea cambiar el modelo anterior por un garch(1,2)
spec = garchset(spec, 'Q', 2)
spec =
Comment: 'Mean: ARMAX(0, 0, ?); Variance:
GARCH(1, 2)'
Distribution: 'Gaussian'
C: []
118
Capítulo 7 / Modelamiento de Volatilidad en MatLab
VarianceModel:
P:
Q:
K:
GARCH:
ARCH:
'GARCH'
1
2
[]
[]
[]
Ahora bien, para utilizar la función garchfit, se usa como ejemplo una serie
de 1000 retornos simulados, basados en un GARCH(1,1)
spec
=
garchset('C',0,'K',0.0001,'GARCH',0.9,'AR
CH',0.05);
[e,s,y] = garchsim(spec,1000);
garchfit(spec, y);
Mean: ARMAX(0,0,0); Variance: GARCH(1,1)
Conditional Probability Distribution: Gaussian
Number of Model Parameters Estimated: 4
Standard
T
Parameter
Value
Error
Statistic
----------- ----------- ------------ ----------C
-0.0013526
0.0013368
-1.0119
K
0.00027647
0.00014944
1.8500
GARCH(1)
0.77871
0.10106
7.7057
ARCH(1)
0.073557
0.028595
2.5724
Log Likelihood Value: 1728.4
Características de los modelos ARCH y
GARCH y algunas de sus extensiones
A continuación se presenta un breve resumen de las características de
los modelos ARCH y de algunas de las distintas extensiones del modelo
GARCH.
119
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Tabla 29. Características de los modelos ARCH y GARCH
Modelo
ARCH
GARCH
Alcances
• Proveen un marco para el análisis y • El modelo asume que los choques
positivos y negativos tienen el misestudio de modelos de volatilidad.
• Permite modelar el fenómeno de hemo efecto en volatilidad.
terocedasticidad no condicional, aun- • No existe una herramienta que permita seleccionar el valor del orden
que sea homocedastico condicional.
del modelo, pues el orden requeri• Permite incorporar el fenómeno de
do para capturar todas las depenvolatility clustering.
• Incorpora per se, el exceso de curtodencias en la varianza condicional
puede ser muy alto. Para esto, se
sis del error, por lo tanto, las colas de
ha definido un decaimiento arbitrala distribución son más anchas que
las de la normal.
rio dado por la siguiente expresión
(Brooks, 2008):
Modelamiento en MatLab:
Funciones garchfit, tarch (MFE
(43)
Toolbox)
• Permite modelar heterocedasticidad
condicional y no condicional (finita)
• Modela colas más anchas en los errores que la distribución normal (exceso de curtosis).
• Es más parsimonioso y evita la sobreestimación de un ARCH.
• Menor probabilidad de incumplir la
condición de no negatividad.
Funciones garchfit, tarch (MFE Toolbox), ugarch.
120
Limitaciones
• Las restricciones de no negatividad
de los parámetros del modelo pueden llegar a violarse. Entre más parámetros se incorporen en la ecuación
de varianza condicional, mayor es la
probabilidad que al menos uno tenga
valores negativos.
• No provee indicaciones a cerca de las
causas de las variaciones de la volatilidad, solo son una solución mecánica al comportamiento de la varianza
condicional.
• Tienen a sobrestimar la volatilidad
debido a que responden lentamente
a choques aislados en los retornos.
• Las condiciones de no negatividad
pueden no llegar a cumplirse.
• No permiten feedback entre la
varianza condicional y la media
condicional.
• Respuesta simétrica ante choques
positivos y negativos en volatilidad.
continua
Capítulo 7 / Modelamiento de Volatilidad en MatLab
continuación
Modelo
Alcances
GARCH y
ARCH con
errores no
normales
• Bajo la especificación clásica, los
Limitaciones
errores se suponen que se distribuyen normalmente, sin embargo, existe evidencia empírica a cerca del
exceso de curtosis de los residuales
de este tipo de modelos. Existen variaciones del modelo (p.e, Bollerslev,
1987) que utilizan distribuciones no
normales, usualmente, la t-student
para los errores.
Funciones garchfit, tarch (MFE
Toolbox).
continua
121
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
continuación
Modelo
IGARCH
Alcances
Limitaciones
• GARCH integrado
El modelo general se expresa por
• Permite simular casos en los cuales (Hansen, P., Lunde, A., 2005):
la varianza condicional es no estacionaria (raíz unitaria en varianza).
• Un choque de varianza tiene efectos
sobre la volatilidad futura en un horizonte de tiempo infinito.
• La varianza no condicional no exis(44)
te en este modelo.
• Puede darse por cambios ocasionales en los niveles de volatilidad.
• El modelo EWMA corresponde a
un IGARCH(1, 1)
Función
• No hay convergencia hacia el pro[outputs] = igarch
medio de largo plazo de la varian(EPSILON,P,Q, ERRORTYPE,IGA
za no condicional. El pronóstico de
RCHTYPE,CONSTANT,STARTINGV
varianza tiene a infinito a media
ALS,OPTIONS)
que el horizonte de tiempo aumen(MFE Toolbox)
ta. La expresión para la varianDonde: EPSILON es el vector de daza del modelo IGARCH es (Mills,
tos de media cero. P, el orden de in1999):
novaciones del modelo. Q, el orden de
rezagos del modelo. ERRORTYPE es el
tipo de error del modelo 'NORMAL', (45)
'STUDENTST', 'GED' o 'SKEWT'.
El vector de outputs es igual al que
genera la función tarch del MFE
• En el caso del GARCH(1,1), se da
toolbox
cuando α1 + β = 1.
Estimación de un modelo
igarch(1,1) sin constante
parameters = igarch(y,1,1)
• Implica que los choques de la va-
rianza condicional persisten indefinidamente (Mills, 1999).
Estimación de un modelo
igarch(1,1) con constante
parameters =
igarch(y,1,1,[],[],0)
Estimación de un modelo
igarch(1,1) con constante e innovaciones tstudent
parameters = igarch(y,1,1,
'STUDENTST')
122
continua
Capítulo 7 / Modelamiento de Volatilidad en MatLab
continuación
Modelo
AGARCH
Alcances
Limitaciones
• GARCH asimétrico.
La especificación de la varianza con• Permite modelar efecto asimétricos dicional está dada por:
de choques positivos y negativos.
Función AGARCH del MFE Toolbox
[outputs] =
agarch(EPSILON,P,Q,MODEL _
TYPE,ERROR _
TYPE,STARTINGVALS,OPTIONS)
Donde: EPSILON es el vector de datos
de media cero. P, el orden de innovaciones del modelo. Q, el orden de rezagos del modelo. MODEL_TYPE es el
tipo de modelo, 'AGARCH' (Default)
ó 'NAGARCH'. ERRORTYPE es el
tipo de error del modelo 'NORMAL',
'STUDENTST', 'GED' o 'SKEWT'.
El vector de outputs es igual al que
genera la función tarch del MFE
toolbox.
(46)
Un valor negativo de
implica que
los choques positivos resultan en incrementos de menor magnitud en el
valor de la volatilidad futura que los de
choques negativos de igual magnitud.
El modelo (1,1) se expresa por:
Para la estimación de un modelo
AGARCH(1,1,1), la instrucción sería:
parameters = agarch(y,1,1)
Estimacion de un modelo
AGARCH(1,1,1) con innovaciones
t-student
parameters = agarch(y,1,1 ,
'STUDENTST')
continua
123
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
continuación
Modelo
GJR o
TGARCH
Alcances
Limitaciones
• Permite modelar efectos asimétricos El modelo (1, 1) se describe por:
• La condición de no negatividad es
• La asimetría es una característica de
(46)
las series de retornos financieros; adicionalmente, los modelos simétricos,
en términos de pronóstico, tienen un
desempeño menor a los modelos asimétricos (Giot, P., Laurent, S., 2003). Donde It-1
1 si
Funciones GARCHFIT (MatLab),
0 de lo contrario
TARCH (MFE Toolbox)
Por ejemplo, para simulación y estiEl modelo general es (Hansen, P.,
macion de un GJR-GARCH(1,1,1)
Lunde, A., 2005):
y = tarch _ simulate(1000,
[1 .1 .1 .8], 1, 1, 1)
(47)
parameters = tarch(y,1,1,1)
continua
124
Capítulo 7 / Modelamiento de Volatilidad en MatLab
continuación
Modelo
EGARCH
Alcances
Limitaciones
El modelo (1,1) se describe por la
• GARCH exponencial
• Permite modelar efectos asimétricos expresión:
entre los retornos positivos y negativos sobre la volatilidad. La vola- (48)
tilidad responde más rápidamente a
caídas en el mercado que a alzas correspondientes (Mills, 1999).
• El signo de
generalmente es positivo, según la evidencia empírica de
tal forma que un choque negativo aumente la volatilidad (Wang, 2008).
• Relaja el supuesto de no negatividad
utilizando logs sobre la varianza
condicional. No se requiere la condición de no negatividad.
El modelo (p,q) esta definido por:
Función EGARCH (MFE Tolbox)
[parameters,ll,ht,vcvrobust (49)
,vcv,scores,diagnostics] =
egarch(resid,p,o,q)
Los parámetros son los mismos de la
función tarch.
Por ejemplo, para simular un
EGARCH(1, 0, 1) con innovaciones normales:
y = egarch _ simulate(1000,[0 .1 .95],1,0,1);
Para simular un EGARCH(1,1,1) con
innovaciones t-student:
y = egarch _ simulate(1000,[0 .1 -.1 .95
6],1,1,1, 'STUDENTST')
Para la estimación de un
EGARCH(1,1) simétrico:
parameters =
egarch(y,1,0,1)
continua
125
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
continuación
Modelo
GARCH-M
Alcances
Limitaciones
• GARCH en media
Se especifica, por ejemplo, por
• Permite incorporar el supuesto
que a mayor riesgo, mayor retorno. (50)
• El retorno del activo es función
•
de su riesgo (volatilidad).
La prima de riesgo, se puede asimilar a la variable δ del modelo.
Función GARCHMEAN (UCSD
Garch Toolbox)
yt = μ + δσ(t-1) + ut
(51)
(52)
[parameters, LLF, ht,
errors, SEregression, stderrors, robustSE, scores, likelihoods] =
garchinmean(data,ar,ma,p,q,
options)
Donde: data es el vector de datos. Ar
es el orden AR deseado. MA es el orden
MA deseado. P es el número de componentes ARCH. Q el número de componentes GARCH. Parameters es
el vector de coeficientes arch y garch.
LLF es el log-verosimilitud del proceso. Errors es el vector de errores de la
regresión. Stderrors son los errores
estándar de la regresión. robustSE es
la matriz de varianzas y covarianzas
robusta de White. Scores es la matriz
de scores de coeficientes. Likehoods es el vector de log-verosimilitud
de cada observación.
continua
126
Capítulo 7 / Modelamiento de Volatilidad en MatLab
continuación
Modelo
FIGARCH
Alcances
Limitaciones
• GARCH Integrado
•
El modelo FIGARCH(1,d,1) se repreFraccionalmente
senta como (Mills, 1999):
Busca incorporar el hecho estilizado que la volatilidad presenta me- (56)
moria de largo plazo (Mills, 1999);
los retornos cuadráticos tienden
a tener autocorrelaciones que decaen lentamente.
Función figarch(MFE Toolbox)
[outputs] =
figarch(EPSILON, P, Q,
ERRORTYPE, TRUNCLAG)
•Estacionario estrictamente cuando
0≤d≤1
•Para cumplir con la condición de
EPSILON es el vector de datos de meno negatividad α0 > 0 , α1 + d ≥
dia cero. P es el orden autoregresivo de
0 y 1 - 2(α1 + β ≥ d ≥ 0
memoria corta, debe ser cero (0) o uno
(1). Q. es el orden del proceso de media,
debe ser cero (0) o uno (1). ERROR _
TYPE es el tipo de error 'NORMAL',
'STUDENTST', 'GED' o 'SKEWT'.
TRUNCLAG es el punto de corte para la
representación ARCH ( ).
Estimación de un modelo
FIGARCH(0,d,0)
parameters = figarch(y,0,0)
Estimación de un modelo
FIGARCH(1,d,0)
parameters = figarch(y,1,0)
Estimación de un modelo
FIGARCH(1,d,1) con errores tstudent
parameters = figarch(y,1,1,
'STUDENTST')
127
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Modelos multivariados
La mayor limitante de los modelos ARCH y GARCH es que son exclusivamente univariados, es decir, se modela la volatilidad de cada serie de forma
separada, aunque son los mayormente estudiados en la literatura (Sebastian, 1998). Sin embargo, para estudiar el comportamiento de portafolios
de activos (Engle, R., Focardi, S., Fabozzi, F., 2008) los movimientos entre retornos financieros también son de importancia práctica (Andersen,
T. G., Davis, R. A., Kreiss, J.P. y Mikosch, T. 2009; Zang, K, Laiwan, C.,
2009). El utilizar modelos univariados tiene dos (2) efectos importantes
(Brooks, 2008):
•
•
No tener en cuenta los efectos de “volatility spillovers”, que se
presentan cuando un cambio brusco de volatilidad en un mercado,
es seguido por un cambio en volatilidad en otro.
Así como las varianzas son importantes, también lo son las covarianzas entre activos. En finanzas, múltiples elementos utilizan el
concepto de covarianza, como lo son el cálculo del VaR en portafolios, los betas del modelo CAPM, entre otros.
En este orden de ideas, implementar modelos multivariados tiene dos ventajas primordiales (Fan, J., Wang, M., Yao, Q, 2008):
•
•
Las correlaciones variantes en el tiempo entre diferentes activos
son importantes y útiles en temas tales como optimización de portafolios, valoración de activos y administración de riesgos.
Los modelos univariados pueden ser mejorados de tal forma que
incorporen información relevante de otros modelos relacionados.
Es más, al utilizar modelos multivariados se asume que los precios del activo en estudio no evolucionan de forma independiente al mercado en el que se encuentra inmerso (Engle RF, Patton
A.,2001).
Es por esto que el uso de modelos multivariados lleva a modelos empíricos
más relevantes que al trabajar con modelos univariados (Bauwens, et al,
2006). Un uso tradicional de los modelos GARCH es el estudio de volatilidades entre diferentes mercados (Bauwens, et al, 2006; Kearney, Paytton,
2000; Karolyi, 1995).
128
Capítulo 7 / Modelamiento de Volatilidad en MatLab
Sin embargo, extender los modelos univariados al campo multivariado
conlleva ciertas dificultades, primordialmente (Kawakatsu, 2006; Engle
R., Focardi, S., Fabozzi, F., 2008) las siguientes:
•
•
Dimensionalidad: a medida que el número de dimensiones K dentro del modelo se expande, lo hace a su vez el número de parámetros a calcular. De forma general, el número de parámetros es de
orden O(K4) crece de forma cuadrática en K.
Condición de no negatividad: se debe encontrar una especificación del modelo que mantenga la condición que la matriz de varianzas y covarianzas sea positiva semidefinida.
Modelación de Covarianzas
Al igual que en el caso univariado, para el cual existen diversos modelos
para el cálculo de volatilidad, en el caso multivariado, existen diferentes
modelos que pueden ser utilizados para el pronóstico de covarianzas. Los
principales modelos se presentan a continuación.
Características de la matriz de varianzas-covarianzas
•
•
La matriz de varianzas-covarianzas debe ser positiva-semidefinida. Entre otras cosas, significa que (Brooks, 2008; Bauwens et al,
2006; Andersen et al, 2009).
• Todos los elementos de la diagonal deben ser positivos.
• Debe ser simétrica respecto a su diagonal.
Un caso particular, cuando los retornos son todos igualas, las varianzas son cero, por lo tanto, la matriz es positiva definida.
Modelo de covarianza y correlación históricas
De la misma forma que en el caso univariado la volatilidad puede ser calculada utilizando la serie histórica de datos, las covarianzas y correlaciones históricas entre diversas series de datos pueden ser calculadas usando
un set de datos históricos.
129
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
La correlación entre dos series de datos puede calcularse a partir del coeficiente de correlación de Spearman, según la siguiente expresión:
(57)
La matriz de covarianzas se determina según:
(58)
Para modelar la matriz de varianzas y covarianzas histórica, tal y como se
expuso previamente, se utiliza la función cov de MatLab:
Varianzas_covarianzas = cov(R)
Donde R es una matriz de retornos.
Así mismo, la instrucción sqrt(diag(cov(R))) corresponde al vector
de desviaciones estándar que puede ser calculado con std(R).
Modelos de covarianza implícita
Las covarianzas implícitas pueden ser calculadas a partir de opciones sobre el activo subyacente. Debido al reducido número de este tipo de derivados limitan el número de activos sobre los cuales se pueden calcular sus
covarianzas implícitas.
Modelos de promedio móvil ponderado exponencialmente
Al igual que en el caso univariado, el modelo EWMA (Exponentially
widghted moving average) puede ser utilizado; en el cual, las observaciones más recientes tienen un impacto mayor sobre el pronóstico de covarianza que las observaciones más antiguas, de tal forma que la importancia o
peso de las observaciones cae de manera exponencial (RiskMetrics, 1996).
130
Capítulo 7 / Modelamiento de Volatilidad en MatLab
El valor de la covarianza se define por la siguiente expresión:
(59)
Donde λε(0,1) es el parámetro de decaimiento.
Al igual que en el caso univariado, el modelo EWMA multivariado corresponde a un I-GARCH.
Para el cálculo de la matriz de varianzas-covarianzas por el modelo EWMA,
se utilizan las mismas instrucciones que se presentaron en el caso univariado, con la diferencia que el vector de retornos, en este caso, es una matriz.
Modelos GARCH multivariados
Los modelos GARCH multivariados incluyen una definición para determinar cómo las covarianzas cambian en el tiempo. Existen diversos tipos
de modelos GARCH multivariados, a continuación se presentan los más
utilizados en la literatura. Los modelos MGARCH han sido utilizados en
diferentes contextos (Tse, Y.K., Tsui, A., 2002) a series financieras, por
ejemplo, Bollerslev (1990) lo aplica a los cambios de estructura de varianza de régimen de tasa de cambio del sistema monetario europeo. Kroner y
Claessens (1991) calculan a través de su modelo multivariado, el portafolio
óptimo de deuda de varias divisas. Karolyi (1995) lo utiliza para identificar
la transmisión de retornos y volatilidades de forma internacional.
Para efectos de simplicidad de notación, se presentan las versiones (1, 1)
de los modelos. La matriz de varianzas-covarianzas se define por Ht.
El modelo VECH
Este modelo fue desarrollado por Bollerslev, Engle y Wooldridge (1988),
el cual es una generalización del modelo GARCH al caso multivariado
(Andersen et al 2009). En este modelo, cada elemento de la matriz de varianzas y covarianzas Ht es una función lineal de los errores cuadráticos
rezagados y los productos cruzados de los errores y los valores rezagados
de los elementos de Ht (Brooks, 2008; Bauwens et al, 2006, Long, 2005).
131
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
El modelo VECH puede expresarse como (Andersen, 2009), así:
(60)
Para el caso VECH(1, 1), en forma compacta:
(61)
Con
Para este caso particular, el modelo puede escribirse como (Brooks, 2008):
(62)
(63)
(64)
Donde Ht es la matriz de varianza-covarianza condicional, es la matriz de
innovación (perturbaciones; errores) de 2x1, es el vector del conjunto de
información, C es un vector de parámetros de 3x1 y A y B son vectores de
parámetros de 3x3. VECH (.) es el operador que apilamiento de columnas
de la matriz simétrica que toma una matriz de NxN y la transforma en un
vector de N(N+1)/2 x 1.
Para comprender el uso del operador VECH, se presentan dos ejemplos
sencillos:
(65)
(66)
132
Capítulo 7 / Modelamiento de Volatilidad en MatLab
(67)
El número de parámetros se determina según la siguiente expresión (Andersen et al, 2009) (p + q) (N (N + 1)/ 2)2 + N (N + 1 )/ 2 . En el caso de 2
activos, deben estimarse 21 parámetros.
Aunque el modelo presenta diferentes ventajas por ser flexible, además del
alto número de parámetros a estimar, presenta ciertas desventajas. La principal desventaja del modelo VECH es que no garantiza que la matriz de
varianzas-covarianzas sea positiva semidefinida (Brooks, 2008; Andersen,
2009); pues se cuenta con condiciones suficientes pero no necesarias para
el cumplimiento de esta condición (para el detalle de estos elementos véase Gouriéroux, 1997).
Para la implementación en MatLab, se utiliza la función cc_mvgarch del
UCSD_GARCH toolbox, de la siguiente forma:
[parameters, loglikelihood, R ,Ht, likelihoods,
stdresid, unistdresid, hmat, stderrors, A, B,
jointscores]=cc_mvgarch(data,archP,garchQ)
Donde:
Data: es la matriz de txk de media cero de datos a evaluar.
archP: define el modelo ARCH para la serie. Si es vacío, se calcula un
modelo de orden 1 por cada serie. Si es un escalar p, se calcula un modelo
de orden p por cada serie. Si es un vector de kx1, la serie i, tiene el modelo archP(i).
garchP: define el modelo GARCH para la serie. Si es vacío, se calcula un
modelo de orden 1 por cada serie. Si es un escalar q, se calcula un modelo
de orden q por cada serie. Si es un vector de kx1, la serie i, tiene el modelo garchQ(i).
parameters: vector de parámetros del modelo estimado de la forma
[GarchParams(1) GarchParams(2) . . . GarchParams(k)
Correlation(ccvech de la matriz de correlación)]. Donde
garch parameters para cada estimación son de la forma [omega(i)
133
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
alpha(i1) alpha(i2) . . . alpha(ip(i)) beta(i1) beta(i2)
. . . beta(iq(i))]
loglikelihood: log-verosimilitud evaluada en el máximo.
R: matriz de kxk de correlaciones.
Ht: matrix de kxkxt de varianzas condicionales.
Likelihoods: vector de tx1 de verosimilitudes.
Stdresid: residuales estandarizados multivariados.
Unistdresid: residuales estandarizados multiplicados por sus corres-
pondientes desviaciones estándar.
Hmat: matriz de txk de varianzas condicionales.
Stderrors: matriz de length(parameters)2 de errores estimados.
A: Matriz A estimada.
B: Matriz B estimada.
Scores: matriz de txlength(parameters) de puntjes de verosimilitud
estimados.
El modelo VECH Diagonal
Debido a que el numero de parámetros para un modelo VECH son grandes
y que dicho número de parámetros se incrementan de forma importante, a
medida que aumenta el número de activos, una simplificación al modelo
original se puede hacer suponiendo que las matrices A y B son diagonales
(Bollerslev et al, 1988). De esta forma, el número de parámetros para el
modelo de dos activos se reduce a nueve. El modelo, para el caso (1, 1) se
caracteriza por la siguiente ecuación (Brooks, 2008):
(68)
,
,
,
Según Bauwnes et al (2006), una forma de derivar de forma simple las
condiciones de no negatividad sobre la matriz de varianzas-covarianzas,
se puede hacer expresando el modelo en función de productos Hadamard.
(69)
Para cumplir la condición de no negatividad (para una prueba, véase Attanasio, 1991), C0, A0 ,G 0 y los valores iniciales de la matriz H0 sean positivas semidefinidas. Esta condición puede ser impuesta a través de una
descomposición de Cholesky sobre las matrices de la ecuación anterior.
134
Capítulo 7 / Modelamiento de Volatilidad en MatLab
Para la especificación del modelo EWMA, éste puede ser expresado en términos de un modelo VECH Diagonal (Bauwens, 2006). Si se toma el modelo EWMA (I-GARCH) original:
(70)
,
,
Reexpresado en términos de un modelo VECH Diagonal:
(71)
Donde
El modelo BEKK (Baba-Engle-Kraft-Kroner)
Este modelo fue desarrollado por Engle y Kroner (1995) como un caso especial del modelo VECH (Baurens et al, 2006; Andersen et al, 2009) y busca asegurar que la matriz de varianzas y covarianzas sea en todos los casos,
positiva definida, pues lo es por construcción (Brooks, 2008; Bauwens,
2006; Andersen et al, 2009; Ledoit O., Santa-Clara P., Wolf M., 2003).
El modelo BEKK generalizado se representa por la siguiente expresión
(Andersen, et al, 2009, Fan, J. et al 2008):
(72)
Donde W, Bkj, Akj son matrices de NxN con la salvedad que W es una matriz triangular superior.
135
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
El modelo BEKK posee diversos problemas (Fan, J., Wang, M., Yao, Q,
2008), siendo el más importante la sobreparametrización del mismo, que
puede llevar a una función de verosimilitud plana, haciendo que la inferencia estadística del modelo sea difícil y computacionalmente exigente.
Para el caso de (1, 1, 1) se expresa de la siguiente forma (Brooks, 2008)
(73)
Como ejemplo, el modelo BEKK(1, 1, K) se expresa como sigue:
(74)
El límite K de la sumatoria representa la generalidad del proceso. En el
caso del modelo BEKK (1, 1, 1), el número de parámetros es igual a N(5N
+ 1)/2 (Bauwens, 2006). Para el BEKK general, el número de parámetros
se es (p + q)KN2 + N(N + 1 )/2 (Andersen et al, 2006). Si el número de parámetros del modelo es muy alto, puede imponerse la restricción de diagonal (BEEK Diagonal); al igual que en el caso del modelo VECH Diagonal,
con la ventaja que en el caso del BEEK Diagonal, la restricción de no negatividad se garantiza. Para el modelo BEKK Diagonal completo, el número
de parámetros es (p + q)KN + N(N + 1 )/2 . Por lo tanto, la mayor limitante
del modelo BEKK, que se comparte con el modelo VECH, es el estimar el
alto número de parámetros por lo que son poco usados cuando el número
de series es mayor a 3 o 4 (Bauwens et al, 2006).
El valor esperado de la varianza no condiciona es (Wang, 2008):
(75)
En términos de estacionariedad, el modelo BEKK es estacionario en varianza si los valores propios de la siguiente expresión es menor a uno (Andersen et al, 2006).
(76)
136
Capítulo 7 / Modelamiento de Volatilidad en MatLab
O expresado de otra forma (Wang, 2008):
(77)
Una sobresimplificación del modelo puede darse a través del denominado
BEKK Escalar, donde las matrices Akj = aI y Bkj = aI se definen con y
son escalares.
Existen diversas modificaciones al modelo BEKK, sin embargo, una que
vale la pena mencionar, es aquella bajo la cual no es necesaria la imposición de restricciones adicionales de no negatividad de la matriz Ht.
Uno de estos modelos es el denominado GARCH Exponencial Matricial
(Kawakatsu, 2006), el cual corresponde a una generalización del GARCH
Exponencial (Nelson, 1991).
En resumen, se aplica el exponencial al logaritmo de la matriz de varianzas
y covarianzas, y de ello resulta una matriz definida positiva. Lo anterior
debido a que cualquier matriz cuadrada de NxN A, su exponencial puede
definirse por la serie de expansión (Kawakatsu, 2006), la cual converge
para cualquier matriz A, así:
(78)
Para el caso de la matriz de varianzas y covarianzas Ht, se tiene además que
la matriz es simétrica. En este caso, se puede demostrar que eA es simétrica y positiva semidefinida con inversa e-A (para prueba, véase Kawakatsu,
2006).
(79)
137
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
En este caso Ai, Bj y Fj en este caso son matrices de parámetros a ser estimadas. El número de parámetros totales a estimar son k * + k *2 p + 2kk *
q donde k * = k (k+1) /2.
Para la estimación de modelos BEKK, se emplean las funciones scalar_
bekk_mvgarch, diagonal_bekk_mvgarch, full_bekk_mvgarch,
scalar_bekk_T_mvgarch, diagonal_bekk_T_mvgarch y full_
bekk_T_mvgarch del toolbox UCSD_GARCH.
Tabla 30. Funciones para estimación de modelos BEKK
Función
Descripción
Data, p y q tienen la misma implicación que en la estimación del modelo VECH descrita previamente.
Parameters es un vector de (k*(k+1))/2+p+q de parámetros estimados. Para recuperar el parámetro C use
[parameters, loivech(parameters(1:(k*(k+1))/2) . loglikeglikelihood, Ht,
lihood: log-verosimilitud evaluada en el máximo. Ht
likelihoods, stes una matriz de k x k x t de varianzas condicionales.
dresid, stderrors,
Likelihoods: vector de tx1 de verosimilitudes. StA, B, scores] =
dresid: matriz de txk residuales estandarizados mulscalar _ bekk _
tivariados. Stderrors: matriz de length(parameters)2
mvgarch(data,p,q)
de errores estimados (A^(-1)*B*A^(-1)*t^(-1)) A:
Matriz A estimada inversa de errores estándar no robustos. B: Matriz B estimada de covarianzas de scores.
Scores: matriz de txlength(parameters) de
puntajes de scores individuales.
Data , p y q, parameters, loglikelihood,
[parameters, loHt, likelihoods, stdresid, stderrors, A,
glikelihood, Ht,
B, scores representan los miso que en el caso de la funlikelihoods, stción scalar _ bekk _ mvgarch. La única diferencia
dresid, stderrors,
es que el vector parameters es de (k*(k+1))/2+p*k+q*k,
A, B, scores] =
reduciéndose entonces la dimensión; así, la matriz correcdiagonal _ bekk _
ta se obtiene de diag(parameters). Para recuperar C,
mvgarch(data,p,q)
ivech(parmaeters(1:(k*(k+1))/2)
Data , p y q, parameters, loglikelihood,
[parameters, loHt, likelihoods, stdresid, stderrors, A,
glikelihood, Ht,
likelihoods, stB, scores representan los miso que en el caso de la función
dresid, stdescalar _ bekk _ mvgarch. La única diferencia es que
rrors, A, B, scores] el vector parameters es de (k*(k+1))/2+p*k^2+q*k^2,
= full _ bekk _
la matriz correcta se obtiene reshape(X,k,k). Para recuperar C, ivech(parmaeters(1:(k*(k+1))/2)
mvgarch(data,p,q)
continua
138
Capítulo 7 / Modelamiento de Volatilidad en MatLab
continuación
Función
[parameters, loglikelihood, Ht,
likelihoods, stdresid, stderrors,
A, B, scores] = scalar _ bekk _ T _
mvgarch(data,p,q)
[parameters, loglikelihood, Ht,
likelihoods, stdresid, stderrors,
A, B, scores] = diagonal _ bekk _ T _
mvgarch(data,p,q);
[parameters, loglikelihood, Ht,
likelihoods, stdresid, stderrors,
A, B, scores] =
full _ bekk _ T _
mvgarch(data,p,q);
Descripción
Data , p y q, parameters, loglikelihood,
Ht, likelihoods, stdresid, stderrors, A,
B, scores representan los mismo que en el caso de la
función scalar _ bekk _ mvgarch. La única diferencia es que el vector parameters es que los errores se
distribuyen t-student
Data , p y q, parameters, loglikelihood,
Ht, likelihoods, stdresid, stderrors, A,
B, scores representan los mismo que en el caso de la
función diagonal _ bekk _ mvgarch. La única diferencia es que los errores son distribuidos t-student
Data , p y q, parameters, loglikelihood,
Ht, likelihoods, stdresid, stderrors, A,
B, scores representan los mismo que en el caso de la
función full _ bekk _ mvgarch. La única diferencia
es que los errores se distribuyen t-student
Modelos de factores
Los modelos de factores fueron motivados por ser mas parsimoniosos,
pero principalmente, por la teoría económica. En estos modelos se supone
que las observaciones se generan a partir de variables comunes, denominadas factores, que son heterocedásticos condicionalmente y que se ajustan
a una estructura de tipo GARCH (Andersen et al, 2009); de esta forma, en
el mercado de acciones, los movimientos conjuntos de los precios se deben
a un número reducido de factores (Bauwens et al, 2006, Long 2005). Así,
se reduce el problema de dimensionalidad de los modelos VECH y BEKK
cuando el número de factores, en relación con el número de activos bajo
análisis, es bajo.
Siguiendo a Andersen (2009), se supone que Ht es generado por K(<N)
factores fk,t, no necesariamente no correlacionados, que siguen la estructura GARCH de primer orden que se presenta a continuación:
139
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
(80)
Donde Ω es matriz, positiva semidenfinida de NxN, wk,k=1,2,···,K vectores linealmente independintes de pesos de factores de Nx1 y fk,t son los
factores. Se asume que los factores siguen un proceso GARCH de primer
orden, regido por:
(81)
fk,t=ωk+αk (γ´k rt-1)2 + βk fk,t-1
Con ωk, αk y βk escalares y γ´k es un vector de Nx1 de pesos. Con esta especificación se busca que K, es decir, el número de factores, sea substancialmente menor que N, el número de activos. Aunque la estructura presentada
previamente no exige que los factores no estén correlacionados, ésta puede ser una característica no deseable, debido a que puede resultar en que
diversos factores capturen características similares. Cuando los factores
no son correlacionados entre sí, capturan características independientes,
por lo que es común el encontrar modelos con esta característica. En estos
modelos, el proceso económico {xt} (retornos para el caso de activos), se
conectan con los factores Zt, a través de una combinación lineal no correlacionada de éstos.
(82)
Xt = Wzt
Para la estimación del modelo de factures, se puede utilizar la función o_
mvgarch de la librería UCSD_GARCH.
[parameters, Ht, stdresid, stderrors, A, B, weights, principalcomponets,
cumR2]=o_mvgarch(data, numfactors,archP,garchQ)
Donde:
Data: es la matriz de txk de media cero de datos a evaluar.
Numfactors: el número de componentes principales a incluir en el modelo
archP: define el modelo ARCH para la serie. Si es vacío, se calcula un
modelo de orden 1 por cada serie. Si es un escalar p, se calcula un modelo
de orden p por cada serie. Si es un vector de kx1, la serie i, tiene el modelo archP(i)
140
Capítulo 7 / Modelamiento de Volatilidad en MatLab
garchP: define el modelo GARCH para la serie. Si es vacío, se calcula un
modelo de orden 1 por cada serie. Si es un escalar q, se calcula un modelo
de orden q por cada serie. Si es un vector de kx1, la serie i, tiene el modelo garchQ(i).
parameters: vector de parámetros del modelo estimado de la forma
[GarchParams(1) GarchParams(2) . . . GarchParams(k)
Correlation(ccvech de la matriz de correlación)]. Donde
garch parameters para cada estimación son de la forma [omega(i)
alpha(i1) alpha(i2) . . . alpha(ip(i)) beta(i1) beta(i2)
. . . beta(iq(i))]
Ht: matrix de kxkxt de varianzas condicionales.
Stdresid: residuales estandarizados multivariados (solo si numfactors
= k).
Unistdresid: residuales estandarizados multiplicados por sus corres-
pondientes desviaciones estándar.
Hmat: matriz de txk de varianzas condicionales.
Stderrors: matriz de length(parameters)2 de errores estimados.
A: Matriz A estimada.
B: Matriz B estimada.
Scores: matriz de txlength(parameters) de puntajes de verosimilitud estimados.
Weights: matriz de kxk de pesos de los componentes.
Principalcomponents: matriz de txk de componentes principales.
cumR2: R2 acumulado en el iésimo componente principal.
141
Bibliografía
Andersen, T. G., Davis, R. A., Kreiss, J.P. y Mikosch, T. (2009).Handbook of Financial Time Series. Falta ciudad y nombre de la editorial.
Springer. New Yor. (La Editorial es Springer)
Attanasio, O. (1991). Risk, time-varying second moments and market
efficiency. Review of Economic Studies 58, pp. 479–494.
Bauwens, L.; Sebastien, L.; Rombouts, J. (2006).Multivariate GARCH
Models: A survey. Journal of applied econometrics21 (79), p.109.
Bera, A. K., Higgins, M. L. (1993). ARCH models: properties, estimation
and testing. Journal of Economic Surveys 7, pp.305-362.
Bollerslev, T, Chou, R.Y., Kroner, K.F. (1992). ARCH modeling in finance: a review of the theory and empirical evidence. Journal of Econometrics 52,pp. 5-59.
Bollerslev, T., Engle, R.F., Nelson, D.B. (1994). ARCH models. Handbook of Econometrics, Engle, R., McFadden, D., (eds). Amsterdam: North Holland Press.
Bollerslev, T. (1990). Modelling the coherence in short-run nominal exchange rates: a ultivariate generalized ARCH approach. Review of
Economics and Statistics, 72, 498-505.
Bollerslev, T. (2001). Financial econometrics: past developments and future challenges. Journal of Econometrics, 100, 41-51.
Box, G., Jenkins, G.M. (1970). Time Series Analysis, Forecasting and
Control. Holden-Day: San Francisco.
Brooks, C. (2008). Introductory Econometrics for finance. Cambridge
University Press. Second Edition.
145
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Campbell, J., Lo, A., MacKinlay, A. (1997). The econometrics of financial markets. Princenton University Press. First Edition.
Castaño, E., Gómez, K., Gallón, S. (2008). Pronóstico y estructuras de
volatilidad multiperiodo de la tasa de cambio del peso colombiano.
Cuadernos de Economía, 48, pp. 241-266.
Chakraborti, A., Santhanam, M. (2005). Financial and other spatio-temporal time series: long-range correlations and spectral properties. International Journal of Modern Physics, 16, 11, pp. 1733-1743.
Dusan, M. (2002). Forecast generating for ARCH-GARCH processes
using the MatLab procedures. Institute of Computer Science, Faculty
of Philosophy and Science, The Silesian University Opava.
Embrechts, P., Mikosch, T. (2000).Mathematical models in finance. Working paper.
Engle, R.F. (1982). Autoregressive conditional heteroscedasticity with
estimates of the variance of United Kingdom inflation. Econométrica
50, pp.987–1007.
Engle, R., Kroner, F.K. (1995). Multivariate simultaneous generalized
ARCH. Econometric Theory 11, pp.122–150.
Engle, R.F., Patton, A. (2001). ¿What good is a volatility model? Quantitative Finance, 1, pp.237-245.
Engle, R.F. (2001). Financial econometrics: a new discipline with new
methods. Journal of Econometrics 100, pp.53-56.
Engle, R.F. (2002). New Frontiers of GARCH models. Journal of Applied
Econometrics, 17, pp. 425- 446.
Engle, R.F., Rangel, G. (2006). The Spline-GARCH Model for Unconditional Volatility and its Global Macroeconomic Causes. Working Paper No. SC-CFE-04-05, forthcoming Review of Financial Studiess.
Engle, R.F., Focardi, F., Fobozzi, F. (2008). Handbook Series in Finance,
ChapterARCH/GARCH Models in Applied Financial Econometrics.
JonhWiley and Sons: New York.
146
Bibliografía
Fan, J., Wang, M., Yao, Q. (2008). Modelling Multivariate volatilities via
conditionally uncorrelated components. Journal of Royal Statistical
Society, 70, Part 4, pp. 679- 702.
Frances, P.H., Van, Dick D. (1996). Forecasting stock market volatility using (non linear) GARCH methods. Journal of forecasting, 15,
pp.229-235.
Franses, P.H. McAleer, M. (2002). Financial volatility: an introduction.
Journal of applied econometrics. 17, pp. 419 – 424.
Giot, P., Laurent, S. (2003). Value-at-risk for long and short trading positions. Journal of applied econometrics, 18, (6), pp. 641-664.
Gouriéroux, C. (1997). ARCH Models and Financial Applications. New
York: Springer-Verlag..
Goyal, A. (2000). Predictibility of stock return volatility from GARCH
models. Anderson Graduate School of Management, UCLA. Working
paper. pp. 1- 44.
Hansen, P., Lunde, A. (2005). A forecast comparison of volatility models:
does anything beat a GARCH (1, 1)? Journal of applied econometrics,
20, pp. 873-889.
Hayashi, F. (2000). Econometrics. Princenton University Press, Pincenton. Second Edition
Huang, D., Wang, H., Yao, Q. (2008). Estimating GARCH models: when
to use what? Econometrics Journal, 11, pp. 27- 38.
Hull, J. (2002). Options, Futures and other derivatives. New York: Prentice Hall, Finance Series. Fifth Edition..
Karolyi, G.A. (1995). A multivariate GARCH model of international
transmission of stock returns and volatility: the case of the United
States and Canada. Journal of Business and Economic Statistics 13,
11-25.
147
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Kroner, K. F., Claessens, S. (1991), Optimal Dynamic Hedging Portfolios and the Currency Composition of External Debt. Journal of International Money and Finance, 10, pp.131-148.
Kawakatsu, H. (2006). Matrix exponential GARCH. Journal of Econometrics, 134, pp.95–128.
Kearney, C., Patton, A.J. (2000). Multivariate GARCH modelling of exchange rate volatility transmission in the European Monetary System.
Financial Review 41, 29-48.
Lega, P.; Murcia, A.; Vásquez, D.; Venegas, T. (2007). Volatilidad de la
tasa de cambio nominal en Colombia y su relación con algunas variables. Borradores de Economía, 473. Bogotá: Banco de la República
Ledoit, O., Santa-Clara, P., Wolf, M. (2003). Flexible multivariate
GARCH modeling with an application to international stock markets.
The review of Economics and Statistics, 3, 83, pp 735-747.
Liu, Q., Morimune, K. A. (2006). Modified GARCH model with spell of
shocks. Asia-Pacific Financial Markets, 12, pp. 29-44.
Long, X. D. (2005). Semiparametric multivariate GARCH model. FMA
European Conference.
MathWorks (2005). MatLab user reference. Natick, MA.
McMillan, D., Speight, A. (2004). Daily Volatility Forecast: reassesing
the performance of GARCH models. Journal of Forecasting, 23, pp.
449-460.
Mills, T. (1999). The econometric modelling of financial time series.
Cambridge: University Press. Second Edition.
Nelson, D. B. (1991): Conditional heteroskedasticity in asset returns: a
new approach. Econométrica, 59, pp.347-70.
Nelson, D. B., Cao, C.Q. (1992). Inequality constraints in the univariate
GARCH model. Journal of Business and Economic Statistics, 10, 2,
pp.229--235.
148
Bibliografía
Pagan, A. (1996). The econometrics of financial markets. Journal of Empirical Finance, 3, pp.15–102.
Palm, F.C. (1996). GARCH models of volatility. In Handbook of Statistics, Maddala GS, Rao CR (eds). Amsterdam: Elsevier Science..
Pong, S., Granger, C. (2003). Forecasting volatility in financial markets: a
review. Journal of Economic Literature, 41, pp. 478- 539.
RiskMetrics Group. (1999). Risk Management: a Practical Guide. RiskMetrics. Risk Metrics Group. New York.
Sentana, E. (1998). The relation between conditionally heteroskedastic
factor models and factor GARCH models. Econometrics Journal, 1,
pp. 1–9.
Shephard, N. (1996). Statistical aspects of ARCH and stochastic volatility. En Time Series Models in Econometrics, Finance and Other Fields,
Hinkley DV, Cox DR, Barndorff-Nielsen OE (eds). Chapman & Hall:
London.
Tse, Y.K., Tsui, A. (2002). A multivariate generalized autoregressive conditional heterocedasticity model with time-varying correlations. Journal of business and economics statistics, 20, 3, pp. 351-362.
Tsay, R. (2005). Analysis of financial time series, 2a. ed. Wiley Series in
Probability and Statistics. New Jersey.
Valderas, J.; Alba, J.; Olmedo, E. (2002). Modelación estocástica en los
mercados financieros: un Puente entre lo simple y lo complejo. [Versión electrónica]. Encuentros multidisciplinares, 12, Pp.1-10, from
http://www.encuentros-multidisciplinares.org/Revistan%C2%BA12/Juan%20
Manuel%20Valderas;%20Jos%C3%A9%20M%C2%AA%20Alba;%20
Elena%20Olmedo.pdf.
Van der Weide, R. (2002). GO–GARCH: a multivariate generalized orthogonal GARCH model, Journal of Applied Econometrics, 17,
pp.549-564.
Wang, P. (2009). Financial Econometrics. Routledge. Second Edition.
New York.
149
Guía de uso de Matlab en el desarrollo de modelos de volatilidad
Wooldridge, F. (2005). Econometric Analysis of cross section and panel
data. MIT Press. Boston.
Zang, K., Chan, L. (2009). Efficient Factor GARCH models and factorDCC models. Quantitative Finance, 9 (1), pp.71- 91.
150
La cartilla va dirigida a estudiantes y profesionales de Ingeniería,
Finanzas, Administración y Economía que deseen adquirir
conocimientos respecto al uso de MatLab y primordialmente,
en la implementación de modelos de volatilidad con esta
herramienta. El libro busca responder a una necesidad latente
relacionada con la dificultad de enlazar la teoría y la práctica
del análisis de volatilidad, pues que además de los conceptos
teóricos se presentan los fundamentos de implementación
de los modelos tradicionales Arch y Garch por medio de una
herramienta de amplia difusión como lo es MatLab. El libro es
importante desde el punto de vista teórico pues se hace una
congregación de las primordiales técnicas de modelamiento de
volatilidad a través de modelos Arch y Garch, tanto univariados
como multivariados; y desde el punto de vista práctico, pues
dichos modelos teóricos se implementan por medio de MatLab.
Descargar