You are on page 1of 104

111

Programación en Econometric Views


1. Presentación

Como el lector habrá podido apreciar a lo largo de las páginas


precedentes, EViews cuenta con una amplia batería de funciones y
procedimientos que facilitan el análisis de datos. Sin embargo, hasta
el momento solo hemos aplicado estas funciones en modo interactivo.
Esto significa que para invocar un comando hemos utilizado los
botones y menúes correspondientes en la ventana del programa, o
bien hemos escrito la instrucción deseada explícitamente en la zona
de comandos. La expresión "modo interactivo" proviene del para-
digma de pregunta-respuesta. A cada comando sigue un resultado
inmediato por parte de EViews. Incluso, podría llegar a afirmarse
que, hasta el momento, cada solicitud que hemos presentado tenía
sentido completo por sí misma. Instrucciones como las siguientes
ilustran este hecho:

LS YCX1X2
GENRX=NRND
SHOWZ.HIST

Estos tres comandos tienen, a simple vista, un propósito concreto


y completo. No existe interdependencia entre ellos, pues corresponden
a distintos problemas elementales.

Contrastemos lo anterior imaginando un problema más complejo.


Supongamos que quisiéramos calcular la proporción que existe entre el
número de valores positivos y el número total de valores encontrados
en el error (residuo) de la regresión de Y frente a Xl, X2, C. La teoría
econométrica nos sugiere que, de ser grande el número de observacio-
nes, la proporción debería ser aproximadamente 1 de cada 2, debido a
que la media del error será cero. Sin embargo, no hay modo directo de
efectuar este conteo, ya que no existe una función de EViews definida
para medir la proporción de valores positivos en una serie (probable-
mente los creadores de EViews deben haber estado ocupados progra-
148 Juan Francisco Castro 1 Roddy RiYas-Llosa

mando funciones más valiosas). La tarea de efectuar dicho proceso paso


a paso recae, entonces, sobre nosotros.

Veamos cómo los comandos que siguen llevan a cabo la tarea:

LS Y Xl X2 C
SMPL IF RESID>O
1 =@OBS(RESID)/@ROWS(RESID)

El primero de ellos realiza la regresión en cuestión, cuyo resultado


genera automáticamente una serie RES ID que contiene los errores (resi-
duos) del modelo. El segundo fija la muestra, de modo que solo incluya
los valores positivos del residuo que fue generado mediante el coman-
do previo. Finalmente, el tercero calcula un ratio entre el número de
observaciones de la muestra (fijada mediante el comando Smpl) y el
número total de observaciones en el rango del archivo de trabajo. El
signo de igualdad que precede a este último comando instruye a EViews
para presentar el resultado en pantalla (en la barra de estado, para ser
más exactos). Como se ve, las tres instrucciones funcionan al unísono
para poder responder a una pregunta compleja, un problema que re-
quiere varios pasos para resolverse. Ejecutarlas en cualquier otro orden
que no sea el indicado carecería de sentido o respondería a otra pregun-
ta. ¿Nota la línea gruesa a la izquierda de los comandos y el tipo de letra
distinto que hemos utilizado al escribirlos? Este formato tiene como
propósito remarcar la unión funcional que tienen las tres instrucciones
anteriores, que trabajan a modo de una instrucción compuesta. Felicita-
ciones, usted acaba de examinar su primer programa en Econometric
Views.

Detengámonos un momento en este tema y examinémoslo desde


una perspectiva más amplia, para comprender sus implicancias y vis-
lumbrar la extensión e importancia del terreno en el que nos adentramos.
Un programa no es otra cosa que el conjunto de pasos o instrucciones
destinado a conseguir un objetivo determinado. Esta definición no se
limita, por supuesto, al ámbito de las computadoras y el análisis
econométrico. Por el contrario, en nuestra vida cotidiana utilizamos
programas todo el tiempo. Los encontramos en lugares muy variados,
desde el algoritmo que gobierna los semáforos que vemos en las esqui-
nas hasta el proceso mismo que nos permite caminar o conducir de
manera sincronizada. En buena cuenta, todos los sistemas complejos
Programación en Econonzetric Views 149

revisten alguna clase de programación interna que gobierna su funcio-


namiento.

El sistema más complejo conocido por el hombre no parece ser una


excepción a esta regla, aunque oculta discretamente los principios téc-
nicos de su programación subyacente. Nuestra propia mente es el ma-
yor de los acertijos y, a la vez, la herramienta de análisis más potente
que tenemos a nuestra disposición para entender el mundo que nos
rodea. Y la segunda es, ciertamente, la computadora digital.

La gran mayoría de los usuarios de computadoras hace un uso


muy limitado del potencial de esta segunda herramienta. No se trata
solamente de una limitación efectiva en cuanto a la complejidad de
problemas que pueden resolverse con ella, sino también en cuanto a la
velocidad a la que logran confrontar problemas complejos.

Gráfico 3.1

Potencial del uso de herramientas de programación

Velocidad de resolución de problemas complejos


Incluyendo el tiempo Invertido en elaborar la PI'OQramaclón
150 Juan Francisco Castro 1 Roddy Ri\·as-Llosa

Para ponerlo en otros términos, póngase a pensar cuánto tiempo


le ahorra y qué nuevas posibilidades le ofrece a un economista la
facilidad de realizar regresiones automáticamente en una computado-
ra en lugar de hacerlas a mano. Haciendo una analogía, esa es la misma
relación que se forma entre un usuario que no utiliza las herramientas
de programación y uno que las aprovecha activamente.

2. Creación y ejecución de programas en EVíews

Hemos dicho que un programa es un conjunto de instrucciones


destinado a resolver una determinada tarea. De acuerdo con esta defi-
nición,los tres comandos presentados líneas atrás constituyen, en prin-
cipio, un pequeño programa. No obstante, para que conformen un pro-
grama dentro del marco conceptual de trabajo de Econometríc Views, los
comandos que lo integran deberán estar registrados en un tipo especial
de objeto, denominado PROGRAM. A diferencia de todos los demás
objetos de uso común en EVíews, los programas se archivan fuera del
workfile, en archivos de texto separados 1 • La extensión de estos archi-
vos es PRG y por lo general están automáticamente asociados con EViews
en el sistema operativo MS Wíndows.

Crear un nuevo programa en EVíews es sencillo. Simplemente de-


berá utilizarse el menú apropiado (File, New, Program) o bien el co-
mando que permite crear un objeto PROGRAM:
PROGRAM NombrePrograma
En cualquiera de los dos casos, EViews dispondrá una nueva ven-
tana en blanco para que el usuario ingrese, tal como si fuera un
procesador de textos,los comandos del programa (uno en cada línea).
No hay restricción práctica para la longitud de cada línea del progra-
ma, pero los renglones demasiado extensos son difíciles de leer (y algu-
nas veces incluso de entender).

Un programa puede ser ejecutado, editado y grabado utilizando


para ello los botones que, con estos fines, se encuentran en la parte
superior de la ventana del objeto. Es recomendable grabar frecuente-
mente estos archivos, pero es particularmente prudente hacerlo justo

l. Esto implica que pueden ser editados desde un procesador de textos estándar,
como MS Word, o incluso desde el Notepad (Block de notas) incluido en MS Windows.
Programación en Econometric Views 151

antes de ejecutar un programa (debido a que, algunas veces, un error en


la redacción puede ocasionar que EViews deje de responder y se pierda
toda la información no guardada).

Probemos ingresar los comandos presentados al inicio del capítu-


lo. Para ello, primero incorporaremos la siguiente instrucción en la zona
de comandos:
PROGRAM Ejemplo1
Luego escribiremos el programa en la ventana destinada para ello.

Imagen 3.1

Ventana de un programa

• Program: EJEMPL01- {d:\work~\ejemplo1.prg) l;Jr'Q]~

LS Y C X1 X2
SMPL IF RESID>O
=@OBS(RESID)!@ROWS(RESID)

Antes de ejecutar este programa, verificaremos que exista un ar-


chivo de trabajo donde se tenga las tres series de datos utilizadas (Y, X1
y X2) y que la muestra se encuentre fijada en toda la extensión del rango
del archivo. De no ser este el caso, podríamos resolver el inconveniente
si ejecutamos antes las siguientes instrucciones en la zona de coman-
dos:

WORKFILE Prueba U 100


SMPL®ALL
GENR X1=NRND
GENR X2=NRND
GENRY=NRND

Ejecutemos ahora el programa, presionando para ello el botón Ruri 1


o invocándolo desde la línea de comandos con la siguiente instrucción:
152 Juan Francisco Castro 1 Roddy Rivas-Llosa

RUN Ejemplol

En el primer caso, aparecerá una ventana de diálogo como la que


se muestra a continuación. En este punto, podríamos simplemente pre-
sionar el botón OK para iniciar la ejecución del programa; sin embargo,
conviene analizar con mayor detenimiento qué función tiene cada una
de las opciones disponibles.

Run Program ~
r frogr.n name or p a t h - - - - - - - ,
IID:\WORKS\EJEMPL01.PRG

cE~~--------------,
'
i (' Yerbose [slow) update screenlstatus line ~
i r. Q.uiet [fast) no screenlstatus fine updates
Maximum errors before halting: 11
· W Make this the f!ef ault execution mode i
'
~··-·------·--·------·----··--·--·----------J
¡
Programación en Econometric Viezvs 153

La primera casilla indica el nombre del programa por ejecutar,


mientras que la zona que luce la etiqueta Program arguments se utiliza
para ingresar los parámetros operativos externos del programa, en caso
los hubiera (siempre son opcionales). Abordaremos el funcionamiento
de estos parámetros más adelante; por ahora, basta recordar que se
trata de piezas de información que serán útiles ingresar justo antes de
ejecutar el programa, ya que determinarán, en parte, los resultados del
mismo.

Más abajo, en la misma ventana, se lee la etiqueta Execution mode.


En dicha casilla se dispone de dos posibilidades: Verbose y Quiet. En
caso de ejecutarse un programa en modo Verbose, EVíews reportará en
la barra de estado cada uno de los comandos que ejecute (tal procedi-
miento demanda una fracción de tiempo por cada uno y resta velocidad
a la realización global de un programa). En cambio, la modalidad Quiet
ejecuta rápidamente las instrucciones sin reportarlas una por una, ade-
más de permitir escoger el número de errores máximo que EVíews tolera-
rá en un programa antes de detener su ejecución. Finalmente, en caso de
que se quiera que el modo de ejecución seleccionado permanezca como
modalidad por defecto, se deberá activar la casilla que indica Make
this the default execution mode. Veamos ahora lo que sucede al presio-
nar el botón O K.

Una vez que se ejecuta un programa, EVíews recorre cada línea,


comenzando por la primera en la parte superior, y lleva a cabo cada
instrucción en rápida secuencia. En nuestro ejemplo, el resultado mos-
trado en pantalla corresponderá al producido por la tercera instruc-
ción, pudiendo leerse en la sección izquierda de la barra de estado (en
la parte inferior de la pantalla). El enunciado SCALAR = 0.483 ... indica
que la respuesta es un número (escalar).

Cabe destacar que, además de la respuesta indicada, al terminar


la ejecución del programa quedará en la pantalla una ventana corres-
pondiente a los resultados de la regresión invocada en el primer co-
mando del programa. En efecto, de no tomarse medidas al respecto,
cada resultado parcial de las instrucciones de un programa podría acu-
mularse en la pantalla a medida que este se ejecute.
15-± Juan Francisco Castro 1 Rodd\· Ri\·as-Llosa

3. Tipos de programas en EVíews

3.1. Macroejecutores

Si bien todos los programas factibles de desarrollo en EViews se


crean, editan y ejecutan de la misma manera, por motivos didácticos
los dividiremos en tres categorías. A los programas pertenecientes a la
primera de ellas los denominaremos "programas macroejecutores de
comandos". Un programa de este tipo registra instrucciones específi-
cas y el orden en que deben ejecutarse. Dicho conjunto de comandos
se distingue porque es factible de ser ejecutado manualmente por el
usuario, escribiendo una a una las líneas del programa en la zona de
comandos. Un programa macroejecutor no involucra, por tanto, la
toma de decisiones ni la repetición automática de porciones del pro-
grama. Todo lo contrario: los macroejecutores de comandos simple-
mente constituyen un guión que EViews seguirá al pie de la letra, ciega
y velozmente.

A través de una definición alternativa, cualquier programa en el


que siempre se ejecuten todas y cada una de las líneas una sola vez
pertenece a esta clase. El ejemplo ofrecido en la sección anterior corres-
ponde a esta primera categoría.

Veamos otro ejemplo. El programa siguiente servirá para facilitar


la creación de un modelo con tres variables explicativas (incluyendo un
intercepto) en el archivo de trabajo activo.

'Programa para crear un modelo simple.

SMPL @ALL
GENR Xl = NRND
GENR X2 = NRND
GENR Y = 3 + 4*Xl - 5*X2 + 2*NRND

Note que la primera línea comienza con un apóstrofo. Esto le indi-


ca a EViews que se trata de un comentario y que simplemente debe pasar
esa línea por alto. Si no incluyéramos el apóstrofo, el programa intenta-
ría ejecutar esa línea como si fuera un comando propio de EViews y,
seguramente, daría origen a un error que sería reportado en pantalla.
Programación en Eco11omctric Fines 135

La ejecución de este programa da como resultado la aparición (o el


reemplazo, de existir con anterioridad) de tres series de datos: Xl, X2 e
Y Las dos primeras contendrán información aleatoria y la tercera será
una combinación lineal de las dos anteriores más una constante v un
-
término aleatorio. El propósito de incluir este último término es promo-
ver que el ajuste lineal entre las tres series no sea perfecto, de modo que
podamos utilizar los datos para practicar las técnicas de regresión (en
la Universidad del Pacífico utilizamos algunas veces una técnica simi-
lar para producir modelos de diverso grado de dificultad que, una vez
seleccionados, son utilizados por los alumnos para poner en práctica
sus habilidades econométricas).

Cabe notar que el programa anterior asume el conocimiento pre-


vio de los coeficientes utilizados en la regresión final. Si utilizamos este
programa para generar modelos una y otra vez, a modo de ejercicio, ¿no
sería algo aburrido que siempre encontráramos valores similares para
los coeficientes estimados? Probemos con una versión mejorada del
programa:

'Programa para crear un modelo simple.


'Versión mejorada.

SMPL @ALL
GENR Xl = NRND
GENR X2 = NRND
GENR Y = @NRND + @NRND*Xl - @NRND*X2 + 2*NRND

En esta nueva versión, puede verse que los coeficientes han sido
reemplazados por funciones @NRND. Cabe señalar que la diferencia
entre la función NRND y la función @NRND es que la primera genera
series completas de datos aleatorios; mientras que la segunda, números
aleatorios (en ambos casos, extraídos de una distribución normal). Aho-
ra no sabemos a priori cuáles serán los valores de los coeficientes y, si
bien cabrían muchas otras mejoras al programa, podemos utilizarlo para
practicar nuestras técnicas de regresión durante algún tiempo.

3.2. Programas estructurados

Este segundo tipo de programas se distingue del anterior por la


inclusión, adicional a las funciones y comandos incorporados en EVíews,
156 Juan Francisco Castro 1 Roddy RiYas-Llosa

de estructuras funcionales. Dichas estructuras se ingresan mediante


palabras clave que no pueden ser interpretadas en la zona de coman-
dos, sino solamente dentro de un programa. Al incluir estas cláusulas
se altera el flujo del programa, no siendo más una ejecución lineal de
comandos.

Las dos estructuras funcionales que incluye el lenguaje de progra-


mación de EViews son los bucles (también llamados repeticiones) y las
cláusulas condicionales. Estas secuencias estructuradas estarán pre-
sentes en la gran mayoría de los programas especializados que se desa-
rrollen en EViews.

Veamos un ejemplo para poner en contraste el uso de


macroejecución y estructuras en un programa. Supongamos que nece-
sitáramos crear 50 series de datos aleatorios (Xl, X2, ... , X50). Un pro-
grama basado en comandos convencionales no tendrá mejor modo de
hacerlo que este:

GENR Xl = NRND
1-- GENR X2 = NRND

1 GENR XSO = NRND

El programa contaría con 50 líneas, una para cada variable gene-


rada. Sería tedioso escribirlo y aburrido leerlo. ¿Qué tal si pudiéramos
hacer algo como lo siguiente?

-: Repetir lo siguiente 50 veces,


-- Incrementando el valor de la variable '' i // en
una unidad cada vez:
-- GENR Xi = NRND

Las líneas punteadas las utilizaremos para denotar un seudocódigo


(un esbozo de programa expresado con palabras habituales y coman-
dos no necesariamente válidos, que sirve para ilustrar el funcionamien-
to de un algoritmo sin necesidad de implementarlo).

Esta nueva aproximación permite dejar que EViews se haga cargo


de la tarea repetitiva. En concreto, la programación estructurada posi-
Programación en Econometric Views

bilita implementar un algoritmo a través de una estructura de repeti-


ción que utiliza las palabras clave FOR ... NEXT:

FOR ! i =
1 TO 5O
GENR X! i = NRND

1 NEXT ! i

Este programa cuenta con tres líneas y replica con precisión el


funcionamiento del programa original de 50 líneas. Pero no solo es más
breve de escribir y de leer, sino que cuenta con la posibilidad de exten-
derse para generar un número distinto de series tan solo cambiando el
número 50 por otro; o poner un nombre diferente de X a las series,
cambiando esta parte del programa.

A diferencia del primero, la redacción del segundo programa su-


puso una fase previa de abstracción por parte del programador, quien
tuvo que determinar la 'regla de solución' del problema: el algoritmo
subyacente. Si bien en este caso fue sencillo detectar que lo que se reque-
ría era una repetición claramente delimitada, no siempre es posible
resolver el problema tan directamente.

3.3. Programas modulares

Un nivel adicional de sofisticación en el desarrollo de programas


es la división de la tarea central en una serie de tareas más sencillas,
determinadas de modo estratégico de manera que clarifiquen el funcio-
namiento del conjunto. Un ejemplo clásico de esta aproximación es el
uso de funciones centralizadas.

Imagine que se definen las siguientes funciones matemáticas:

F(x) = (x + 1) 2 (x- 4) -t + 2 x + 10
G(x) = (x + 1) (x2 + 5) -1
H(x) = (3 x-2) 1 (x2 + 1)
J(x)=F(G(H(x)))

Supongamos que se desea calcular la suma de los resultados de la


función J para los siguientes valores de x: 0.5, 1, 5.25, 9.01 y 17.5. Un
programa factible sería el siguiente:
158 Juan Francisco Castro 1 Roddy Rins-Llosa

!total=O

!h = (3*0.5-2) 1 (0.5"2 + 1)
!g = ( !h+1) * ( !h"2+5) - 1
!f = ( !g+1)"2 * ( !g-4)"-1 + 2*!g + 10
!total = !total + !f

!h = (3*1-2) 1 (1"2 + 1)
!g = ( !h+1) * ( !h"2+5) - 1
1f = ( !g+1)"2 * ( !g-4)"-1 + 2*!g + 10
!total = !total + !f
!h = (3*5.25-2) 1 (5.25"2 + 1)
!g = ( !h+1) * ( !h"2+5) - 1
!f = (!g+1)"2 * ( !g-4) "-1 + 2*! g + 10
!total = !total + !f

!h = (3*9.01-2) 1 (9.01"2 + 1)
!g = ( !h+1) * (! h"2+5) - 1
!f = (!g+1)"2 * (!g-4)"-l + 2*! g + 10
!total = !total + !f

!h = (3*17.5-2) 1 (17.5"2 + 1)
!g = ( !h+l) * ( !h"2+5) - 1
!f = ( !g+1)"2 * (!g-4)"-1 + 2*!g + 10
!total = !total + !f

=!total

Si bien este programa es efectivo, notará que existe una severa


redundancia en él (no es eficiente). Al menos tres líneas se repiten exac-
tamente a lo largo del programa. Si este ejemplo produce un ligero dolor
de cabeza, ¡imagine qué sucedería si en lugar de ser tres líneas fueran
treinta! Además, considere lo incómodo que resultaría cambiar los va-
lores originales para x por otros distintos. Habría que localizar uno por
uno los puntos del programa en los que estos valores se utilizan y cam-
biarlos con mucho cuidado para evitar errores.

La solución en este caso consiste en centralizar las operaciones


repetitivas en lo que se denomina en EVíews una subrutina (un pequeño
subprograma dentro de un programa).
Programación en Ecollomctric Vie<us 159

En nuestro ejemplo, bastaría definir al inicio del programa la


subrutina AcumulaFoGoH del siguiente modo:

SUBROUTINE AcumulaFoGoH (SCALAR x)


!h == (3*x-2) 1 (xA2 + 1)
!g =o ( !h+l) * ( !hA2+5) - 1
!f =o (!g+l)A2 * (!g-4)A-1 + 2*!g + 10
!total== !total + !f
ENDSUB

Cuando EViews encuentre este fragmento al inicio del programa,


lo pasará por alto sin ejecutarlo. En cambio, si se necesita ejecutar el
fragmento definido dentro de la subrutina, se le llamará con la instruc-
ción adecuada (CALL), seguida del nombre de la subrutina y los
parámetros entre paréntesis (como si se tratara de una función matemá-
tica). De este modo, el programa quedaría tal como sigue:

SUBROUTINE AcumulaFoGoH (SCALAR x)


!h == (3*x-2) 1 (x"2 + 1)
!g =o ( !h+1) * ( !hA2+5) - 1
!f =o (!g+l)A2 * (!g-4)A-1 + 2*!g + 10
!total == !total + !f
ENDSUB

!total==O

CALL AcumulaFoGoH(O.S)
CALL AcumulaFoGoH(l)
CALL AcumulaFoGoH(5.25)
CALL AcumulaFoGoH(9.01)
CALL AcumulaFoGoH(l7.25)

=!total

La versión original del programa tenía 22 líneas efectivas y su


lectura era confusa. El programa no era eficiente. En cambio, esta ver-
sión tiene 13 líneas (incluyendo dos correspondientes a las cabeceras
de la subrutina) y su lectura es mucho más clara, ya que carece de
elementos redundantes. Más aun, permite hacer modificaciones centra-
lizadas en las funciones, que luego repercutirán sobre cada uno de los
cinco casos particulares evaluados en el cuerpo del programa.
160 Juan Francisco Castro 1 Roddv RiYas-Llosa

4. Elementos de programación estntcturada

En esta sección examinaremos con detenimiento las múltiples he-


rramientas sintácticas que pone a nuestra disposición el lenguaje de
programación incorporado en EViews. Comenzaremos por revisar los
fundamentos de gestión de variables del usuario y luego abordaremos
el uso de las dos estructuras fundamentales: los bucles y las cláusulas
condicionales.

4.1. Pautas de estilo para redactar correctamente un programa

Antes de embarcamos de lleno en el estudio de la sintaxis del


lenguaje de programación, resulta conveniente que hagamos una pau-
sa, tomemos aliento y fijemos algunas convenciones sobre la manera de
escribir un programa.

Comencemos por decir que un programa siempre se debería escri-


bir pensando primero en los grandes lineamientos. La concepción de
un proyecto de programación debería iniciarse mediante la identifica-
ción de las partes mayores del programa. En general, distinguiremos
cuatro secciones en un programa, que denominaremos: encabezado,
prólogo, cuerpo y epílogo. Este orden deberá respetarse siempre.

El encabezado de un programa contendrá tres elementos:

• El título y propósito del programa.

• El autor (o autores) y la fecha de elaboración.

• Las instrucciones específicas de uso (particularmente si el progra-


ma recibe parámetros externos como insumo para operar) y otros
comentarios relevantes.

Todos los contenidos del encabezado deberán ir precedidos de un


apóstrofo para indicar que se trata de comentarios (lineas no ejecutables).
Un ejemplo de encabezado sería el siguiente:
Programación en Econometric Views 161

'Programa para encontrar el estadístico de CHousesT


'para contrastar la existencia de procesos cíclicos.
'========================================================
'Programado por: Jorge Blackie
'Enero del 2003
'========================================================
'USO:
' El nombre de la serie por analizar deberá pasarse
' corno el primer parámetro del programa

El prólogo contendrá los elementos enumerados a continuación:

• Todas las subrutinas incluidas en el programa. Estas deben colo-


carse antes de cualquier instrucción ejecutable que se encuentre
fuera de una subrutina.

• La inicialización de las variables utilizadas en el programa, así


como una breve explicación de su funcionamiento.

Por su parte, corresponderán al cuerpo del programa:

• Todas las instrucciones que formen parte del algoritmo central


propiamente dicho.

En el cuerpo del programa deberá evitarse incluir referencias a


números o nombres de objetos que se asuman como válidos, sin te-
ner certeza de que lo serán en la totalidad de los casos. El cuerpo
debe funcionar perfectamente siempre, sin importar en qué condi-
ciones se ejecute el programa. El usuario no debería tener necesidad
de modificar el cuerpo de un programa, salvo que desee alterar el
algoritmo subyacente de manera esencial. Veamos un ejemplo de
esta regla.

El siguiente fragmento corresponde al cuerpo de un programa mal


diseñado:
162 Juan Francisco Castro 1 Roddy Ri\·as-Llosa

'Generaremos una serie provisional para recoger el error.


GENR X = RESID

'Luego dividiremos esta serie entre el número de


'observaciones
GENR X = X 1 200

' Y finalrnen te strrnarernos los valores er1 el resultado final


=@SUM(X)

¿Cuántos errores se detectan en el fragmento anterior? Las únicas


líneas que están correctamente enunciadas son las de los comentarios.

El primer comando genera una serie provisional llamada X, sin


medir las consecuencias de ello. Podría darse el caso de que en el archi-
vo de trabajo exista una serie llamada X, que se sobrescribiría sin nin-
guna consulta por parte de EViews ya que, en efecto, se le está ordenan-
do hacerlo. La solución sería utilizar un nombre que no exista en el
archivo. Veremos esto dentro de un momento.

La segunda instrucción tiene un grave error. Presume que el nú-


mero de observaciones es de 200. Posiblemente lo sea en el archivo v con
'
la muestra que el programador está trabajando en ese momento, pero no
tiene por qué ser así siempre. Otro usuario podría decidir utilizar el
programa en otro archivo que tuviera, digamos, 100 observaciones. La
solución sería utilizar una función que calcule el tamaño correcto de la
muestra en cada caso.

Finalmente, el tercer comando revela un posible error sutilmente


distribuido a lo largo de los tres: la muestra de trabajo no ha sido
definida. Es un error común que los programadores asuman que la
muestra de trabajo del archivo (SMPL) se encuentra correctamente
definida al iniciar el programa (seguramente fijada igual a la totali-
dad del rango). Sin embargo, sabemos que no necesariamente será así.
Esta instrucción sumará únicamente los valores de X que se encuen-
tren en la muestra activa (también los dos primeros comandos solo
generarán X en la muestra activa). La solución consistirá en agregar
una orden adicional para fijar la muestra según le interese al progra-
mador.
Programación en Econometric Views 163

La versión corregida del fragmento será la siguiente:

'Establecernos la muestra a todo el rango.


SMPL @ALL

'Generaremos una serie provisional para recoger el error.


GENR __ ErrTrnp = RESID

'Luego dividirnos esta serie entre el número de


'observaciones de la muestra.
GENR __ ErrTrnp = __ ErrTrnp / @OBS(RESID)

'Y finalmente sumarnos los valores en el resultado final.


=@SUM( __ ErrTrnp)

Note cómo hemos utilizado un nombre que comienza con guiones


bajos (" _") para evitar que se solape con un nombre preexistente en el
archivo. Esta es una convención que brinda seguridad sin hacer confu-
sa la lectura de los nombres de las variables y permite detectar de un
solo vistazo los objetos que serán eventualmente desechados de la me-
moria por no ser necesarios al finalizar el programa.

Para concluir, la sección final de un programa, que denominare-


mos epílogo, contendrá:

• Las instrucciones encargadas de devolver al usuario los resulta-


dos del programa.

• Los comandos necesarios para eliminar del archivo de trabajo los


objetos que se crearon con carácter temporal.

Según estas indicaciones, la última línea del fragmento anterior


en realidad no corresponde al cuerpo, sino al epílogo, ya que devuelve
los resultados al usuario. El epílogo del programa previo luciría más o
menos como sigue:
164 Juan Francisco Castro 1 Roddv Rivas-Uosa

'EPÍLOGO
,=======================================================
'Finalmente sumamos los valores en el resultado final.
=@SUM(_ErrTmp)

'Y borramos los objetos auxiliares.


D _ErrTmp

El lector habrá notado que al referimos a funciones incorporadas


preferimos el uso de letras mayúsculas. Similarmente, nos inclinamos a
utilizar minúsculas, o una mezcla de ambos tipos de letra, al aludir a
objetos o variables de creación del usuario. No obstante, todo ello es
una convención, no una obligación.

4.2. Variables volátiles

Una variable no es más que una posición de memoria donde el


computador nos permite registrar un valor provisionalmente. EViews
facilita el uso de variables auxiliares dentro de un programa (el lector
seguramente habrá notado a lo largo de los ejemplos anteriores el uso
de expresiones tales como !f y !total); estas son de naturaleza volátil y
transitoria, es decir, solo pueden utilizarse dentro del programa. Con
mayor exactitud, el valor de las variables solo permanece en memoria
mientras el programa está en ejecución; una vez terminado este, todas
las variables desaparecen (se libera la memoria que ocupaban) y su
valor deja de ser accesible.

Cabe distinguir estas variables volátiles de los objetos del archivo


de trabajo. Estos son permanentes, pues se mantienen accesibles tanto
durante la ejecución del programa como cuando este concluye. Por ello,
en ocasiones denominaremos a los objetos variables permanentes, para
distinguirlos de sus contrapartidas transitorias.

Existen dos tipos de variables volátiles en EViews: las numéricas y


las de texto. Las primeras se denotan mediante un signo de admiración
de cierre inmediatamente seguido de un nombre para la variable (entre
1 y 16 caracteres no extendidos 2 ). La primera referencia a la variable en

2. Los siguientes nombres no pueden ser utilizados: ABS, ACOS, AR, ASIN, C,
Programación en Econometric Views 165

un programa debe ser la inicialización y se sugiere que esta sea inclui-


da en el prólogo. La inicialización consiste en la asignación de un valor
inicial. Posteriormente, la variable puede ser utilizada y referida como
parte de cualquier expresión. Veamos algunos ejemplos válidos:

'PRÓLOGO
'============================================
'Inicialización de variables.

!Nurn = O
!Variableimportante = 100
!Observacion = 10.0
!1 = 2

'CUERPO
'============================================
'Uso de las variables en expresiones.

GENR X = !Variableimportante * Z
SMPL !1+1 !Observacion
LS Z X!Nurn C

Ahora veamos algunos ejemplos inválidos:

'PRÓLOGO
'============================================
'Inicialización de variables con errores.

¡Nurn = O ' (1)


!Variable importante = 100 '(2)
!Observación = 10.0 '(3)
!1 = 2 + !VariableAunNoindefinida '(4)
GENR !X = !Variableimportante * Z '(5)
SMPL ! (1+1) !Observación '(6)
LS Z X !Nurn C '(7)

CON, CNORM, COEF, COS, D, DLOG, DNORM, ELSE, ENDIF, EXP, LOG, LOGIT,
.
LPTl, LPT2, MA, NA, NRND, PDL, RESID, RND, SAR, SIN, SMA, SQR y THEN .
166 Juan Francisco Castro 1 Roddy Rivas-Llosa

En el orden respectivo, los errores en los comandos anteriores son


los siguientes: 1) el signo de admiración es de apertura; 2) se dejó un
espacio dentro del nombre de la variable; 3) se utiliza una letra con tilde;
4) se está haciendo referencia a una variable aún no inicializada; 5) se
está tratando de generar una variable (solo se pueden generar series de
datos); 6) se colocó un paréntesis para agrupar incorrectamente los dos
números como parte del signo de admiración (esto no hubiera funciona-
do incluso si existiera una variable llamada !2); y 7) se dejó un espacio
entre el nombre de la serie y la variable (EVievJs espera que !Num sea una
serie de datos, el error reside en que no es así).

El segundo tipo de variables volátiles (variables de texto) se deno-


tan mediante un signo de porcentaje inmediatamente a la izquierda del
nombre. Al asignarles valor, debe utilizarse comillas dobles para ro-
dear el texto literal. Veamos algunos ejemplos de uso de este tipo de
variables:

'PRÓLOGO
'============================================
'Inicialización de variables.

%Nombre = "Charles"
%SerieDep = "Y"
%Seriesindepl =
"Xl X2 X4 Z7 Z9"
%Seriesindep2 =
"K20 Mll"

'CUERPO
'============================================
'Uso de las variables en expresiones.

%SeriesTotal = %Seriesindepl + " " + %Seriesindep2


LS %SerieDep C %SeriesTotal
= %Nombre

Note cómo en el cuerpo se ha operado con las variables de texto


mediante el operador de adición. En el caso de cadenas de texto, este
operador concatena sus argumentos. En el ejemplo, se han concatenado
dos textos, separándolos con un espacio en blanco.
Programación en Econometric Views 167

4.3. Argumentos del programa

Existe un grupo especial de variables volátiles de texto, denomi-


nadas %0, %1, %2, ... , %n. Estas variables tienen un uso especial, dado
que representan los argumentos ingresados al programa como parte
del comando de ejecución del usuario, en el mismo orden. Suponga-
mos, a modo de ilustración, que el usuario invoca un programa de cual-
quiera de las siguientes maneras:

RUN MiPrograma Y Z K 100M 9.33

RunPmgram ~
.Erogram name or path
jMiPrograma

·· Progr am _grguments ( %0 %1 ... ) · ···· ············ · ·· ··

ly Z K 100M 9.33 1:-::::Q.~:::::::u

··· Execution mode


( Y: erbose (slowl update screen/status ~ne ,Cancel
r. .Quiet (fast) no screen/status line updates
Maximum errors befo re halting: j1

r Make this the !;lefault execution mode

En ambos casos, al iniciarse la ejecución del programa, EViews


asignará automáticamente a las variables del %0 al %5 los valores de
los seis parámetros ingresados, en el mismo orden. Así, se tendrá el
equivalente a los siguiente comandos ejecutados implícitamente:

%0 = ''Y,
%1 = "Z"
%2 = ''K,
%3 = "100"
%4 = "M"
%5 = "9.33"
168 Juan Francisco Castro 1 Roddy Rivas-Llosa

Dentro del programa puede hacerse referencia a estas variables en


cualquier momento. Si va a usar esta característica, recuerde indicarlo
claramente en el encabezado de su programa.

4.4. Variables de reemplazo textual

Una de las herramientas más prácticas que ofrece el lenguaje de


programación de EVíews es la posibilidad de realizar reemplazo textual
del contenido de sus variables para formar nombres de objetos. Este
proceso, también conocido como metareemplazo, se realiza anexando
el nombre de una variable volátil a la definición del nombre de un obje-
to. Cabe resaltar que el nombre de la variable puede ser rodeado, de
manera opcional, mediante un juego de llaves. Véase el siguiente ejem-
plo elemental:

!Numero = 5

1 GENR X! Numero = NRND

En el ejemplo, EVíews generará la serie XS, debido a que se anexará


el valor de la variable !Numero como parte del nombre de la serie de
datos. A continuación puede encontrarse otro ejemplo ilustrativo de
esta técnica, haciendo uso de variables volátiles de texto 3 :

%Pais = "PERU"

GENR Nl{%Pais} = NRND


GENR PROD_{%Pais} = CONS_{%Pais} + INV_{%Pais} + ......
...... GAST_{%Pais} + X_{%Pais} - M_{%Pais}

!Fecha= 1990
%Nombre = "VAR"
GENR {%Nornbre}{!Fecha}{%Pais} = NRND

3. El signo~~ indica que deberá continuar escribiéndose en la rrúsma línea del


programa. Esta convención será utilizada debido a las restricciones de ancho de
página del libro; sin embargo, la ventana de programa en EViews es considerable-
mente más ancha. Si se dividiera una línea en dos o más al ingresarla efectivamente
en el programa, se produciría un error.
Programación en Econometric Viezvs 169

El segundo párrafo del programa generará la variable NlPERU y


PROD_PERU tomando como base CONS_PERU, INV _PERU,
GAST _PERU, X_PERU y M_PERU. El tercer párrafo, generará la varia-
ble VAR1990PERU. Nótese que las llaves son de uso opcional, pero
colaboran con la legibilidad del programa. Los fragmentos que se su-
man para dar origen al nombre de un objeto mediante esta técnica de-
ben estar colocados en posiciones adyacentes sin espacios de separa-
ción. Obsérvese entonces lo siguiente:

'Esto es legible, pero incorrecto.


!============================================
GENR %Nombre !Fecha %Pais = NRND

'Esto es correcto, aunque menos legible.


!============================================
GENR %Nombre! Fecha%Pais = NRND

'Esta solución es más legible y correcta


'ya que no hay espacios de separación entre
'los pares de llaves }{.
·============================================
GENR {%Nombre} {!Fecha} {%Pais} = NRND

4.5. Variables permanentes: objetos

Las variables permanentes son todas aquellas que se mantienen


en el archivo de trabajo una vez concluida la ejecución del programa,
salvo que sean explícitamente eliminadas mediante el comando D. Es-
tas variables son los objetos conocidos de Econometric Views, entre los
que podrían destacarse, por lo común de su uso, los siguientes: escalares
(SCALAR), vectores (VECTOR), matrices (MATRIX), ecuaciones
(EQUATION) y tablas (TABLE). En esta sección examinaremos los prin-
cipios básicos de su funcionamiento, tomando como referencia el tipo
de objeto SCALAR.
170 Juan Francisco Castro/ Roddy Rivas-Llosa

Supongamos que se desea encontrar el cociente de los índices de


determinación (R-cuadrado) entre dos modelos econométricos simples.
El primero regresionará Y contra e (el intercepto), Xl y X2; mientras que
el segundo, Y contra e, X3 y X4.

Examinemos el siguiente fragmento de programa:

LS Y C Xl X2
!R2_1 = @R2

LS Y C X3 X4
!R2_2 = @R2

!Cociente = !R2_1 1 !R2_2

El valor del cociente está registrado en una variable numérica vo-


látil y, por lo tanto, no puede ser traspasado al usuario por medio de
esta. La comunicación del resultado puede realizarse de dos maneras.
La primera es publicando el cociente en la zona de estado, posiblemen-
te con la instrucción:

1 = ! Cociente

O, en caso de buscarse una presentación más completa en la línea de


estado, usando el comando STATUS UNE:

1 STATUSLINE El cociente es: !Cociente

Esta última aproximación tiene dos inconvenientes: solo puede


mostrarse un número reducido de resultados simultáneamente y, una
vez leídos, el usuario podría verse obligado a escribirlos nuevamente
en caso de necesitarlos como insumo en algún otro cálculo.

La segunda alternativa para ofrecer resultados consiste en regis-


trarlos en un objeto permanente, el cual quedará dentro del archivo de
trabajo. Dicho objeto será accesible por el usuario, pero este deberá saber
de antemano dónde buscarlo (el nombre del objeto, por ejemplo).

Veamos la aplicación de esta técnica mediante un objeto SeA LAR


(un número). El programa anterior luciría del siguiente modo:
Programación en Econometric Views 171

'PRÓLOGO
·================================================
SCALAR Cociente

'CUERPO
·================================================
LS Y C Xl X2
'R2_1 = @R2

LS Y C X3 X4
!R2_2 = @R2

'EPÍLOGO
·================================================
Cociente= !R2_1 1 !R2_2

Al concluir la ejecución de este programa, aparecerá un objeto con


icono[][), que representa el número escalar de nombre Cociente. Note
que en el prólogo se ha declarado la variable permanente Cociente,
precediendo a su nombre la clase a la cual pertenece. Este procedimien-
to indica a EViews que reserve, en el archivo de trabajo, espacio de me-
moria para el objeto. Cabe resaltar que, al asignarle el valor a la variable
permanente, no debe utilizarse el signo de admiración antes del nom-
bre del objeto (por no tratarse de una variable volátil).

Si el usuario (u otro programa) deseara utilizar el valor del objeto


Cociente, bastaría con hacer referencia a él en cualquier fórmula. Por
ejemplo, podría escribirse lo siguiente en la zona de comandos y recibir
una respuesta en la barra de estado:

=(Cociente -1)/(Cociente + 1)

4.6. Bucles

En términos sencillos, un bucle es una porción del programa que


EViews repetirá mientras o hasta que se satisfaga una determinada con-
dición.
172 Juan Francisco Castro 1 Roddy Rivas-Llosa

Existen dos tipos de bucles en EViews: los bucles cerrados y los


bucles abiertos. Los primeros se representan mediante las palabras re-
servadas FOR ... STEP... NEXT mientras que los segundos se indican
mediante las palabras reservadas WHILE ... WEND. Ambas estructuras
comparten la palabra reservada EXITLOOP para abandonar la ejecu-
ción del bucle en medio de su desarrollo.

4.6.1. Bucles cerrados

El tipo más simple de bucle en EViews se denomina cerrado y reci-


be este nombre porque los límites de la repetición se conocen con certe-
za al iniciar la primera repetición. La estructura que gobierna este tipo
de bucles tiene la siguiente sintaxis:
1
• FOR !Indice = Valorinicial TO ValorFinal [STEP In-
•• cremento]
••
••• (Aquí van los comandos que se repetirán

• posiblemente en función de la variable 1 Indice)

••• NEXT ! Indice



En esencia, al encontrarse esta estructura como parte de un pro-
grama, EViews procederá del siguiente modo: tan pronto se alcanza la
línea con el comando FOR, la variable !Indice recibirá como valor el
Valorlnicial y se ejecutarán las líneas de programa que se encuentren
entre las correspondientes a las instrucciones FOR y NEXT. Una vez
que el programa alcance la línea que contiene la instrucción NEXT,
'regresará' a la que contiene el comando FOR correspondiente e
incrementará la variable !Indice en una unidad, salvo que la cláusula
opcional STEP indique un Incremento distinto (que puede ser entero,
decimal, positivo o negativo). Una vez automodificado el valor de la
variable !Indice, se comprobará si excede el límite impuesto por
Valor Final. En caso de superarlo, la ejecución del programa pasará in-
mediatamente a la línea siguiente a la que contiene el comando NEXT
correspondiente a ese bucle.

Cabe resaltar que cuando EViews encuentra una estructura como


esta, verifica primero que el ValorInicial sea compatible con el ValorFinal
Programación en Econometric Views 173

y el incremento del bucle. En caso contrario, pasa por alto toda la estruc-
tura y continúa ejecutando el programa después de la instrucción NEXT.
Pueden darse dos casos en cuanto a esta compatibilidad de valores: si
el Incremento es positivo (recuérdese que 1 es el valor por defecto al no
incluir la cláusula STEP) y el Valor Inicial es mayor que el Valor Final, el
bucle no se ejecutará ni una sola vez; y si el Incremento es negativo y el
Valor Inicial es menor que el Valor Final, el bucle tampoco se ejecutará ni
una sola vez. Independientemente del signo del Incremento, de ser igua-
les el Valorinicial y el Valor Final, el bucle se ejecutará una sola vez.
Aquí un ejemplo sencillo:

'Este programa contará de 10 hasta lOO en la variable


'volátil !Q, en incrementos de una unidad cada vez.
------------------------------------------------------
~-----------------------------------------------------­

FOR !Q = 10 TO 100
NEXT !Q

Este fragmento de programa no hace algo particularmente útil. Lo


único que consigue es asignar a la variable !Q valores desde 10 hasta
100, uno por uno. Tal como corresponde a la sintaxis del comando, este
se inicia con la clave FOR, seguida de la variable índice, un signo de
igualdad y los valores inicial y final que EViews deberá dar a la variable,
separados por la palabra reservada TO.

Un uso mejor dirigido de este tipo de bucles permite regresionar Y


contra X1, X2, ... , X50 de una en una y registrar los R-cuadrado en una
serie llamada R2s para su análisis posterior.

FOR !i =
1 TO 100
LS Y C X! i
R2 S ( ! i) = @R2
NEXT ! i

Note que el objeto R2s debe existir con anticipación y ser una serie
de datos o un vector. La notación Objeto(número) representa un com-
ponente del objeto. En el ejemplo, nos referimos a la observación i-ésima
de la serie de datos llamada R2s.
174 Juan Francisco Castro 1 Roddv Ri\·as-Llosa

Resulta posible colocar los bucles uno dentro de otro. Esta opera-
ción, conocida como anidación, permite disponer simultáneamente de
más de una variable móviL El siguiente ejemplo muestra una estructura
anidada típica:

FOR ti = 1 TO 10
'Punto A
FOR ! j = 1 TO 1 O
'Punto B
FOR !k = 1 TO 10
'Punto C
[
NEXT !k
'Punto D
EXT !j
'Punto E
NEXT ! i

Es sumamente importante prestar atención a la manera correcta


de abrir y cerrar los bucles. Tal como si fueran parejas de paréntesis en
una expresión matemática, las cláusulas FOR. .. NEXT forman capas
sucesivas. El número de comandos NEXT debe ser, por ello, igual al
número de comandos FOR; y el orden de cierre de las variables en los
comandos NEXT deberá ser el inverso al orden de las cláusulas FOR.

El lector puede percatarse de que, en el programa anterior, se han


marcado cinco puntos de referencia (A, B, C, D y E). Siguiendo con la
mirada la dinámica teórica de ejecución de este fragmento de programa,
es fácil notar que el bucle asociado a la variable !i se ejecutará 10 veces
y que, por cada 'vuelta' de este bucle, el bucle de la variable !j se ejecuta-
rá 10 veces. Entonces, el programa pasará 10 veces por el punto A, pero
pasará 10 x 10 veces por el punto B. Análogamente, se deduce que el
punto C será visitado 10 x 10 x 10 veces en total, cada una de ellas con
una combinación distinta de valores de las variables !i, !j y !k hasta
agotar todas las posibles combinaciones.

Veamos a continuación otro ejemplo. El siguiente programa copia


los elementos de la zona triangular superior de la matriz A en la matriz
B. Note la conveniencia de incluir en la parte inicial del programa una
Programación en Econometric Viezus 175

zona que defina variables globales que determinan el comportamiento


del resto del programa. En caso de requerir modificaciones, bastará
cambiar la zona inicial del mismo.

' Inicio del programa: se define una variable detenninante


'para el programa.
1
Dimension = 20
!==============================================

'Se crean los objetos (dependiendo de la variable inicial).


MATRIX( 1 Dimension, 1 Dimension) A= 1
MATRIX( Dimension, !Dimension) B =O
1

'Aquí se podrían modificar los elementos de A y B ...


'Ahora copiamos la zona triangular superior de A en B:

FOR !fila= 1 TO !Dimension


FOR 'columna= !fila TO 'Dimension
B(!fila, !columna) =A('fila, !columna)
NEXT ! columna
NEXT !fila

'Fin del programa.

Una característica particular de este programa es que muestra que


los límites de un bucle anidado pueden depender de la variable índice
de un bucle de mayor jerarquía. Para conseguir el efecto de 'barrido' en
el triángulo superior de la matriz, el bucle asociado a la variable índice
!columna se inicia en el valor !fila, mientras que el bucle externo toma
td'élos los valores de 1 hasta !Dimension. El efecto será que el bucle
interno solo tomará las columnas desde la diagonal principal hasta el
extremo derecho de la matriz en cuestión.

Como se puede apreciar, la anidación den bucles abre la posibili-


dad de barrer un espacio de posibles combinaciones de valores en 9\n;
pero a costa de mayor tiempo de ejecución demandado por las repeti-
ciones. En circunstancias extremas, bucles muy largos podrían llegar a
demandar más tiempo del que se dispone para resolver un problema.
Examine el siguiente bucle:
176 Juan Francisco Castro 1 Roddy Rh·as-Llosa

'Bucle realmente denso.


'==============~=======================================

FOR 1 i = 0 TO 100 STEP 0.00001


FOR !j = OTO 100 STEP 0.00001
FOR 'k= OTO 100 STEP 0.00001
NEXT 1 k
NEXT ! j
NEXT 1 i

Si el bucle asociado a la variable !k se ejecutara por completo en un


minuto, ¿cuánto tomaría ejecutar todo el fragmento del programa? Res-
puesta: poco más de 190 millones de años. Si planea ejecutar este pro-
grama, debe tener en cuenta que para detener la ejecución de un progra-
ma en EViews debe presionarse la tecla Fl.

4.6.2. Bucles abiertos

Este segundo tipo de bucles recibe el nombre de 'abiertos' porque


en su enunciación no se establece con tanta rigidez el número de
iteraciones que ejecutará. Por el contrario, se indica una condición de
repetición, que hará que el bucle continúe repitiéndose mientras que la
condición lógica se cumpla.

Las palabras reservadas de esta estructura funcional son:


WHILE ... WEND, utilizadas de acuerdo con la siguiente sintaxis:

•• WHILE CondicionLogica
•••
•• (Aquí van los comandos que se repetirán)
••
• WEND

La condición lógica puede estar dada por cualquier expresión con-


formada por igualdades o desigualdades, y los conectores lógicos usua-
les (OR, ANO y NOT). De no cumplirse esta condición cuando se alcan-
za la línea correspondiente al WHILE por primera vez, el bucle no se
ejecutará. Comúnmente, los comandos que se encuentran al interior del
Programación en Ecollometric Views 177

bucle abierto modifican algunas variables presentes en la condición


lógica, de modo que si esta condición no se satisface (es decir, si toma el
valor de falsa), el bucle finaliza y se continúa con la ejecución del resto
del programa. Si bien no es indispensable, siempre debe preverse algu-
na 'salida' para este tipo de bucles (los 190 millones de años del ejemplo
previo palidecerían ante el tiempo que tomaría terminar un bucle sin
salida posible).

Examinemos el siguiente ejemplo:

!R2 = O
!Prueba= O

WHILE ( 1 R2<0.5) AND (!Prueba<lOOO)

LS Y C NRND

!R2 = @R2
!Prueba= !Prueba+ 1

WEND

Se puede apreciar que la condición asociada al bucle es doble. La


primera busca que el coeficiente de ajuste sea mayor o igual que 0.5 para
abandonar la repetición; esto significa que EViews seguirá generando
modelos aleatorios hasta que uno de ellos alcance el coeficiente de ajus-
te solicitado. ¿Qué sucede si esto toma mucho tiempo? La segunda con-
dición, conectada mediante una conjunción lógica, establece que tan
pronto se alcancen los mil intentos, se abandone la búsqueda. Para que
esta segunda condición tenga efecto, se usa una variable auxiliar lla-
mada !Prueba, que recoge el número de intentos (repeticiones) efectua-
dos.

4.7. Cláusulas condicionales

Este tipo de cláusulas se utiliza para añadir un grado adicional de


sofisticación e inteligencia a un programa. Con dicho fin, se usan las
palabras reservadas IF, THEN, ELSE y ENDIF. La secuencia se inicia
con la palabra IF, seguida de una condición lógica y la palabra THEN.
De cumplirse esta condición, EViews ejecutará la secuencia de coman-
178 Juan Francisco Castro/ Roddv Ri\·as-Llosa

dos incluida en las líneas siguientes hasta la palabra ENDIF, que cierra
la cláusula condicional. En caso contrario, de no cumplirse la condi-
ción, la ejecución saltará hasta la línea siguiente al ENDIF. La sintaxis
es, entonces, la siguiente:

••• IF CondicionLogica THEN


••
•• (Aquí van los comandos que se ejecutarán
•• si se cumple la condición lógica)
••
1 ENDIF

Alternativamente, de incluirse una línea con la palabra reservada


ELSE, la ejecución saltará a esta línea si la condición no se cumple, en
lugar de ir directamente al final de la estructura lógica .

••• IF CondicionLogica THEN


••• (Aquí van los comandos que se ejecutarán

•••
si se cumple la condición lógica)

••• ELSE

•• (Aquí van los comandos que se ejecutarán


•• si NO se cumple la condición lógica)
•••
• ENDIF

El siguiente ejemplo ayudará a ilustrar el uso de las cláusulas


condicionales:

'Inicio del programa: se desea contar


'cuántos valores positivos y negativos hay
'en una serie de datos cuyo nombre está dado
'en el primer argumento (variable %0).

'=====================================================
Programación en Eco11ometric Vinus 179

'USO:
RUN NombrePrograma NombreSerie

'-----------------------------------------------------
-----------------------------------------------------
'El escalar Pos contendrá el número de
'valores positivos y el escalar Neg el número
'de valores negativos:
SCALAR Pos = O
SCALAR Neg = O

'La función @ROWS aplicada a una serie


'devuelve el número de observaciones en el
'RANGO del archivo, sin importar la muestra (SMPL).

'Se 'barre' el vector contando los valores


'positivos y negativos. Nótese el uso de las
'llaves para denotar el contenido literal
'del texto %0 para llamar a la
'correspondiente variable.

FOR !i=1 to @ROWS({%0})


IF {%0} ( !i) >= 0 THEN
Pos = Pos + 1
ELSE
Neg = Neg + 1
ENDIF
NEXT !i

'---------------------------------------------
---------------------------------------------
'Fin del programa.

4.7.1. Cláusulas condicionales anidadas

Al igual que los bucles, las estructuras condicionales pueden


anidarse unas dentro de otras. Esta témica se utiliza para cubrir más de
dos posibilidades (verdadero/falso) dentro de un problema. Su forma
general se presenta a continuación:
180 Juan Francisco Castro 1 Roddy Ri\·as-Llosa

1 IF CondicionLogical THEN
••
•• (Aquí van los comandos que se ejecutarán
••• si se cumple la condición lógica 1)

••• ELSE
••
•• IF CondicionLogica2 THEN

••
•• (Aquí van los comandos que se ejecutarán
•• si no se cumple la condición lógica 1, pero
•• sí se cumple la condición lógica 2)
••
•• ELSE
••
•• (Aquí van los comandos que se ejecutarán
•• si no se cumple la condición lógica 1 ni la
•• condición lógica 2)
••
•• ENDIF

••
•- ENDIF

En este tipo de estructuras es necesario prestar especial atención a


la enunciación de las condiciones lógicas, puesto que cada nueva con-
dición asume implícitamente el incumplimiento de todas las anterio-
res. Usualmente tal hecho facilita la redacción de las condiciones, como
se puede apreciar en el siguiente caso. Considere un modelo de corte
transversal basado en una encuesta aplicada a 1000 personas, en el que
la variable Ingreso representa el ingreso anual de cada individuo de la
muestra. Supondremos que se desea calcular una nueva variable lla-
mada ImpuestoPagado, correspondiente al monto pagado en impues-
tos, calculado en función del ingreso percibido de acuerdo con la si-
guiente relación:
Programación en Ecmzometric Views 181

Rango de ingreso anual Tasa media de impuesto


(en US$) aplicada

Hasta 5,000 10%


Más de 5,000, hasta 10,000 15%
Más de 10,000, hasta 60,000 20%
Más de 60,000 30%

Existen dos modos de generar una variable de manera condicio-


nal. El primero se basa en la idea de calcular cada observación por
separado, utilizando un bucle para recorrer todas las observaciones
deseadas y aplicando la regla anterior a cada una de ellas.

De este modo, el programa para generar la variable Impuesto Pa-


gado podría ser el siguiente:

'Fijamos la muestra igual al rango.


SMPL @ALL

'Es necesario que una serie exista para


'referirse a uno de sus elementos. Por eso,
'la generamos antes de comenzar el bucle.
GENR ImpuestoPagado=O

FOR li=l to @OBS(Ingreso)


IF Ingreso<=SOOO THEN
'Aquí asignamos el elemento específico de la serie
ImpuestoPagado(!i)=O.lO*Ingreso(!i)
ELSE
IF Ingreso<=lOOOO THEN
ImpuestoPagado(!i)=O.lS*Ingreso(!i)
ELSE
IF Ingreso<=60000 THEN
ImpuestoPagado(!i)=0.20*Ingreso(!i)
ELSE
ImpuestoPagado(!i)=0.30*Ingreso(!i)
ENDIF
ENDIF
ENDIF
NEXT ! i
182 Juan Francisco Castro 1 Roddy Rivas-Llosa

Cabe resaltar la forma en que se han dispuesto las condiciones en


tres cláusulas anidadas. La segunda condición, por ejemplo, es en efec-
to IF (Ingreso>5000) AND (Ingreso<=lOOOO); pero la primera parte de
la conjunción se simplifica debido al efecto producido por la anidación.

Alternativamente, el problema podría resolverse utilizando el co-


mando SMPL .. .IF, tal como se muestra a continuación. El lector podrá
percatarse de que, al no haber anidación de por medio, es necesario
enunciar la condición lógica completa en cada caso. En este ejercicio
particular, la sintaxis del SMPL...IF facilita la lectura del programa y lo
hace más compacto y eficiente. Dicho comando se hace especialmente
recomendable para resolver problemas de generación de variables o
cálculo de agregados condicionales (suma, promedio, varianza, etc.).
En otra clase de problemas, sin embargo, el enfoque basado en condi-
cionales anidados es indispensable.

SMPL @ALL IF (Ingreso<=5000)


GENR IrnpuestoPagado=O.lO*Ingreso

SMPL @ALL IF (Ingreso>SOOO) ANO (Ingreso<=lOOOO)


GENR IrnpuestoPagado=O.lS*Ingreso

SMPL @ALL IF (Ingreso>lOOOO) ANO (Ingreso<=60000)


GENR IrnpuestoPagado=0.20*Ingreso

SMPL @ALL IF (Ingreso>60000)


GENR IrnpuestoPagado=0.30*Ingreso

SMPL @ALL

4.7.2. Rompimiento de bucles con cláusulas condicionales

En ocasiones, el programador puede requerir que EViews termine


un bucle antes de cumplirse las condiciones normales de terminación.
Tal rompimiento es particularmente aplicable en el caso de los bucles
cerrados, donde la condición de repetición es de conteo simple. Para
estos casos, el lenguaje de EViews incluye el comando EXITLOOP, que al
ser encontrado hace que el flujo de ejecución pase directamente a la
primera línea fuera del bucle que contiene la instrucción.
Programación en Econometric Views 183

Veamos un ejemplo. Suponga que se tiene un archivo con infor-


mación de un modelo de series de tiempo. Se desea realizar regresio-
nes del modelo Y versus X1, X2, ... , XS, tomando primero como muestra
el intervalo comprendido entre los años 1940 y 1960; posteriormente,
el intervalo entre 1940 y 1961, y así sucesivamente, mediante incre-
mentos de una unidad en el año terminal de cada prueba hasta llegar
a 1990. El objetivo del ejercicio es encontrar cuál es el primero de estos
intervalos en el que el coeficiente de ajuste del modelo (calculado con
la función @R2) es mayor que 0.5. Se podría utilizar el siguiente pro-
grama:

'Definirnos los extremos de la muestra de prueba.


!Inicio=l940
!Finalinicial=l960
!FinalTerminal=l990
1 R2Critico=O.S

'Asignarnos el resultado del programa provisionalmente.


SCALAR Resultado=O

'El bucle en versión cerrada:


FOR !i=!Finalinicial TO !FinalTerminal
SMPL !Inicio !i
LS Y C Xl X2 X3 X4 XS
IF @R2>!R2Critico THEN
'Si el R2 es mayor que el crítico (0.5), entonces
'se guarda el resultado y el bucle termina
Resultado=!i
EXITLOOP
ENDIF
NEXT !i

'Si el bucle termina aquí, el resultado será cero.

Como un ejercicio adicional, usted podría realizar este programa


en su versión equivalente utilizando un bucle abierto.
184 Juan Francisco Castro 1 Roddy Rivas-Llosa

5. Objetos en EViews

5.1. Comentarios previos

5.1.1. Declaración, asignación y eliminación de objetos

Antes de comenzar a examinar el funcionamiento de cada una de


las clases de objetos disponibles en EViews, conviene precisar cuál es la
diferencia entre dos operaciones relativas a los objetos: la declaración y
la asignación.

La declaración de un objeto consiste en darle existencia a un nom-


bre asociado a una clase; es decir, crear un objeto en sí. En el ejemplo
siguiente, el programador crea un objeto escalar llamado X.

1 SCALAR X

La asignación, por su parte, consiste en la i..rüroducción de conte-


nido en un objeto (se le asigna un valor), tal como se muest;a a conti-
nuación:

1 X = O

La confusión suele surgir debido a que ambas operaciones pue-


den realizarse simultáneamente en un solo comando, tal como el si-
guiente:

1 SCALAR X = O

Es necesario aclarar que la declaración de un objeto debe hacerse


una sola vez dentro de un programa, preferentemente en la sección del
prólogo del mismo. Econometric Views podría desestabilizarse interna-
mente si la declaración de un objeto de gran volumen (tal como una
matriz o un modelo) se repitiera más de una vez.

Por ejemplo, al incluir en un programa el siguiente fragmento, el


autor cometería el error de declarar la variable V cien veces, pues la
declaración-asignación se localiza dentro de un bucle:
Programación en Econometric Views 185

1
1
•• FOR 1 i
1 TO 100 =
•• S CALAR V = ! i A 2 - 1o * 1 i
•• NEXT 1 i

•••
La presentación correcta en este caso será:

•• 'La declaración se debe ejecutar una sola vez .


•• SCALAR V = O
••
••
•• FOR !i = 1 TO 100
•• 'La asignación puede ejecutarse muchas veces .
•• V= !i A 2- 10 * !i
: NEXT ! i

•••
1

Adicionalmente, es necesario puntualizar que todo objeto que se


declare en EViews permanecerá dentro del archivo de trabajo hasta que
se elimine. El comando D lleva a cabo la tarea de eliminación de los
objetos cuyos nombres se adjuntan como argumentos separados por
espacios en blanco.

En ocasiones, es necesario saber si un objeto existe o no dentro de


un archivo de trabajo. Con este fin, se dispone de la función @ISOBJECT()
que toma como único parámetro el nombre del objeto en cuestión entre
comillas (es decir, como un texto). El resultado será 1 si el objeto existe y
O en caso contrario. Cabe destacar que EViews considera al número 1
como equivalente a la condición de verdadero dentro de una cláusula
lógica, lo que facilita el uso de @ISOBJECT() dentro de estructuras con-
dicionales.

Al respecto, considere el siguiente ejemplo. Se desea crear 10


escalares X1, X2, ... , X10, pero no se tiene certeza acerca de si existen o
no objetos con ese mismo nombre. En caso de que hubiera una serie de
datos llamada X1, el fragmento posterior se detendría con un error,
18ó Juan Francisco Castro 1 Roddy Rivas-Llosa

debido a que no es posible crear un objeto de una clase distinta con el


mismo nombre de otro que existe previamente.

'Primera versión: errónea.

FOR !i = 1 TO 10
SCALAR X r i = ! i
NEXT ! i

Por otro lado, tampoco sería sensato intentar borrar los objetos en
cuestión directamente, porque en caso de no existir el programa genera-
ría un error.

'Segunda versión: errónea.

FOR !i = 1 TO 10
D X! i
SCALAR X!i = !i
NEXT ! i

La solución correcta consiste en que el programa pregunte prime-


ro si existe o no el objeto, de tal manera que lo borre solamente en caso de
que esté presente. Para ello, puede utilizarse la función @STR(número),
que convierte un número en el equivalente en formato de texto (para que
luego pueda ser concatenado con otra cadena mediante el uso del ope-
rador+). Un programa para evitar los errores previos luciría como si-
gue:

'Tercera versión: correcta.

FOR !i = 1 TO 10
IF @ISOBJECT ("X" +@STR ( ! i) ) THEN
D X! i
ENDIF
SCALAR X!i = !i
NEXT ! i

5.1.2.Uso y abuso de los objetos indexados

Suele llamarse objetos indexados a aquellos que, teniendo como


base un nombre común, utilizan variables de reemplazo textual para
Programación en Econometric Views 187

posnumerar dicho nombre. Un clásico ejemplo de este tipo de variables


se encuentra a continuación:

'Inicio del programa.

1Suma =O
SCALAR Respuesta

FOR 1 i = 1 TO 100
SCALAR V 1 i = 1 i + 10
'Suma= !Suma+ V!i
NEXT ! i

Respuesta= !Suma

'Fin del programa.

Este programa declara efectivamente una sola vez cada una de las
cien variables de la forma Vl, V2, ... , VlOO que se crearán como resulta-
do de su ejecución, pero al término del programa se tendrá el archivo de
trabajo con cien objetos V!i nuevos. Cabe destacar que el propósito del
programa no es generar las variables en cuestión, sino sumar sus valo-
res y devolver el resultado en el objeto escalar Respuesta. Podemos pre-
guntamos, ¿es necesario generar los escalares V!i para acumular sus
valores en la variable !Suma? Evidentemente no. Una versión alternati-
va del programa podría acumular directamente el valor de V!i sin pa-
sarlo a una variable permanente (los paréntesis destacan el valor de
V!i):

'Inicio del programa.

!Suma = O
SCALAR Respuesta

FOR !i=1 TO 100


!Suma= !Suma+ ( !i + 10)
NEXT ! i

Respuesta= !Suma

'Fin del programa.


188 Juan Francisco Castro 1 Roddy RiYas-Llosa

Cada vez que se sienta inclinado a utilizar estructuras indexadas


considere lo siguiente:

• Los objetos indexados funcionan como objetos independientes y,


por lo tanto, ocupan memoria de la computadora.

• De no ser eliminados, los objetos creados de este modo poblarán


rápidamente su archivo de trabajo, haciéndolo menos legible y
ocupando más espacio al grabarlo.

• Siempre es posible reemplazar el uso de escalares indexados por


variables volátiles, vectores, matrices o series en el archivo de tra-
bajo.

• Casi siempre es posible realizar una tarea haciendo uso de una


sola variable volátil (como en el ejemplo), cuyo valor es reemplaza-
do una vez que esta ya no se necesita.

5.1.3. Vistas, procedimientos, métodos y datos propios

EViews se basa en un enfoque orientado a objetos para la gestión


de información. Esto significa que los tipos de datos que puede enten-
der el programa se encuentran claramente categorizados en clases. Una
clase es una familia de objetos del mismo tipo, con características simi-
lares. Así, los vectores forman una clase distinta a los gráficos y las
series de datos. La información contenida en clases diferentes no es
directamente intercambiable y, por lo general, tampoco es posible ope-
rar entre sí objetos de clases distintas (por ejemplo, no será posible su-
mar un vector y una serie de datos, aunque tengan la misma dimen-
sión).

Si bien la orientación a objetos exige prestar atención a ciertas


restricciones de operación, tiene muchas ventajas. Una de ellas es que
en lugar de definir funciones generales para operar y modificar objetos
de distintos tipos, cada clase de objetos está programada internamente
y sabe cómo operarse a sí misma. En términos sencillos, en lugar de
indicarle a EViews que elabore una regresión tomando como referencia
un objeto de clase 'ecuación', es posible ordenarle al mismo objeto que
se regresione. Asimismo, será posible pedir que el objeto se presente
Programación en Econometric Views 189

como un gráfico de errores de estimación o que calcule y muestre su


coeficiente de ajuste. Como veremos a lo largo de las secciones siguien-
tes, cada clase de objetos dispone de comandos para ver y calcular
resultados útiles. Por regla general, todos estos comandos se indicarán
añadiéndolos después de un punto tras el nombre del objeto al que
hacen referencia, es decir:

NombreObjeto.Comando

Los autores del programa Econometric Views han introducido en él


su propia nomenclatura para referirse a los tipos de comandos que el
usuario puede dirigir a un objeto. Así, en un plano abstracto (sin impor-
tar de qué clase de objeto se esté hablando), existen cuatro tipos de
comandos aplicables a un objeto: los métodos, las vistas, los procedi-
mientos y los datos propios.

• Una vista es un tipo de comando que altera la forma en que se


presenta en la pantalla el objeto que recibe la instrucción (así, po-
dría mostrar una tabla en su expresión gráfica equivalente). Las
vistas no alteran la naturaleza del objeto subyacente (no convier-
ten un gráfico en tabla, o viceversa), solo cambian la manera en
que este se exhibe. Por ejemplo, si bien una serie de datos se pre-
senta por defecto en hoja de datos (spreadsheet), también tiene dis-
ponible la vista 'histograma y estadísticas básicas' (hist). En el
gráfico correspondiente a esta vista se presenta una tabla flotante
que contiene, entre otros valores, el estadístico de normalidad de
Jarque-Bera. No es posible, sin embargo, acceder a este valor ya
que las vistas no brindan una forma directa de recuperar la infor-
mación que se presenta en ellas a través de comandos.

• Los procedimientos asociados a una clase llevan a cabo tareas


auxiliares y, muchas veces, derivan en la generación de un nuevo
objeto o subobjeto. Un gráfico, por ejemplo, dispone de procedi-
mientos para cambiar el tipo de línea utilizado en él y para añadir
texto flotante en la ventana del gráfico. Asimismo, una ecuación
estimada (objeto de clase EQUATION) tiene procedimientos para
crear una serie de datos a partir de los errores de estimación de la
regresión o crear una serie de datos estimada a partir de los coefi-
cientes calculados.
190 Juan Francisco Castro 1 Roddy Ri\·as-Llosa

• Además de los procedimientos, algunas clases de objetos cuen-


tan con métodos. Podría decirse que estos comandos se utili-
zan para dar funcionalidad fundamental a dichos objetos. Tal
parece que los creadores de EViews consideran que los métodos
son aquellos procedimientos que se pueden utilizar para llenar
de información un objeto por primera vez. Un método asociado
al objeto ecuación es la orden de memorizar un modelo y reali-
zar su estimación a través de una técnica específica. ¿Tendría
alguna utilidad el objeto ecuación si no pudiera realizar regre-
siones? Parece difícil imaginarlo. El carácter esencial de este
procedimiento lo convierte en un método. Veamos otro caso: un
gráfico tiene tantos métodos como formas puede adoptar (ba-
rras, líneas, pie, etc.). Estos comandos se utilizan para invocar
el objeto por primera vez y también para modificar el resultado
esencial del gráfico.

• Finalmente, todo objeto contiene datos propios. Una matriz, por


ejemplo, tiene como datos propios sus elementos. Adicionalmente,
este tipo de componentes puede corresponder a propiedades ma-
temáticas o estadísticas asociadas con el objeto. Ejemplifiquemos
lo anterior: las ecuaciones estimadas poseen como datos propios
los valores de los parámetros estimados, los distintos coeficien-
tes de ajuste de la regresión, el resultado de las pruebas estadís-
ticas de significancia de regresares, etc.

5.2. Escalares (SCALAR- CID)

Los objetos escalares son posiblemente la clase más simple de


objetos en EViews, pues solo contienen un valor numérico y no dispo-
nen de vistas, métodos ni procedimientos. Comúnmente este tipo de
variable permanente se utiliza para transferir la respuesta de un pro-
grama al usuario. La única forma de interactuar con un escalar es
asignarle un valor o recogerlo. Al hacer doble die sobre un objeto
escalar se mostrará su valor en la barra de estado.

En las secciones precedentes se han presentado variados ejem-


plos que ilustran el uso de este tipo de objetos.
Programación en Econometric Views 191

5.3. Vectores y matrices (VECTOR- [J[], MATRIX- lillill], SYM - ~

Como todo objeto en EViews, los vectores y matrices deben declarar-


se antes de ser utilizados. Sin embargo, a diferencia de los escalares, es
necesario adjuntar las dimensiones de la matriz o vector como parte de
su declaración. Para ello puede utilizarse una de las siguientes sintaxis:

Sintaxis MATRIX
MATRIX

Como se puede observar, en ambos casos la primera forma es pu-


ramente declarativa, no asigna valor al objeto. La segunda forma mez-
cla tanto declaración como asignación, llenando el espacio dentro del
objeto con un valor escalar (es decir, creando un vector o matriz cons-
tante). La tercera también combina declaración y asignación, pero en
este caso se asigna una matriz o vector al contenido del objeto. Cabe
destacar que en esta última forma es innecesario especificar las dimen-
siones del objeto declarado, ya que estas se toman del objeto fuente de la
asignación.
192 Juan Francisco Castro 1 Roddy Ri\·as-Llosa

Veamos algunos ejemplos de declaraciones y asignaciones de


matrices y vectores:

'Declaración.
·===========================================
MATRIX(3,3) Cuadrada
VECTOR(S) Primero

'Declaración y asignación constante.


·===========================================
MATRIX(2,5) Rectangular= O
VECTOR(lO) Segundo= 1

'Declaración y asignación de objeto similar


·===========================================
MATRIX Nueva = Cuadrada
VECTOR Tercero = Segundo

'Asignación de elementos
·===========================================
'Aquí se asigna el elemento que se encuentra
'en el cruce de la primera fila y primera
'columna:
Cuadrada(!,!)= 5

'Aquí se define el elemento de la segunda


'columna en la primera fila:
Cuadrada(l,2) = 3

'El segundo elemento del vector:


Primero ( 2 ) = 7

'El tercer elemento del vector se asigna


'tomando el valor de un elemento de la
'matriz:
Segundo(3) = Cuadrada(l,2)

Una clase especial de matriz se denomina SYM y corresponde a


las matrices simétricas. Algunas funciones de EViews requieren que se
Programación en Econometric Views 193

utilice un objeto tipo SYM como argumento. Los objetos de esta clase
se operan con mayor velocidad y ocupan menos memoria que sus
correspondientes versiones de la clase MATRIX, debido a que EViews
toma en cuenta la redundancia de los elementos alrededor de la dia-
gonal principal. Estos objetos se declaran mediante la siguiente sin-
taxis:

SYM(Número de filas o columnas) Nombre

Tal como sucede con otros objetos, es posible unir la declaración y


asignación de matrices simétricas en un solo comando. Sin embargo, se
debe considerar que, debido a la naturaleza de los objetos SYM, sola-
mente es posible asignarles un escalar o una matriz cuadrada. En este
último caso, EViews siempre tomará el triángulo inferior de la matriz
asignada y lo reproducirá en el SYM.

5.3.1. Vistas y procedimientos útiles

Cuadro3.1

Vistas y procedimientos comúnmente utilizados


de la clase vector

BAR Gráfico de barras de los elementos del vector.

FILL{Opción) Valor!, Valor2, Llena un vector con los elementos indicados .


... , Valom • Las posibles opciones son:
1: Indica al programa que repita la secuencia
de valores hasta que se llene completamente el
objeto.
o=número de elemento: Indica al programa
que llene el vector a partir del elemento indicado.
Nota: Ambas opciones pueden utilizarse si-
multáneamente si son separadas por una
coma: (l, o= ... ).
Ejemplo: nombrevector. FILL(o=3,l) -1,2,-3
Asignará la secuencia de valores -1,2,-3,-1,2 ...
a los elementos del vector nombrevector hasta
llenarlo, a partir de su tercer elemento.

LABEL Muestra o cambia la etiqueta (descripción larga)


LABEL Texto del objeto.
194 Juan Francisco Castro 1 Roddy Ri\·as-Llosa

Ejemplo: nombreYector.LABEL Datos de con-


sumo
Asigna la etiqueta Datos de consumo al vector
nombrevector.

UNE Gráfico de líneas de los elementos del vector.

SHEET Hoja de datos con los elementos del vector.

STATS Hoja de estadísticas básicas del vector (no ge-


nera histograma).

Cuadro 3.2

Vistas y procedimientos comúnmente


utilizados de las clases Matrix y SYM

BAR Gráfico de barras de los elementos de la matriz.

COR Hoja de correlaciones por colunmas.

cov Hoja de covarianzas por colunmas.

FILL(Opción) Valor!, Llena una matriz con los elementos indica-


Valor2, ... , Valor n dos (por defecto, el llenado se realiza por co-
lunmas).
* Las posibles opciones son:
1: Indica al programa que repita la secuencia
de valores hasta que se llene completamente el
objeto.
o=número de elemento: Indica al programa
que llene la matriz a partir del elemento indi-
cado.
b=r: Indica al programa que llene la matriz
por filas.
Nota: Las opciones pueden utilizarse simul-
táneamente si es que son separadas mediante
comas, tal como: (1, o= ... ).
Ejemplo: nombrematriz.FILL(b=r, o=5,1) 2,
3,-1
Asignará la secuencia de valores 2,3,-1,2,3 ... a
los elementos de la matriz nombrematriz por
filas hasta llenarla, comenzando a partir del
quinto elemento de la primera fila.
Programación en Econometric Viti('S 195

LABEL Muestra o cambia la etiqueta (descripción lar-


LABEL Texto ga) del objeto.

LINE Gráfico de líneas de los elementos de la ma-


triz. Muestra uno o múltiples gráficos de lí-
neas de cada colunma por el índice de filas.

SHEET Hoja de datos con los elementos de la matriz

STATS Hoja de estadísticas básicas de las colunmas


de la matriz (no genera histograma).

5.3.2. Funciones y comandos básicos vinculados a matrices y


vectores

El uso de matrices en EViews se enriquece notablemente gracias a


la disponibilidad de una amplia gama de funciones asociadas a esta
clase de objetos. A continuación se presenta una lista con las principa-
les de estas funciones.

Cuadro3.3

Funciones comúnmente utilizadas


para operar matrices o extraer información

@CHOLESKY(Sym) Calcula la matriz triangular inferior L, tal que


L L" resulta igual a la matriz SYM original.

@COL UMNS(Matriz) Devuelve el número de colunmas de la matriz.

COLPLACE(Matriz, Vector, Coloca un vector en la colunma indicada de


columna) una matriz.
Ejemplo: COLPLACE(matrizl,vectordatos,3)
Coloca el vector vectordatos en la tercera co-
lunma de la matriz matrizl.

@COR(Vector/Seriel, Calcula la correlación entre dos vectores o


Vector/Serie2) series de datos.
Ejemplo: SCALAR resultado= @COR(vl,v2)
Asigna al escalar resultado la correlación entre
el vector vl y el vector v2.
196 Juan Francisco Castro/ Roddv Ri\·as-Llosa

@COR(Matriz/Grupo) Calcula la matriz de correlaciones (5Y:tv1) entre


las columnas de la matriz o series del grupo.

@COV(Vector/Seriel, Calcula la co\·arianza entre dos \·ectores o


Vector/Serie2) series de datos.
Ejemplo: SCALAR respuesta= @COR(d,v2)
Asigna al escalar respuesta la covarianza en-
tre el vector d .v el vector \·2 .

@COV(Matriz/Grupo) Calcula la matriz de conrianzas (SYM) entre


las columnas de la matriz o series del grupo.

@DET(Matriz) Calcula el determinante de una matriz cua-


drada.

@DOT(Vectorl, Vector2) Calcula el producto interno de dos vectores.

@EIGENVALUES(Sym) Devuelve un vector con los valores propios de


la matriz.

@EIGENVECTORS(Sym) Devuelve una matriz cuadrada con los vectores


propios de la matriz dada.

@INNER(Matriz) Devuelve el producto interno de la matriz en


un objeto de clase SYM (si la matriz es M,
devuelve M'M).
Ejemplo: SYM sym1 = @INNER(Matriz2)
MATRIX prueba= ®INNER(Matriz3)

@INNER(Vectorl, Vector2) Devuelve el producto interno de dos vectores.


Ejemplo: SCALAR producto=@INNER
(vecl,vec2)

@INVERSE(Matriz) Calcula la inversa de una matriz cuadrada no


singular.

@ISSINGULAR(Matriz) Devuelve 1 si la matriz cuadrada en cuestión


es singular, Ode otro modo.
Nota: Recuerde que 1 significa verdadero den-
tro d~ una cláusula condicional y O (equiva-
lente a NOT 1) representa el valor falso.

@KRONECKER(Matrizl, Devuelve el producto de Kronecker de dos


Matriz2) matrices.

©MAX( ... ) Calcula el máximo valor de los elementos de


la matriz, vector o serie.
Programación en Econometric Vic¡¡•s l9í

@MEAN( ... ) Calcula el \·alor promedio de los elementos de


la matriz, \·ector o serie.

©MIN( ... ) Calcula el mínimo valor de los elementos de la


matriz, vector o serie.

©OBS( ... ) Devueh·e el número de elementos de una ma-


triz, \·ector o serie de da tos.

@RANK(Matriz) Calcula el rango de la matriz.

@ROWS(Matriz) Devueh·e el número de filas de la matriz. Si


esta función se aplica a grupos o series, de-
vuelve el número de observaciones del rango
del archivo de trabajo.
Nota: Es una buena práctica utilizar
@ROWS(Resid) para determinar el número de
observaciones del archivo de trabajo.

@SOLVESYSTEM(Matriz, Calcula y devuelve el vector X que satisface


Vector) la ecuación lineal Matriz* X= Vector.

©SQR(Matriz) Devuelve una matriz que contiene las raíces


cuadradas de cada elemento de la matriz ori-
ginal.

@SUM( ... ) Calcula la sumatoria de los elementos de la


matriz, vector o serie de datos.

@SUMSQ( ... ) Calcula la surnatoria de los cuadrados de los


elementos de la matriz, vector o serie.

@STDEV( ... ) Calcula la desviación estándar de los elemen-


tos de una matriz, vector o serie.

TABLE Convierte una matriz en tabla.

@TRACE(Matriz) Devuelve un valor escalar con la traza (suma


de los elementos en la diagonal principal) de la
matriz.

©TRANSPOSE(Matriz/ Devuelve, en el objeto indicado, la matriz o


Vector) vector transpuesto.

@VAR( ... ) Calcula la varianza de los elementos de una


matriz, vector o serie.
198 Juan Francisco Castro 1 Roddy Rivas-Llosa

Cuadro3.4

Funciones y comandos comúnmente utilizados para convertir o


crear matrices y vectores

@CONVERT(Serie/Grupol Crea una matriz o \·ector con los datos de un


grupo o serie.
Ejemplo: VECTOR d =@CONVERT(seriel)
MATRIX ml =@CO!\'\'ERT(grupol)

©EXPLODE(Sym) Crea una matriz cuadrada idéntica al Sym


indicado.

@lDENTITY(Dimensión) Crea una matriz identidad de traza igual a la


dimensión.
Ejemplo: MATRIX il = @IDENTITY(4)
Crea una matriz identidad il de dimensión (4
X 4).

©IMPLODE(Matriz) Crea un Sym a partir de la triángular inferior


de la matriz dada como argumento.

@FILLEDMATRIX(Filas, Crea una matriz constante de dimensión


Cols, Valor) (Filas x Cols) llena del valor indicado.

©FILLEDVECfOR Crea un vector constante de dimensión


(NumElem, Valor) NumElem lleno del valor indicado.

MTOS(Matriz!Vector, Convierte la matriz o vector en un grupo o


Grupo/Serie) serie de datos (dicha serie o grupo será creada
si es que no ha sido declarada con anticipa-
ción).
Nota: Hay que tener en cuenta que el vector o
matriz deberá ser del mismo tamaño que la
muestra relevante, ya que la serie o grupo será
llenada según esta.

©MAKEDIAGONAL Crea una matriz cuadrada cuya n-ésima día-


(Vector, entero n) gonal hacia la derecha, a partir de su diagonal
principal, contiene los elementos del vector
dado.
Nota: Si no se proporciona un valor para el
entero n, o si el valor de n es igual a cero,
significa que se está haciendo referencia a la
diagonal principaL
Programación en Ecorzometric Views 199

STOM(Grupo/Serie, Com·ierte un grupo o serie de datos en una


Matriz/Vector) matriz o vector.
Nota: Si alguna observación tmiera el valor NA,
dicha irúormación será omitida para el vector
(en el caso de un grupo, dicha obser;ación será
omitida en la matriz para todas las series).

STOMNA(Grupo/Serie, A diferencia del comando STOM, este coman-


Matriz/Vector) do sí considera v traslada los valores NA.
®VEC(Matriz) Vectoriza una matriz a partir de sus colum-
nas, puestas una encima de la otra.

@VECH(Matriz) Vectoriza la triangular inferior de una matriz,


colocando sus elementos uno encima de otro
colurrma por colurrma.

Cuadro3.5

Funciones comúnmente utilizadas para extraer elementos de matrices

@COLUMNEXTRACT Extrae un vector a partir de una colurrma.


(Matriz, col) Ejemplo: vl = @COLUMNEXTRACT(m1,3)
Asigna al vector vllas observaciones correspon-
dientes de la tercera colurrma de la matriz ml.

@GETMAINDIAGONAL Crea un vector con los elementos de la diago-


(Matriz) na! principal de una matriz cuadrada.

@ROWEXTRACT Extrae el vector fila (ROWVECTOR) indica-


(Matriz, Fila) do como argumento de la matriz.
Ejemplo: ROWVECTORr=®ROWEXTRACT(a, 7)
Crea un vector fila llamado r, el cual contendrá la
séptima fila correspondiente a la matriz a.

@ROWPLACE(Matriz, Coloca un vector fila (ROWVECTOR) en la


VectorFila, Fila) fila indicada de una matriz dada como argu-
mento.
Nota: El número de colurrmas de la matriz y el
vector deben coincidir.

@SUBEXTRACT Extrae una submatriz de la matriz dada, a


(Matriz, fl,cl,f2,c2) partir de la posición (fl, el) hasta el final de la
matriz o, de manera opcional, solo hasta la
posición (f2, c2).
200 Juan Francisco Castro/ Rodch Ri\·as-Llosa

Cuadro 3.6

Comandos comúnmente utilizados para


llenar matrices con números aleatorios

RCHISQ(Matriz, Utiliza una distribución Chi-cuadrado.


Grados de libertad)

RNDINT(Matriz, Límite) Utiliza números enteros w1iformemente dis-


tribuidos entre Oy Límite (inclusive).

RFDIST(Matriz, GLl, GL2) Utiliza una distribución F.

RNORM(Matriz) o Utiliza una distribución Normal estándar


NRND(Matriz) (media cero y Yarianza unitaria).

RTDIST(Matriz, Utiliza una distribución T de Student.


Grados de libertad)

RUNIF(Matriz, Limitelnf, Utiliza una distribución Uniforme.


LimiteSup)

Veamos un ejemplo sencillo de algunas de estas funciones:

'Declaramos una matriz M de (5x5).


MATRIX (5,5) M

'La llenamos con valores aleatorios normales.


RNORM(M)

'Copiamos el triángulo inferior en una


'matriz simétrica llamada S.
SYM S =M

'Asignamos las raíces características de la


'matriz simétrica S en el vector R
'(implícitamente dimensionado).
VECTOR R = @EIGENVALUES(S)

'Si la matriz M no es singular, calculamos su


'inversa en la matriz M_Inversa.
Programación en Economctric FiciL'S 201

IF NOT @ISSINGUL.:;R (H) THEN


HATRIX H_Inversa = @INVERSE (H)
ENDIF

'Convertimos las columnas de la matriz H en


'un vector __V y luego en una serie X.
SHPL 1 25
VECTOR __V = @VEC (H)
HTOS( __V,X)

'Eliminamos del archivo el vector auxiliar.


D __ V

Finalmente, cabe resaltar que EViews permite la aplicación de la


mayoría de las funciones incorporadas sobre un vector o matriz, dando
como resultado un objeto del mismo tipo con la transformación aplica-
da elemento por elemento. Así, si se tiene una matriz M, es posible
calcular una nueva matriz M_Log cuyos elementos sean los logaritmos
naturales de los elementos de M. Este procedimiento puede llevarse a
cabo mediante un comando como el siguiente:

1 MATRIX M_Log = LOG (M)

5.4. Series de datos (SERIES -0


En el capítulo introductorio nos referimos a las series de datos a
través del comando Genr, destinado a generar series a través de fórmu-
las. En la presente sección se abordará esta clase de objetos con más
detenimiento.

Iniciaremos el examen de los objetos tipo SERIES, contrastándolos


con otra clase de objetos aparentemente muy similares: los vectores. En
la vista 'hoja de datos', las series y los vectores se distinguen por la
columna fija a la izquierda de cada valor: en las series se muestra el
identificador de la observación, mientras que en los vectores se listan
los números ordinales de cada componente. Más allá de estas distincio-
nes estéticas, es de central importancia tener presente las disparidades
esenciales entre una y otra clase al momento de elegir cuál de ellas
utilizar. A continuación se resumen sus principales diferencias.
202 Juan Francisco Castro/ RodLh Ri\·as-Uosa

Cuadro3.7

Principales diferencias entre series y vectores

Operatividad Series de datos Vectores de datos

Tamaño Correspondiente al rango Tantos elementos como el usua-


del archi\·o de trabajo (pue- rio indique al declararlo (puede
de ser modificado median- ser modificado a tra\·és de una
te el comando Expand). redeclaración).

Criterio de Sus datos pueden orde- Mantienen su orden inicial, in-


ordenación narse mediante el coman- dependientemente del comando
do Sort, de acuerdo con el Sort.
criterio establecido.

Ingreso de datos Manualmente, mediante el Manualmente o mediante el pro-


comando Genr o el proce- cedimiento FILL.
dimiento FILL.

Vista histograma Sí No

Utilizable en
regresiones Sí No

5.4.1. Vistas y procedimientos útiles

Cuadro3.8

Vistas y procedimientos usuales de la clase SERIES

BAR Gráfico de barras de los elementos de la serie.

CDFPLOT Distribución empírica acumulada de los da-


tos de la serie.

CORREL Correlograma de la serie.

FREQ Presenta una tabla de frecuencias de los datos


de la serie.

msT Histograma y estadísticas básicas.


Programación en Eco110mctric Vicws 203

LABEL ~fuestra o cambia la etiqueta (descripción


LABEL Texto larga) del objeto.

UNE Gráfico de líneas de los elementos de la serie.

SHEET Hoja de datos con los elementos de la serie.

STATS La misma infonnación que la vista HIST.

UROOT Muestra los resultados del test de Dickey-Fuller


aumentado o el test de Phillips-Perron sobre la
hipótesis de presencia de raíz tm.itaria.

5.4.2. Notas sobre el acceso a los elementos de una serie

Al tratar el comando Genr se vio que este actúa sobre el ámbito de


la muestra actual, facilitando la construcción de series completas a par-
tir de funciones o transformaciones sobre otras series preexistentes. Sin
embargo, al programar, en ocasiones es necesario acceder, uno por uno,
a los elementos individuales de una serie (imagine, por ejemplo, un
bucle que barra una serie evaluando cada elemento por separado). En
este sentido, cabe recordar que en EVíews es posible recuperar o asignar
un valor a un elemento específico de una serie de datos, como si fuera
un vector, utilizando la notación de paréntesis:

N ombreSerie(N umObservacion)

Esta técnica funcionará sin importar qué clase de frecuencia (anual,


diaria, sin fecha, etc.) se haya utilizado. EViews siempre indexará una
observación según su ordinal dentro del rango del archivo. Así, X(l)
corresponderá al valor de la primera observación de la serie X dentro
del rango del archivo (sin importar dónde se haya fijado la muestra de
trabajo). ¿Debemos entender, entonces, que la nomenclatura X(l) siem-
pre se referirá al valor de una observación de la serie X? La respuesta es
que no siempre.

La nomenclatura anterior puede ser interpretada por el programa


de formas distintas, según el ámbito del comando que contiene la expre-
sión. Esto se debe a la existencia de otra nomenclatura idéntica, utiliza-
da para referirse a las series adelantadas o rezagadas, cuya forma es la
siguiente:
204 Juan Francisco Castro 1 Rodd\· Ri\·as-Llosa

N ombreSerie(N umAdelanto ó -N umRezago)

Al referirse a la serie X(-2), por ejemplo, EViews construye en su


memoria una serie nueva a partir de las observaciones de X, todas ellas
rezagadas dos períodos. Así, la primera observación de la serie X origi-
nal quedará en la tercera posición de X(-2); y la antepenúltima observa-
ción de X, en la última ubicación de X(-2). Adicionalmente, las dos
primeras posiciones de la nueva serie se llenarán, por defecto, con el
valor especial NA (sin información), y las dos últimas observaciones de
la serie X se perderán.

A modo de síntesis, considere el siguiente fragmento de programa:

GENR X = NRND
GENR Yl = O
GENR Y2 = O

!i = X(2)

Yl = X(2)
Y2 = !i

¿Serán idénticas entre sí las series Yl e Y2? La respuesta, por cier-


to, es que no. El comando central del programa asigna una variable
numérica !i. Como EViews no puede asignar una serie completa a una
variable numérica, toma la segunda observación de la serie X. El co-
mando siguiente, sin embargo, solicita asignar un valor a una serie
completa (Yl). En este caso, como EViews sí puede hacerlo, en lugar de
tomar la segunda observación de X genera una nueva serie X adelanta-
da dos períodos (es decir, con sus dos últimas observaciones sin infor-
mación) y la asigna en Yl. En contraste, Y2 será igual a una constante a
lo largo de todas sus observaciones.

5.5. Ecuaciones (EQUATION -1 =1>

Como se anticipó en el capítulo 1, los objetos de clase EQUATION


son la base para realizar estimaciones econométricas. Un objeto de este
tipo aloja una ecuación y es a través de él que puede accederse a los
resultados y estadísticos relevantes sobre la estimación.
Programación en Economctric \'ic¡¡•s 205

La sintaxis para la declaración de estos objetos se muestra a conti-


nuación:

Sintaxis EQUATION
Objeto: EQUATION
Crea una ecuación.

Uso:
EQUATION Nombre
EQUATION Nombre.lS VariableExplicada C VariablesExplicativas

Ejemplos:
EQUATIONPrimera
EQUATION Segunda.I.SY C Xl X2

Como se puede observar, la primera modalidad de declaración se


limita a solicitar la creación del objeto en memoria sin darle contenido
simultáneamente. La segunda modalidad, por el contrario, crea y esti-
ma la ecuación al mismo tiempo. Cabe recordar, sin embargo, que debe
evitarse el uso repetido de este tipo de comando (dentro de un bucle, por
ejemplo), pues es preferible declarar la ecuación mediante la primera
modalidad en la sección del prólogo de un programa, para luego ex-
traer resultados del objeto directamente mediante comandos como
Primera.LS Y C Xl X2 ...

EViews puede manejar tantos objetos EQUATION como el usuario


decida crear, tal como si se tratara de matrices, escalares, etc. Cada uno
de estos objetos manipulará independientemente sus resultados y mé-
todos de estimación, según sea indicado por el analista. Conviene tener
en cuenta que el programa dispone de una ecuación especial que es
invisible en el archivo de trabajo: la ecuación por defecto. Dicha ecua-
ción se activa automáticamente cada vez que el usuario solicita hacer
una regresión sin referirse a un objeto EQUATION explícitamente (prác-
tica comúnmente llevada a cabo cuando hace falta realizar regresiones
manualmente en la zona de comandos). En suma:

• Si se utiliza un comando de la forma LS Y C Xl X2 ... , EViews


estimará la regresión y esta pasará a considerarse la 'ecuación
actual'.
206 Juan Francisco Castro 1 Roddy Rivas-Llosa

• Al invocarse nuevamente una instrucción similar, tal como LS Y C


X4, EViews estimará la regresión y reemplazará la ecuación ante-
rior en memoria, tomando la última como ecuación actual. En
consecuencia, se habrá perdido la información resultante de la
regresión anterior.

Dentro de un programa será recomendable el uso de ecuaciones


con nombre. De este modo, no solo podrán gestionarse muchas regre-
siones simultáneamente, sino que el programa será más legible y menos
sensible a errores. Veamos un ejemplo de esta técnica:

'Inicio del programa.


·==================================================
'La primera modalidad: declaración y
'estimación por separado:
EQUATION Primera
Primera.LS Y C Xl X2 X3

'Una manera alternativa, declarando y


'estimando simultáneamente (solo se utiliza
'una vez):
EQUATION Segunda.LS Y C X3 X4 X5

'Se calculan los R2 en sendas variables de


'control y se conserva su diferencia en una
'variable escalar como resultado del programa:
!R2_1 = Primera.@R2
!R2_2 = Segunda.@R2
SCALAR Diferencia = !R2 1 - !R2 2

'Estos dos comandos generan las series de


'residuos de ambas regresiones y los guardan
'en sendas series:
Primera.MAKERESID Residl
Segunda.MAKERESID Resid2

'Este comando elimina la ecuación Segunda


'del archivo de trabajo.
D Segunda

·==================================================
'Fin del programa.
Programación en Econometric Views 207

Cuadro3.9

Vistas y procedimientos usuales de la clase EQUATION

ARCHTEST(N umRezagos) Realiza el test de Lagrange (LM) para detectar


la presencia de Heterocedasticidad Condicio-
na! Autoregresiva en el residuo de la ecuación.

AUTO(Orden) Realiza el test de Breusch-Godfrev de corre! a-


ción serial (también conocido como test de
Multiplicadores de Lagrange o test LM). El
orden máximo del proceso AR se indica como
argumento de la vista.

CHOW Obsl Obs2 ... Lleva a cabo los tests de Chow sobre estabili-
dad estructural en los puntos indicados.

COEFCOV Presenta la matriz de covarianza de coeficientes.

CORREL(NumRezagos) Presenta el corre lo grama de residuos de la re-


gresión.
Nota: El número máximo de rezagos se indica
como argumento de la vista.

CORRELSQ(N umRezagos) Presenta el correlograma de residuos


cuadráticos de la regresión.
Nota: El número máximo de rezagos se indica
como argumento de la vista.

DISPLAYNAME Texto Agrega un nombre extendido a un objeto, el


cual será usado en las tablas y gráficos en
lugar del nombre del objeto.

IDST Muestra el histograma y estadísticas básicas


de los residuos de la regresión.

LABEL Muestra o cambia la etiqueta (descripción lar-


LABEL Texto ga) del objeto.

REPRESENTATIONS Muestra en un texto la representación de las


ecuaciones del modelo.

RES ET(NumAj ustados) Realiza un test RESET de especificación


(Regression Specification Error Test) de Ramsey
utilizando el número de términos ajusta-
dos indicado
208 Juan Francisco Castro 1 RodLh- Ri\·as-Llosa

Nota: El número de términos ajustados (nú-


mero de exponentes) se indica como argumen-
to.

RESIDS (g) Muestra un gráfico con los residuos de la re-


gresión. Si es que se omite la opción g, se mos-
trará una tabla.

RESULTS Muestra los resultados de la regresión (panta-


!la principal).

RLS(Opción) Ueva a cabo pruebas de regresiones recursivas


(solo en modelos de mínimos cuadrados, que
no incluyen términos ARMA).
* Las posibles opciones indican el resultado
mostrado. Estas son:
r: residuos recursivos v bandas de error
e: coeficientes recursivos y bandas de error
o: prueba de Chow de un período
n: prueba de Chow de 11 períodos
q: prueba CUSUM (residuo recursivo estan-
darizado acumulado) y banda de 5~o de
significancia
v: prueba CUSUM de los residuos al cuadra-
do y banda de 5% de significancia

TESTADO Seriel Serie2 ... Muestra el resultado de una prueba de hipó te-
sis sobre la omisión de las variables indicadas
en la regresión.
Ejemplo: eql.TESTADD x4 x7

TESTDROP Seriel Serie2 ... Muestra el resultado de una prueba de hipóte-


sis sobre la inclusión errónea de las variables
indicadas en la regresión.
Ejemplo: eql.TESTDROP x2

WALD Restriccionl, Muestra los resultados de una prueba de Wald


Restriccion2 , ... de restricciones sobre los coeficientes de la
regresión.
Nota: Las restricciones utilizan la nomencla-
tura C(i) para referirse a los parámetros de la
regresión. En caso de existir varias restriccio-
nes, estas pueden ir separadas por comas(",").
Ejemplo: eql.WALD C(4)=C(l)*C(6)
eq2.WALD C(4)=0,C(2)=6
eq3.WALD C(l)+C(2)*C(3)=1 +C(4).
Programación en Economctric Vie¡us 209

WHITE(c) l\fuestra los resultados de una prueba de \Vlute


sobre la presencia de heterocedasticidad en los
residuos del modelo. El argumento e indica que
el test deberá incluir todos los productos cru-
zados de regresares.
Nota: En caso de on1itirse el argumento, por
defecto, el test será calculado sin incluir los
productos cruzados.

Cuadro 3.10

Datos propios de la clase Equation- Valores numéricos

@AIC Criterio de información de Akaike.

C(i) o @COEFS(i) Coeficiente estimado para el i-ésimo regresar.

@COV(i,j) ó ©COEFCOV(i,j) Devuelve la covarianza entre los coeficientes i


y]·
@DW Estadístico de Durbin-Watson.

@F Estadístico F de la regresión.

@LOGL Valor de la función de verosin1ilitud.

@MEANDEP Valor promedio de la variable dependiente.

@NCOEF Número de coeficientes estimados (número de


regresares).

@R2 Coeficiente de ajuste (no corregido) de la re-


gresión.

©RBAR2 Coeficiente de ajuste (corregido) de la regresión.

©REGOBS Número de observaciones en la regresión.

©SC Criterio de información de Schwarz.


@SDDEP Desviación estándar de la variable dependiente.
@SE Error estándar de la regresión.
@SSR Suma de cuadrados de los residuos.
@STDERRS(i) Error estándar del i-ésimo coeficiente.
@TSTAT(i) Valor del estadístico t del i-ésimo coeficiente.
210 Juan Francisco Castro 1 Roddv Ri\·as-Llosa

Cuadro 3.ll

Datos propios de la clase Equation-


Vectores y matrices

@COEFS Devuelve el vector de coeficientes estimados.

@COV o @COEFCOV Devuelve la matriz de covarianza de los coefi-


cientes estimados.

@STDERRS Devuelve el vector de errores estándar de los


coeficientes estimados.

@TSTAT Devuelve el vector de estadísticos t asociados


a los coeficientes estimados.

Cuadro 3.12

Métodos usuales de la clase Equation

FIT YPredicha ErrorEstandar Realiza una predicción estática del modelo,


FIT(Opción) registrando los resultados en las series indica-
das.
• Las posibles opciones son:
g: presenta un gráfico de la predicción.
e: presenta una tabla con la evaluación del
procedimiento.
Ejemplo: eqS.FIT Y_predicha Error
Guarda la predicción estática en una serie lla-
macla Y_predicha, y los errores estándar en la
serie Error.
eq2.FIT(e,g)

FORECAST Ypredicha Realiza una predicción dinámica del mode-


ErrorEstandar lo, registrando los resultados en las series in-
FORECAST(g,e) dicadas.
Nota: Los argumentos opcionales son los mis-
mos que los del comando FIT.

MAKEREGS NombreGrupo Crea un grupo con las variables dependientes


e independientes de una ecuación.
Ejemplo: eq3.MAKEREGS grupol

MAKERESID NombreSerie Crea una serie de datos con los residuos de la


regresión.
Programación en Economctric Views 211

5.6. Grupos (GROUP -[§])

Mediante el uso de grupos en EViews es posible darle nombre a un


conjunto de series de datos, sin necesidad de reunir su contenido física-
mente dentro de una matriz. De cierto modo, los grupos dan al usuario
la posibilidad de crear matrices virtuales que se construyen con los
elementos de las series que componen el grupo. Una ventaja adicional
de estos objetos es que la actualización de sus elementos es automática
y bidireccional, debido a que cada vez que se modifica alguno de los
componentes dentro del grupo, se altera la serie correspondiente. Del
mismo modo, si cambiara la información contenida en cualquiera de
las series de trabajo que conforman el grupo, este se actualizaría
automáticamente.

La sintaxis para la creación de esta clase de objetos se muestra a


continuación:

La creación de grupos facilita el análisis conjunto de varias series


de datos mediante un solo comando. Como veremos de inmediato, EVíews
pone a disposición del usuario una amplia variedad de funciones para
generar resultados útiles a partir de grupos y gestionar las series de
datos incluidas en ellos.
212 Juan Francisco Castro/ Rodd\· Ri,·as-Liosa

Cuadro 3.13

Métodos usualmente utilizados


para gestionar grupos

ADD Seriel Serie2 ... SerieN Añade lma o más series a lffi grupo.

CA US E(N umRezagos) Lle\·a a cabo las pmebas de causalidad a lo


Granger entre las series que forman parte del
grupo, tomándolas por pares.
Nota: El número máximo de rezagos debe in-
dicarse como argtm1ento.
Ejemplo: grupol.CAUSE(12)

COR Genera la matriz de correlaciones del grupo.

CORREL(N umRezagos) Muestra el correlograma de la primera serie


del grupo.

CROSS(NumRezagos) Muestra el correlograma cruzado de las pri-


meras dos series del gmpo.

cov Genera la matriz de covarianzas del gmpo.

DROP Seriel Serie2 ... SerieN Elimina tma o más series de un grupo.

LINEFIT Presenta lffi gráfico scatter de la primera serie


contra la segtmda, añadiendo tma recta de re-
gresión.

SCAT(Opdón) Muestra lffi gráfico scatter de la primera serie


contra el resto.
* Las posibles opciones son:
e: conecta las observaciones adyacentes con
tma línea.
m: muestra múltiples gráficos scatter por pa-
res de series.
Nota: Cabe resaltar que, en el caso de la op-
ción e, no se pueden conectar aquellas obser-
vaciones que se encuentren separadas por lffi
NA en la muestra de trabajo. Además, esta
opción solo está disponible en versiones de
EViews 3.0 o anteriores.

SCATMAT Crea lffi gráfico con tma matriz de todos los


gráficos scatter por pares.
Programación en Economctric Ficws 213

SHEET Presenta la hoja de datos de las series del gru-


po.

STATS Presenta las estadísticas descriptivas de las


series del grupo.

TABLE Muestra la tabla de un grupo o matriz.


Nota: Si se utiliza junto con el comando
FREEZE, se pueden pasar los datos de grupos
o matrices a tablas.
Ejemplo: Grupol.TABLE
FREEZE(TablaNueva) MatrizA.TABLE

Cuadro 3.14

Datos propios de la clase Group

(i) La serie i-ésima dentro del grupo. Simplemen-


te hay que agregar (i) al costado del nombre
del grupo.

@COUNT Devuelve como respuesta el número de series


que hay dentro del grupo.

@SERIESNAME(i) Devuelve como respuesta el nombre de la serie


i-ésima dentro del grupo.

Veamos un ejemplo sencillo de algunas de estas funciones:

'Asumamos la existencia de una serie Y y de


'lO regresores potenciales denotados Xl .. XlO.

'Crearnos un grupo vacío para los regresores


GROUP Grupol.

'Incluirnos los regresores en el grupo


'previamente declarado, uno por uno.
FOR !i = 1 to 10
Grupol.ADD X! i
NEXT ! i
21-± Juan Francisco Castro 1 Rodd\- Ri\·as-Llosa

'Ahora podernos llevar a cabo la regresión principal ...


EQUATION Resultado
Resultado.LS Y Grupol

'Eliminemos el regresor con el valor T más


'bajo mientras este sea menor que 2.
'Se inicializa 'Tmin en 10A99.
WHILE @MIN(ABS(Resultado.@TSTAT) )<2
1
Min=O
1 TMin=le99

FOR !i = 1 TO Grupol.@COUNT
IF ABS (Resultado. @TSTAT ( ! i) ) < 'TMin THEN
!Min=!i
!TMin=ABS(Resultado.@TSTAT( 1 i))
ENDIF
NEXT ! i
%Nombre = Grupol. @SERIESNAME ( ! Min)
Grupol.DROP %Nombre
Resultado.LS Y Grupol
WEND

5.7. Muestras (SAMPLE -~)

En páginas anteriores presentamos el comando Smpl como el en-


cargado de modificar la muestra que será tomada como ámbito por las
funciones estadísticas y econométricas subsiguientes. Comúnmente,
Smpl utiliza como insumos dos o más argumentos, que corresponden a
los límites deseados y a las condiciones que definen la muestra. De
manera alternativa, es posible almacenar dichos límites y condiciones
dentro de un objeto tipo SAMPLE, para luego adjuntar el nombre del
objeto respectivo como único parámetro del comando Smpl al momento
de definir la muestra de trabajo. Cuando una investigación requiere el
análisis de datos en muchas muestras distintas, esta posibilidad per-
mite simplificar los comandos manejados.

La sintaxis para la creación de objetos de muestra se presenta a


continuación:
Programación en EcOIIometric Views 215

Sintaxis SAMPLE

Objeto: SAMPLE :

Crea una muestra (el procedimiento SEr sirve para redefinir una
muestra previamente declarada). Luego, puede utilizarse el coman-
do SMPL acompañando al nombre del objeto SAMPLE para activar
la muestra definida. ·

Uso: SAMPLE Nombre Obsinic ObsFinal


SAMPLE Nombre Obslnicl ObsFinall Obslnic2 ObsFinal2 •..
. SAMPLE Nombre ... IF CoridíciónLógica . .
NombreMuestraPreviamenteDedarada.SEr Obslnic ObsFinal •••

Ejemplos:
SAMPLE Muestrall940.011980.12 >
SAMPLE Muestra2 @FIRST1928.071940.0l··..,.,..,,....,u
1ipoGobtern9:f2 :, . , ,
SMPL MueStia1 ....
Muestra2.SEr @FIRST 192K071940.ót...-~:>-V l'.JF~lpoGQI>i@ri(

. En el primer ejemplo se crea


UIJa muestlta
tra1 definida entieeneród.e:J.940 y·<Jti.Cit~)re..a~~[9Si0:
crea Un objetriSimilar definido en d~; intm'alos ru> d:l1ril
de la primera obseJ:.va<:·iónhrui;ta jutlio ¡(le1.9"2l$
hasta Ja tí1titn<l····~·'b$•erv·~ci,óu)/ siierrtpr·~" v:

5.8. Tablas ITABLE- ~·~~~)

A diferencia de las matrices, que únicamente pueden contener va-


lores numéricos, los objetos de la clase TABLE solo pueden contener
texto. N o obstante, ya que los textos pueden estar compuestos de carac-
teres alfanuméricos, es posible registrar en tablas las representaciones
alfanuméricas de los números y, además, tener cierto control sobre el
formato de presentación (en las tablas es posible dibujar líneas de divi-
sión, cambiar el ancho de las columnas y la alineación de cada celda).
Estas características hacen que, en la práctica, las tablas sean suma-
216 Juan Francisco Castro 1 Rodd:· Ri\·as-Llosa

mente útiles para construir reportes de resultados que puedan ser co-
piados y pegados directamente en un procesador de textos para su
edición final.

A diferencia de los demás objetos estudiados, las tablas pueden


crearse a través de dos vías totalmente distintas. En la primera, se utili-
za una sintaxis similar a la compartida por otros objetos, tal como se
muestra a continuación:

Sintaxis TABLE

Alternativamente, es posible crear una tabla a partir de una vista


de otro objeto (recordemos que las vistas son formas distintas de ver un
objeto). EViews dispone de un comando especial para congelar la apa-
riencia que tiene una vista y transferir la información que se muestre en
pantalla hacia una tabla (texto o gráfico, dependiendo del tipo de vista,
como veremos en la sección siguiente). La instrucción Freeze, encarga-
da de administrar este procedimiento, abre nuevas posibilidades para
acceder y editar la información contenida en las vistas. La sintaxis de
este comando se muestra en el siguiente cuadro:
Programación en Econometric Views 217

' FREEZE(NombreTextoNuevo) ·
NombreObjetoFuente. VistaTipoTexto

Ejemplos: ' "'" '.,., ' •'"' -, '

FREEZE(fablaResultados)Regrl.EESULTS
~(fablaFinal)pr3.TABLE

· .El primer ejemplo creará una tabla llamada TablaResulatdos, la cual


contendrá la vista tipo RESULTS de la ecuación Regrl. El siguiente
. ejemplo, 'congelará' la vista por defecto de la tabla para el grupo
Gr3 y la guardará como una tabla llamada TablaFinal.

Cuadro 3.15

Vistas de la clase Table

LABEL Muestra o cambia la etiqueta (descripción larga)


LABEL Texto del objeto.

SHEET o TABLE Muestra el objeto en su presentación conven-


cional de hoja de datos,

Cuadro 3.16

Datos propios de la clase Table

(NumFila, NumColumna) Hace referencia al elemento que se encuentra


en las coordenadas indicadas,
Ejemplo: TablaGeneral(3,2)="Resultados"
En este caso, se está asignando el texto "Re-
sultados" en la posición (3,2) de la tabla
Tabla GeneraL
218 Juan Franci5co Castro 1 Rodd\· Ri\·as-Llosa

Cuadro3.17

Comandos y funciones útiles relacionadas


con la clase Table

@DTOO(VariableTexto) Devuelve el número de observación correspon-


cliente a la fecha indicada como argumento (la
fecha deberá estar indicada como texto).
Nota: El número de observación estará en rela-
ción al inicio del rango del archivo de trabajo.
Ejemplo: SCALAR Obsnum = @DTOO
("1995.01")
El comando asignará al escalar Obsnum el
número de observación correspondiente a ene--
ro de 1995.

@MID(Texto, Poslnicial, Devuelve un sub texto de largo


NumCaracteres) NumCaracteres extraído del texto indicado
como primer argumento, a partir del carácter
en la posición Poslnicial hacia la derecha.

@OTOD(NumObservacion) Devuelve un texto con la fecha correspondien-


te al número de observación indicado.

SETCELL(N ombreTabla, Llena una celda de la tabla indicada con el


NumFila, NumColumna, contenido especificado y el formato definido
Contenido, Opciones) en las opciones.
• Las posibles opciones:
e: alinea el contenido al centro de la celda.
r: alinea el contenido a la derecha de la celda.
1: alinea el contenido a la izquierda de la celda.
(número positivo): define el número de posi-
ciones decimales del contenido.
(número negativo): establece el número total
de cifras que será mostrado en el contenido de
la celda.
Nota: Pueden incluirse simultáneamente tan-
to opciones de alineación como de formato
decimal, separando ambas por una coma den-
tro de los argumentos del comando.

SETCOLWIDTH Fija el ancho de la columna indicada. El ancho


(NombreTabla, NumColumna, se mide en número de caracteres (valor a pro-
Ancho) ximado al ancho de un carácter monoespa-
ciado).
Programación en Economctric Vini's 219

Nota: No todos los caracteres tienen el mismo


ancho en cada tipo de letra.

SETLINE(NombreTabla, Dibuja una línea horizontal doble que abarca


Numfila) todo el ancho de la tabla en la fila indicada.

@STR(Número) De\·ueh·e la representación alfanun1érica del


número dado como argumento.

@VAL(Texto) Devuelve el número correspondiente a la re-


presentación alfanumérica indicada, si es que
este existe. En caso contrario, devuelve NA.

Veamos un ejemplo del uso de esta clase de objetos; con tal finali-
dad desarrollaremos un programa para elaborar regresiones
univariadas4 • El programa tomará como argumentos el nombre de una
variable explicada y de un grupo de potenciales explicativas (el uso de
un grupo evita el problema de restringir el número de posibles regresares,
logrando que el programa gane generalidad). Luego llevará a cabo, por
tumos, regresiones lineales sucesivas de la variable explicada contra
un intercepto y cada una de las variables explicativas, para finalmente
presentar un reporte de resultados en forma de tabla. Preste atención al
correcto uso de las llaves como delimitadores de reemplazo textual.
Siempre se utilizarán llaves para dar validez al acceso a un objeto, cuyo
nombre se encuentra dentro de una variable de texto.

'Programa para elaborar regresiones univariadas.


'==================================================
'USO:

' * La serie explicada se adjuntará corno


' primer argumento del programa (%0)
' * Las series explicativas se reunirán en un
' grupo cuyo nombre se pasará como segundo
' argumento del programa (%1)

' * Ejemplo: RUN PbiPerCapita Grupol

4. El lector podrá encontrar una versión mucho más completa de este programa
en el capítulo 4.
220 Juan Francisco Castro 1 Rodd\· Ri\·as-Liosa

!==================================================
'Primero hallarnos el número de regresares dentro
'del grupo:
'NurnSeries={%1}.@COUNT

'Eliminarnos el objeto ResultadosUnivar, Sl existe:


IF @ISOBJECT ( "Resul tadosUnivar") THEN
D ResultadosUnivar
ENDIF

'Crearnos los objetos necesarios, considerando


'6 filas auxiliares en la tabla de resultados
'para el encabezado y la fila de cierre:
EQUATION _Ternp
TABLE(!NurnSeries+6,5) ResultadosUnivar

'Llenarnos el encabezado de la tabla de


'resultados

Resul tadosUni var ( 1, 1) = "RESULTADOS DE LAS


REGRESIONES ......
... ... UNIVARIADAS"
ResultadosUnivar(2,1)="Variable explicada: "+ %0
SETLINE(ResultadosUnivar,3)
ResultadosUnivar(4,1)="N°"
ResultadosUnivar(4,2)="Regresor"
ResultadosUnivar(4,3)="R-Cuadrado"
SETLINE(ResultadosUnivar,S)

'Realizarnos las regresiones univariadas y


'llenarnos los estadísticos en las celdas
'correctas de la tabla
FOR !i = 1 TO !NurnSeries
_Ternp.LS {%0} e {%1} ( !i)
ResultadosUnivar(S+!i,1)=@STR('i)
ResultadosUnivar(S+!i,2)={%1} .@SERIESNAME( !i)
ResultadosUnivar(S+!i,3)=@STR( __ Ternp.@R2)
Programación en Econometric Vie1cs 221

NEXT ! i

'Cerramos el reporte con una línea y lo presentamos


'en pantalla:
SETLINE(ResultadosUnivar,6+!NurnSeries)
ResultadosUnivar.SHEET

'Finalmente, eliminamos la regresión auxiliar:


D _Temp

El resultado del programa será una tabla con la siguiente estructu-


ra (la tabla fue copiada directamente desde el objeto ResultadosUnivar
en EViews).

RESULTADOS DE LAS REGRESIONES UNIVARIADAS


Variable explicada: PbiPerCapita

No Regresar R-Cuadrado

1 X1 0.3321181396
2 X2 0.8907116684
3 X3 0.9312525597
4 X4 0.1471068665
5 X5 0.2957055195

5. 9 . Gráficos (G RAPH - hli])

Los objetos de esta clase pueden crearse de dos modos. El primero


exige el uso de la sintaxis que se muestra a continuación. Note que, a
diferencia de otros objetos, no es posible crear un gráfico vacío median-
te una declaración pura. Los gráficos requieren que se les dé contenido
en su declaración inicial; no obstante, como sucede con el resto de obje-
tos, una vez declarados no hace falta volver a hacerlo, sino que basta
referirlos directamente. ·
222 Juan Francisco Castro 1 Roddy Ri,·as-Llosa

Sintaxis GRAPH
Objeto: GRAPH .

Uso:
GRAPH .Nombre.Método Argumentos

Ejemplos:
GRAPH Grafl.LINE XlX2 X3
GRAPH Graf2.SCAT Yl X4

La segunda forma de crear un gráfico es a través del comando


Freeze. A continuación se muestran las versiones correspondientes a
los dos ejemplos mostrados en la sintaxis, utilizando dicho comando:

'Se crea el Grupol que contiene las series


'Xl, X2 y X3, y luego se 'congela' la vista
'tipo líneas de ese grupo y se guarda como
'Grafl.
GROUP Grupal Xl X2 X3
FREEZE(Grafl) Grupol.LINE

'Se crea el Grupo2 con las series Yl y X4, y


'luego se congela la vista tipo 'scatter' en
'un objeto tipo gráfico llamado Graf2
GROUP Grupo2 Yl X4
FREEZE(Graf2) Grupo2.SCAT
Programación en Econometric Views 223

Cuadro 3.18

Métodos de la clase Graph

BAR( Opciones) Muestra un gráfico de barras de las series con-


tenidas en el objeto.
* Las posibles opciones son:
d: Escala dual (la primera serie es medida en
el eje de la izquierda y las demás en el eje de la
derecha).
s: Barras acumuladas en lugar de barras lado
a lado.
1: Gráfico de barras de la primera serie y gráfi-
co de líneas de todas las demás.
x: Similar a la opción 1, pero con escala dual.

HILO Presenta un gráfico tipo Hi-Lo-Clase (máximo,


mínimo y cierre).
Nota: Este método requiere de tres series de
datos como insumo.

LINE Muestra un gráfico de líneas de las series con-


tenidas en el objeto.

MERGE Graficol Grafico2 ... Combina los gráficos indicados dentro del ob-
jeto gráfico al que se le aplica el método.

PIE Muestra un arreglo de gráficos de pie de las


series contenidas en el objeto. Se tendrán tantos
pies como filas de observaciones (con uno o más
valores positivos) haya en las series contenidas
en el objeto. Cada pie tendrá tantas secciones
como series haya dentro del grupo.
Nota: Los valores negativos no serán represen-
tados.
Ejemplo: GRAPH gl.PIE Grupal
Crea un objeto gráfico llamado gl, utilizando
la vista tipo píe del grupo Grupo l.

SCAT(Opciones) Presenta un gráfico tipo scatter de las series


contenidas en el objeto.
* Las posibles opciones son:
e: Conecta las observaciones adyacentes con
una línea (no unirá aquellas observaciones que
estén separadas por una discontinuidad en la
muestra). Esta opción solo está disponible en
224 Juan Francisco Castro 1 RoddY Ri\·as-Uosa

versiones de EViews previas a la 4.0. Un co-


mando equivalente a SCAT(c) a partir de la
versión 4.0 es XY.
r: Muestra una recta de regresión para cada
serie en el eje verticaL
b: Equivalente a las opciones e y r juntas.
m: Genera múltiples gráficos scatter por pares
de series (no puede utilizarse simultáneamen-
te con las opciones e, r, o b ).
Nota: La primera serie se utilizará como refe-
rencia para el eje horizontal, mientras que el
resto se medirá en el eje verticaL

XY Presenta un gráfico tipo x-y de las series con-


tenidas en el objeto. La diferencia esencial res-
pecto al gráfico de tipo scatter es que los
diagramas XY siempre unen los puntos suce-
sivos de las series que los conforman.
* Las posibles opciones son:
n: Versión normalizada de las series de datos
(media cero y varianza unitaria).
d: Escala dual (la primera serie es medida en
el eje de la izquierda y las demás en el eje de la
derecha).
x: Escala dual con posible cruce de coordena-
das entre las dos escalas.
s: Líneas acumuladas (la diferencia entre cada
par de líneas representa el valor de la serie
graficada).
m: Genera múltiples gráficos x-y (uno para
cada serie).
Nota: La primera serie se utilizará como refe-
rencia para el eje horizontal, mientras que el
resto se medirá en el eje verticaL

Cuadro 3.19

Vistas de la clase Graph

GRAPH Muestra el gráfico en su representación por


defecto.

LABEL Muestra o cambia la etiqueta (descripción larga)


LABEL Texto del objeto.
Programación en Ecozzometric Vie¡us 225

Cuadro 3.20

Procedimientos de la clase Graph

ADDTEXT(Opciones) Texto Añade un texto flotante a un gráfico.


ADDTEXT(PosH, Pos V, *Las opciones para la primera modalidad son:
Opciones) Texto t: Coloca el texto en la posición central superior.
1: Coloca el texto rotado hacia la izquierda.
r: Coloca el texto rotado hacia la derecha.
b: Coloca el texto en la posición central inferior.
x: Coloca el texto dentro de un recuadro.
*Unidades de medida de referencia
En caso de utilizarse la segunda modalidad
para especificar con precisión el lugar donde
estará el texto, deberá tenerse en cuenta que la
posición relativa del texto se mide respecto a
la esquina superior izquierda del gráfico y que
las unidades de medida son estandarizadas.
Para esto, EViews considera que un gráfico
normal siempre mide 4 x 3 unidades (sin im-
portar de qué tamaño se muestre en la panta-
lla). Los diagramas scatter miden 3 x 3 unida-
des de referencia. Pueden indicarse números
negativos para referirse a posiciones arriba o
por la izquierda de la esquina superior izquier-
da del gráfico, que se localiza en el punto ima-
ginario (0,0).

ALIGN(NumCol, Alinea los gráficos dentro de un gráfico múl-


EspH, EspV) tiple. El primer argumento indica el número de
columnas en el arreglo, mientras que los dos
siguientes establecen la separación horizontal y
vertical entre los gráficos (expresada en urúda-
des de referencia, ver párrafo anterior).

BAR(Opciones) Seriel Muestra un gráfico de barras de las series incli-


Serie2 ... ca das.
* Las posibles opciones son:
d: Escala dual (la primera serie es medida en
el eje de la izquierda y las demás en el eje de la
derecha).
s: Barras acumuladas en lugar de barras lado
a lado.
1: Gráfico de barras de la primera serie y gráfi-
co de líneas de todas las demás.
x: Similar a la opción 1, pero con escala dual.
226 Juan Francisco Castro 1 RoddY Ri\·as-Llosa

LEGEND(Opciones) Cambia la apariencia o posición de la leyen-


LEGEND(PosH, PosV, da del gráfico. Las posición es indicada en uni-
Opciones) dades de medida de referencia (\·er proce-
dimiento ADDTEXT).
* Las posibles opciones son:
off: Elimina la leyenda (o etiquetas de ejes) en
los gráficos SCAT y XY.
b: Coloca la leyenda en la parte inferior central
del gráfico.
bl: Coloca la leyenda en la parte inferior iz-
quierda del gráfico.
br: Coloca la leyenda en la parte inferior dere-
cha del gráfico.
r: Coloca la leyenda en la parte derecha del
gráfico.
1: Coloca la leyenda en la parte izquierda del
gráfico.
s: Muestra la leyenda como una sola columna
(aplicable en el caso de leyendas múltiples).
x: Rodea la leyenda con un recuadro.

LINE Cambia el estilo del gráfico a la modalidad


de líneas.

LSTYLE(estilolineal, Establece el tipo de línea que se usará para


estilolinea2, ... ) graficar cada serie. Los estilos están represen-
tados por códigos numéricos, según la siguiente
equivalencia de color y tipo de línea:
1: azul, líneas sólidas.
2: rojo, líneas cortas.
3: verde, líneas medianas.
4: negro, líneas cortas y medianas alternadas.
5: verde oscuro, dos líneas cortas y una me-
diana alternadas.
6: morado, líneas largas.
7: marrón, tres líneas cortas y una mediana
alternadas.
8: azul oscuro, líneas cortas y largas alternadas.
9: rosado, líneas largas.

METAFILE NombreArchivo Graba el gráfico como un archivo con resolu-


METAFILE(c) NombreArchivo ción ilimitada (con extensión WMF). La opción
(e) indica que el gráfico se grabe en colores.
Nota: El nombre del archivo puede incluir una
ruta dentro del dispositivo de grabación.
Programación en Econometric Viezus 227

NAME(Numerodelaserie) Redefine el nombre de las series graficadas


Texto para propósitos de etiquetado en la leyenda.
Si no se indicara texto alguno, se borraría el
nombre asignado a la serie.
Nota: El texto no necesita ir entre comillas("").

OPTION(Opciones) Modifica las opciones de visualización del grá-


fico.
* Las posibles opciones son:
d: Escala dual (la primera serie es medida en
el eje de la izquierda y las demás en el eje de la
derecha).
x: Escala dual con cruce de valores permitido.
a, -d, -x: Escala simple.
1: Escala logarítmica.
-1: Escala lineal.
n: Normalizar datos.
-n: No normalizar datos.
k: Usar color.
-k: No utilizar color.
h: Mostrar líneas de división horizontales.
-h: No mostrar !meas de división horizontales.
v: Mostrar !meas de división verticales.
-v: No mostrar líneas de división verticales.
b: Colocar el gráfico en un recuadro.
-b: No colocar el gráfico en un recuadro.
i: Dejar márgenes laterales entre el gráfico y el
recuadro que lo contiene.
-i: No dejar márgenes laterales entre el gráfico
y el recuadro que lo contiene.
z: Dibujar una línea en el nivel cero.
·z: No dibujar una !mea en el nivel cero.
r: Mostrar una recta de regresión en diagramas
SCAT.
-r: No mostrar una recta de regresión en
diagramas SCAT.
e: Conectar los puntos diagramados en
diagramas SCAT.
-e: No conectar los puntos diagramados en
diagramas SCAT.
PIE Cambia el estilo del gráfico a la modalidad
PIE.
Ejemplo: Grupol.PIE
Muestra la vista tipo pie del grupo Grupo l.
228 Juan Francisco Castro 1 Rodd\· Rivas-Llosa

SCALE(NumEje, Mínimo, Establece la escala de \·alores del eje indicado.


Máximo) Los ejes están numerados como sigue:
* Para gráficos de líneas y barras:
1: Vertical izquierdo.
2: Vertical derecho (si tienen escala doble).
*Para gráficos scatter y XY:
1: Horizontal.
2: Vertical izquierdo.
3: Vertical derecho (si tienen escala doble).

SCAT Cambia el estilo del gráfico a la modalidad


SCAT.

SHADE Fechalnicio Añade un sombreado entre las fechas o nú-


FechaFinal meros de observación indicados.
Nota: En caso de que las fechas sean iguales, se
añadirá una línea vertical en dicha posición.

XY Cambia el estilo del gráfico a la modalidad


XY

6. Caja de herramientas: técnicas útiles de programación

En esta sección examinaremos algunas técnicas de uso general en


programación, piezas fundamentales que pueden incorporarse en una
gran variedad de programas, tal como si se tratara de módulos prefabri-
cados. Léalas con detenimiento para comprender su lógica interna y
sentirse cómodo utilizándolas en otros contextos. Un ejercicio muy útil
para autoevaluar su grado de dominio de una técnica de programación
es preguntarse: ¿de qué otro modo podría aplicar esta técnica?, ¿qué
otro ejercicio concreto, distinto del mostrado, me permitiría resolver este
enfoque?, ¿cómo implementaría esa solución?

Cabe destacar, una vez más, que el propósito de los comentarios


incluidos no debe limitarse en ningún caso a decorar los comandos y
estructuras del programa. La adición de comentarios es una parte inte-
gral de la metodología de elaboración de una rutina y de la correcta
redacción de un algoritmo. Los comentarios tienen dos objetivos esen-
ciales: ayudar a otros usuarios a comprender el porqué de cada elemen-
to y constituir un ejercicio productivo para el programador, pues lo
obligan a trazar un camino razonado hacia su meta.
Programación en Economctric Views 229

Veamos ahora algunas técnicas útiles reunidas dentro de una lis-


ta que, por supuesto, no pretende ser exhaustiva.

6.1. Cómo tomar muestras al azar

Situación: Se desea tomar una muestra de m observaciones al


azar dentro del archivo de trabajo.

Ejemplo concreto: Técnica de estimación Jacknife (ejecución de regre-


siones con muestras reducidas tomadas al azar den-
tro de la muestra total).

Problema: No existe un comando para realizar la tarea direc-


tamente.

Solución: Crear una serie aleatoria y fijar la muestra de modo


que incluya los m mayores valores de dicha serie.

Consideraciones ¿Existe alguna restricción que sugiera no cambiar


especiales: el orden de los datos en el archivo de trabajo?

Este procedimiento puede realizarse sin mayores dificultades, te-


niendo precaución en marcar y reponer el orden inicial de los datos en
el archivo de trabajo. El algoritmo esencial se muestra a continuación.

Programa 3.1

Técnica de estimación Jacknife

'Fijarnos el orden inicial:


GENR _Ordeninicial = @TREND + 1

'Generamos la serie aleatoria:


GENR _AleatoriaAuxiliar = NRND

'Ordenamos el archivo de trabajo según esta nueva


'serie:
SORT _AleatoriaAuxiliar
'Tomamos las m primeras observaciones
230 Juan Francisco Castro 1 Roddy Ri\·as-Llosa

'(m debe haberse fijado con anterioridad):


SMPL 1 !m

'======================================================
'En este punto se desarrolla el análisis requerido.
'======================================================
'Reponemos la muestra:
SMPL @ALL

'Reponemos el orden original:


SORT _Ordeninicial

·======================================================
'En este punto se registran los resultados
'del análisis.
'======================================================
'Y eliminamos las variables auxiliares:
D _Ordeninicial _AleatoriaAuxiliar

6.2. Cómo registrar múltiples resultados intermedios

Situación: Se desea llevar a cabo un proceso repetitivo que en


cada paso habrá de generar un resultado interme-
dio. Todos estos resultados deberán registrarse para
ser posteriormente procesados.

Ejemplo concreto: La necesidad de generar 1,000 regresiones con


muestras al azar, para luego elaborar un histograma
que muestre la distribución de frecuencias de los
coeficientes de ajuste R-cuadrado de todas ellas.

Problema: ¿Dónde conservar toda la información intermedia?

Soluciones Crear tantas variables auxiliares como datos inter-


altemativas: medios se tengan.
Utilizar una serie de datos para registrar la infor-
mación.
Programación en Econometric Views 231

Utilizar un solo vector de datos con el tamaño apro-


piado para guardar toda la información.

Consideraciones ¿Qué relación existe entre el número de datos que se


especiales: desea conservar y el rango total del archivo de tra-
bajo?
¿Es necesario cambiar el orden del archivo de tra-
bajo como parte del proceso repetitivo?

En general, siempre es más seguro registrar los resultados parciales


de un cálculo repetitivo dentro de un vector, en lugar de hacer uso de una
serie de datos con este propósito. Las razones para ello son dos: en primer
lugar, el vector puede asumir cualquier tamaño, mientras que la serie de
datos siempre estará limitada por el tamaño del archivo de trabajo; en
segundo lugar, el vector no se verá afectado por los comandos SORT que
puedan invocarse como parte del procedimiento. Esta última razón im-
plica que 'el tercer elemento del vector' siempre será 'el tercer elemento del
vector'; mientras que al cambiar el orden de una serie, se pierde la posi-
ción de cada elemento constituyente.

No obstante, existe un caso común en que se hace uso de series


para registrar resultados intermedios. Para ello, deben cumplirse dos
condiciones:

• Que el número de casos por registrar no sea mayor que el rango del
archivo de trabajo.

• Que se utilice con mucha precaución el comando Sort dentro del


algoritmo de análisis.

El objetivo de usar series en lugar de vectores es, esencialmente,


aprovechar las posibilidades adicionales que ofrecen los objetos de cla-
se SERIES con respecto a los objetos de clase VECTOR. Entre estas se
incluyen las diversas vistas especializadas, la flexibilidad de poder
construirse a través de una fórmula y la capacidad de participar como
regresores dentro de un modelo estimado. Sin embargo, siempre se po-
drá considerar el uso del comando MTOS para convertir un vector en
una serie de datos.
232 Juan Francisco Castro 1 Rodd\· Ri\·as-Uosa

A continuación se presenta un ejemplo del procedimiento más


seguro: el uso de un vector para registrar los resultados.

Programa 3.2.

Captura de resultados intermedios mediante un vector

'Creamos el vector de registro y lo inicializarnos


'a cero:
VECTOR( 1 NurnCasos) _Registro= O

'El bucle principal:


FOR !i = 1 TO !NurnCasos

'======================================================
'En este punto se desarrolla el análisis requerido.
'======================================================
'Registrarnos los resultados:
_Registro ( ! i ) = ( ... )

'Cerrarnos el bucle principal:


NEXT ! i

6.3. Cómo identificar máximos y mínimos

Situación: Se desea encontrar un caso óptimo resultado de un


proceso repetitivo. El resto de los resultados inter-
medios (los casos no óptimos) no son necesarios
para ningún procesamiento adicional y pueden
descartarse.

Ejemplo concreto: La necesidad de encontrar el máximo coeficiente de


ajuste R-cuadrado entre 10,000 regresiones lleva-
das a cabo con muestras al azar.

Problema: ¿Es necesario crear un vector con todos los resulta-


dos intermedios?

You might also like