Application Center - Maplesoft
Our website is currently undergoing maintenance, which may result in occasional errors while browsing. We apologize for any inconvenience this may cause and are working swiftly to restore full functionality. Thank you for your patience.

App Preview:

Interactive Macroeconomics: Section 3.2

You can switch back to the summary page by clicking here.

Learn about Maple
Download Application


 

3.2 Macroeconom?a en el dominio del tiempo y de las frecuencias

3.2.1 Conceptos b?sicos para el an?lisis de series en el dominio de las frecuencias

No es siempre obvio a simple vista que las series con datos de producci?n, empleo o precios relativos resulten de una combinaci?n lineal de series peri?dicas simples, como las representadas por funciones sinusoidales. Sin embago, Fourier prob? que a?n en el caso de secuencias no peri?dicas, ?stas pueden representarse mediante sumas ponderadas de senos y cosenos, donde los ponderadores de dichas sumas son generados por una funci?n conocida como Transformaci?n de Fourier.

> restart;
with(plots):

with(inttrans):

Warning, the name changecoords has been redefined

M?s que ofrecer aqu?  una demostraci?n general de estas ideas, recurriremos a un m?todo heur?stico para desarrollar, mediante ejemplos, la intuici?n detr?s de esta importante propiedad de los datos.

La pieza fundamental con la que construiremos las series m?s complejas, es una funci?n del tipo z = cos(2*Pi*n-Pi/2) , donde n es el ?ndice que se refiere a la posici?n que toma la variable macroecon?mica que nos interesa en el tiempo.

La gr?fica que aparece abajo muestra una funci?n de periodo 1, es decir, donde la variable z(n) regresa al punto de partida desp?es de 1 periodo. Su amplitud, que correspondiente a la distancia entre el punto m?s alto o m?s bajo de la serie z y el eje horizontal, es tambi?n 1. La frecuencia, que es el rec?proco de la longitud de la onda, es tambi?n 1. Las unidades que se utilizan para medir las frecuencias son los Hz o Hertzios, los cuales son el n?mero de ciclos completados por unidad de tiempo.

> z:=(n)->cos(2*Pi*n-Pi/2):
plot(z(n),

n=0..2,

labels=["Tiempo","z(n)"],

color=black,

thickness=2,

linestyle=1,

labeldirections=[HORIZONTAL,VERTICAL],

title="Funcion periodica",

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]);

[Plot]


La informaci?n sobre amplitud, longitud y frecuencia de esta funci?n es capturada por  su  correspondiente transformaci?n de
Fourier, definida como Z(w) = int(z(n)*exp(I*w*n), n = -infinity .. infinity) , donde w es el recorrido de la funci?n peri?dica por unidad de tiempo, expresado en radianes, e I es un n?mero tal que I^2 = -1 .  Debe subrayarse que, Z(w) es ahora una funci?n de w y no de n.

> Z:=(w)->fourier(z(n),n,w):
pz:=w->evalc(abs(Z(w))):

phi:=w->evalc(argument(Z(w))):

Dado que la funci?n transformada es compleja es decir, que arroja valores complejos al evaluarse en ciertos puntos, puede expresarse en coordenadas polares, o bien descomponerse en su componente real y el imaginario. Estas representaciones alternativas tienen una interpretaci?n muy interesante.

Empecemos expresando los valores de la funci?n en coordenadas polares. El m?dulo,  que llamaremos pz := proc (w) options operator, arrow; abs(Z(w)) end proc , nos da una idea de la forma en que se distribuyen las oscilaciones de una cierta secuencia entre distintas frecuencias. El espectro (power spectrum), Pz = pz(w)^2/int(pz(w)^2, w = 0 .. 2*Pi) , es una manera alternativa de presentar esta informaci?n, normaliz?ndola. Este espectro puede interpretarse como la proporci?n del peso (power) total de la secuencia z(n)  que puede atribuirse a una serie periodica sinusoidal con frecuencia w/(2*Pi) . Nuevamente, la frecuencia se expresa en ciclos por unidad de tiempo, o Hz.

El m?dulo de la transformaci?n est? dado por abs(Pi*Dirac(w-2*Pi)-Pi*Dirac(w+2*Pi)) , donde Int(Dirac(x), x = -infinity .. infinity) = 1 y Dirac(x)=0  para toda  x distinta de cero. Esto quiere decir que pw es una funci?n que toma el valor de pi*Dirac(0) donde w = 2*Pi y  w = -2*Pi .  Como era de esperarse, esto significa que se trata de una funci?n peri?dica compuesta de una sola onda con frecuencia igual a  w/(2*Pi) = 2*Pi/(2*Pi) =1.

> pz(w);

Pi*abs(Dirac(w-2*Pi)-Dirac(w+2*Pi))

Regresando a definici?n de un n?mero complejo en coordenadas polares y en forma de sus vectores componentes, sabemos que ?ste ser? de la forma M*exp(I*phi) = M(cos(phi)+I*sin(phi)) , donde abs(M) es el m?dulo y phi es la fase. Esto se puede comprobar si tomamos una expansi?n de Taylor en ambos lados de la ecuaci?n y las comparamos, como se ve enseguida.

> taylor(M*exp(I*phi),phi)-taylor(M*(cos(phi)+I*sin(phi)),phi);

0

Para extraer la fase phi de esta expresi?n,  basta con computar arctan(sin(phi)/cos(phi)) = arctan(Im(Z)/Re(Z)) , donde Re(Z) es la parte real Z(w) y Im(Z) la parte imaginaria.

Para interpretar adecuadamente a phi es necesario recurrir a un par de definiciones adicionales.

Es sabido que la transformaci?n de Fourier es invertible. De hecho,  z(n) = int(Z(w)*exp(-I*w*n), w = -infinity .. infinity) = int(abs(Z(w))*(cos(phi+w*n)+I*sin(phi+w*n)), w = -infinity .. infinity) . M?s a?n, si la serie original est? compuesta ?nicamente por n?meros reales, como es de esperarse en el caso de las series econ?micas, entonces la expresi?n de arriba se simplifica para quedar como int(abs(Z(w))*cos(phi+w*n), w = -infinity .. infinity) . Por lo tanto, phi nos da una idea del desplazamiento de cada una de las funciones sinusoidales b?sicas con relaci?n a cos(w*n) , para cada frecuencia w/(2*Pi) .

Con estos antecedentes, podemos interpretar el resultado de phi(w) que reporta Maple 8.  S?lo prestaremos atenci?n al caso donde abs(Z(w)) es distinto de cero. Donde w = 2*Pi , signum(Pi*Dirac(w-2*Pi)-Pi*Dirac(w+2*Pi)) = 1 , por lo tanto, phi = -Pi/2 , lo cual es nuevamente lo que esperabamos, ya que z := proc (n) options operator, arrow; cos(2*Pi*n-Pi/2) end proc .

> evalc(phi(w));

-1/2*signum(Dirac(w-2*Pi)-Dirac(w+2*Pi))*Pi

3.2.2 Las series Macroecon?micas vistas como la superposici?n de ciclos recurrentes

En la pr?ctica, las series con informaci?n econ?mica tienen una forma menos suave que una funci?n sinusoidal simple. Ello no quiere decir que los conceptos relacionados con la transformaci?n de Fourier sean dif?ciles de replicar. Para ilustrar este punto, tomemos una serie periodica, x(n), que resulte de la superposici?n de series peri?dicas simples.

> x:=(n)->sum(k*cos((2/k)*Pi*n),k=3..10);

x := proc (n) options operator, arrow; sum(k*cos(2*Pi*n/k), k = 3 .. 10) end proc

El ?ndice k coincide con la longitud de onda de cada serie periodica. Si k va de 3 hasta 10, estar?amos hablando de ciclos de 3 a?os a 10 a?os, lo cual sigue la l?nea de argumentaci?n a que nos referimos en la introducci?n de este cap?tulo. Adem?s, vamos a suponer que las ondas de mayor longitud tienen tambi?n mayor amplitud. Por eso es que cada componente de esta suma es multiplicado por k.  

> plot(x(n),
n=1..100,

labels=["Tiempo","x(n)"],

color=blue,

thickness=1,

linestyle=1,

labeldirections=[HORIZONTAL,VERTICAL],

title="Funcion periodica",

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]);

[Plot]

El lector estar? convencido de que la gr?fica de la serie de tiempo generada por esta funci?n no permite extraer los componentes periodicosde la misma mediante una inspecci?n visual. Sin embargo, el an?lisis de Fourier deber?a permitirnos detectarlos con relativa facilidad.

En esta ocasi?n trabajaremos con una aproximaci?n de la transformaci?n de Fourier utilizando el algoritmo FFT (Fast Fourier Transform) de Maple 8, el cual trabaja con secuencias finitas. La sintaxis consiste en imputar el componente real e imaginario de una secuencia de datos en el dominio del tiempo, y el resultado es el componente real e imaginario de la secuencia de coeficientes de Fourier. Sabemos que cada coeficiente est? relacionado con un harm?nico con longitud de onda w .

Supongamos que tenemos suficientes observaciones. Aqu? trabajaremos con 512. Claro est? que si se trata de a?os, ser?an m?s de las que podemos esperar. Sin embargo, si la unidad fundamental de tiempo fueran meses o d?as, es m?s probable que pudi?ramos acumular tal cantidad de informaci?n. Sin perjuicio de ello, no le prestaremos demasiada antenci?n aqu? a este problema toda vez que los datos provendr?n de la simple sustituci?n de valores en la funci?n x(n) .

> x_r:=array([seq(evalf(x(n)),n=1..512)]):
x_i:=array([seq(0,n=1..512)]):

FFT(9,x_r,x_i):


p_x:=array([seq(abs(x_r[i]+I*x_i[i])^2,i=1..256)]):

S_x:=sum(p_x[i],i=1..256):

P_x:=array([seq(p_x[i]/S_x,i=1..256)]):

listplot(P_x,

color=blue,

thickness=1,

linestyle=1,

labeldirections=[HORIZONTAL,VERTICAL],

title="Espectro de la serie x(n)",

labels=["ciclos por periodo de 512 observaciones","potencia %"],

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]);

[Plot]

Para interpretar los resultados, definiremos un periodo fundamental compuesto de 512 unidades fundamentales de tiempo. El espectro reporta la fecuencia en el eje horizontal y el peso relativo del  harm?nico en el eje vertical. As? pues, si vemos un harm?nico de 50 ciclos cada 512 periodos, entonces significa que la longitud de onda de estos ciclos es de 10 a?os. En el mismo orden de ideas, si la frecuencia es de 170 ciclos por cada 512 periodos, entonces la longitud de onda ser? de 3 a?os. Como vemos, este espectro coincide cercanamente con las caracter?sticas de la funci?n que usamos para generar la serie de tiempo para el ejercicio.

En lo relativo a la fase, debemos esperar un resultado trivial. La gr?fica que se reporta abajo muestra los valores de phi/(2*Pi) en las frecuencias donde el espectro tiene valor distinto de cero. Como vemos, la aproximaci?n de la FFT arroja valores que son cercano a multiplos enteros (positivos o negativos) de 2*Pi , lo cual es equivalente a decir que la serie no muestra desplazamiento alguno. Debe reconocerse que en frecuencias de 8 y 9 ciclos por periodo fundamental se reportan ciertos desplazamientos, muy probablemente resultado de los errores de aproximaci?n del algoritmo usado por Maple 8.

> identificador:=array([seq((1+sign(P_x[i]-.01))/2,i=1..256)]):

phi_x:=array([

seq(identificador[i]*argument(polar(I*x_i[i]+x_r[i])/(2*Pi)),

i=1..256)]):


listplot(phi_x,

color=blue,

thickness=1,

linestyle=1,

labeldirections=[HORIZONTAL,VERTICAL],

title="Fase Normalizada de la serie",

labels=["Desplazamiento en numero de ciclos","potencia %"],

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]);

[Plot]

3.2.3 Variables end?genas, ex?genas y filtros

El concepto an?logo al de  variables end?genas y ex?genas cuando hablamos de se?ales o secuencias de datos es el de se?al de entrada y se?al de salida. La relaci?n entre ambas se da a trav?s de un filtro que est? relacionado con la forma reducida de un modelo que puede provenir de alg?n proceso de optimizaci?n llevado a cabo por los agentes econ?micos.

En el dominio del tiempo, estos filtros pueden pensarse como ponderadores o como coeficientes en un polinomio que, aplicado de alguna forma sobre los valores de la se?al de entrada, la suavizan y desplazan dando lugar a la se?al de salida.

Por ejemplo, a continuaci?n se presenta una funci?n h(v) con una forma un tanto peculiar. El lector puede escoger otra, si as? lo desea, sin embargo veremos en los cap?tulos subsecuentes que este tipo de filtro puede resultar muy ?til.

> h:=seq(i/10,i=0..10),seq((10-i)/10,i=1..10):

listplot([h],

color=blue,

thickness=1,

linestyle=1,

labeldirections=[HORIZONTAL,VERTICAL],

title="Diseno de un Filtro",

labels=["x","ponderador"],

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]);

[Plot]

Podr?amos combinar la secuencia x[n] con la secuencia h[n] , para obtener  g[n] = h[1]*x[n]+h[2]*x[n-1]+h[3]*x[n-2] +...+h[21]*x[n-20] .  Lo que resulta es una especie de promedio m?vil de la se?al de entrada, x, ponderado por los coeficientes del filtro h.  

A esta forma general de combinar la se?al y el filtro se le conoce como convoluci?n, y a este tipo de filtros donde los coeficientes no cambian al pasar el tiempo y que transforman las se?ales mediante combinaciones lineales de sus valores pasados o futuros, se les conoce como LTI (Linear Time Invariant).

La convoluci?n de h y x en el caso que aqu? se presenta produce la se?al de salida que se ve en la gr?fica siguiente.

> g:=n->sum(h[v+1]*x(n-v),v=1..20):
plot([g(n),x(n)],

n=21..200,

color=[blue,red],

thickness=[1,2],

linestyle=[1,2],

labeldirections=[HORIZONTAL,VERTICAL],

title="Se?al de Entrada y Se?al Filtrada",

labels=["Tiempo","g(n)=roja;       x(n)=azul"],

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]);

[Plot]

A continuaci?n veremos que el an?lisis, pero sobre todo, el dise?o de filtros de la clase LTI puede beneficiarse de la aplicaci?n de transformaciones de Fourier a las se?ales y al propio filtro.
Otra vez, usaremos el ejemplo para mostrar, de manera heur?stica, algunas propiedades generales y que el lector interesado puede explorar a profundidad refiri?ndose a la literatura especializada.

Un primer paso cnsiste en comparar  el m?dulo de la se?al de entrada con el m?dulo de la se?al de salida. Ambos m?dulos aparecen en la gr?fica siguiente.

> g_r:=array([seq(evalf(g(n)),n=0..512)]):
g_i:=array([seq(0,n=0..512)]):

FFT(9,g_r,g_i):


p_g:=array([seq(abs(g_r[i]+I*g_i[i]),i=1..256)]):

p_x:=array([seq(abs(x_r[i]+I*x_i[i]),i=1..256)]):


grafica_g:=listplot(p_g,

color=red,

thickness=2,

linestyle=1,

labeldirections=[HORIZONTAL,VERTICAL],

title="Modulo de las Transformaciones de Fourier",

labels=["ciclos por periodo de 512 observaciones","entrada=azul    salida=rojo"],

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]):


grafica_x:=listplot(p_x,

color=blue,

thickness=1,

linestyle=1):


display(grafica_x,grafica_g);

[Plot]


Es sabido que una propiedad muy importante de este tipo de filtros
(LTI), es  que el cociente del m?dulo de la transformaci?n de Fourier de la se?al de salida entre el del la se?al de sentrada es igual al m?dulo de la transformaci?n de Fourier del filtro. Esta es una de las dos implicaciones del  llamado teorema de la convoluci?n.

Esto puede comprobarse con relativa facilidad. A continuaci?n se presentan dos gr?ficas superpuestas. La l?nea de color rojo reporta el cociente del los m?dulos de las transformaciones de las se?ales de salida y entrada. La gr?fica azul presenta el m?dulo de la transformaci?n del filtro, calculado directamente.

Fuera de las diferencias atribuibles al algoritmo que  utiliza Maple 8, ambos resultados son muy similares, especialmente en aquellas frecuencias donde el m?dulo de la se?al de salida es tama?o significativo.

> h_r:=array([seq(h[n],n=1..20),seq(0,n=21..512)]):
h_i:=array([seq(0,n=1..512)]):

FFT(9,h_r,h_i):


p_h:=array([seq(abs(h_r[i]+I*h_i[i]),i=1..512)]):


H_r:=array([seq(abs(g_r[i]+I*g_i[i])/

abs(x_r[i]+I*x_i[i]),

i=1..512)]):


grafica_h_r:=listplot(p_h,

color=blue,

view=[50..450,0..1],

thickness=1,

linestyle=1,

labeldirections=[HORIZONTAL,VERTICAL],

title="Modulo de la transformacion de Fourier del Filtro",

labels=["ciclos por periodo de 512 observaciones","rojo= metodo cociente               azul= metodo directo"],

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]):


grafica_H_r:=listplot(H_r,

color=red,

thickness=2,

linestyle=1):


display(grafica_H_r,grafica_h_r);

[Plot]

Como se ver? en alg?n ejercicio m?s adelante,  puede uno combinar el teorema de convoluci?n con el de invertibilidad de las transformaciones de Fourier, para dise?ar una funci?n de respuesta para las variables de pol?tica econ?mica. Concretamente, puede dise?arse un filtro con una funci?n objetivo definida en el dominio de las frecuencias, y despu?s encontrar el polinomio que corresponde en el dominio del tiempo mediante el cual se fitrar? la se?al de entrada que corresponda.

Una segunda parte del teorema de la convoluci?n es que la fase de la transformaci?n del Fourier del filtro es igual a la diferencia de la fase de la transformaci?n de la se?al de salida menos la de la se?al de entrada. Esto puede comprobarse de la misma manera que lo hicimos para el caso del m?dulo. Abajo se presentan una gr?fica con el desfasamiento calculado por los m?todos. Tres cosas deben llamar la atenci?n:

El desfasamiento es expresado en n?mero de periodos fundamentales en lugar de ciclos. Esto se hizo s?lo con el prop?sito de presentar al lector una manera alternativa de graficar los resultados. Para ello se multiplicaron los valores de phi en cada caso por 512/w .

Los desfasamientos tienen valores muy similares al periodo de cada harm?nico. Es claro que si una serie tiene una longitud de onda de 10 periodos, desfasarla por los mismos 10 periodos da como resultado una onda id?ntica. La l?nea negra y punteada en la gr?fica ilustra d?nde estar?an los valores de cero desplazamiento. En s?ntesis, el filtro no induce ning?n desfasamiento importante en las frecuencias que nos interesan, es decir, donde el m?dulo de la se?al de salida es diferente de cero.

La l?neas obtenidas mediante el m?todo de c?lculo de las diferencias entre las fases de las se?ales de entrada y salida y la obtenida directamente mediante la aplicaci?n del la FFT al filtro son razonablemente similares, sujeto nuevamente a las diferencias de aproximaci?n inherentes al m?todo de c?mputo.

> contador:=array([seq(i,i=1..256)]):

no_fase:=array([seq(512/contador[i],i=1..256)]):


phi_x:=array([seq((512/contador[i])*

min(2,(arctan(x_i[i]/x_r[i])+2*Pi)/(2*Pi)),

i=2..256)]):


phi_g:=array([seq((512/contador[i])*

min(2,(arctan(g_i[i]/g_r[i])+2*Pi)/(2*Pi)),

i=2..256)]):


phi:=array([seq((512/contador[i])*

min(2,(phi_g[i]-phi_x[i]+2*Pi)/(2*Pi)),

i=1..255)]):


phi_h:=array([seq((512/contador[i])*

min(2,(arctan(h_i[i]/h_r[i])+2*Pi)/(2*Pi)),

i=2..256)]):


grafica_phi:=listplot(phi,

color=red,

thickness=2,

linestyle=1):


grafica_no_fase:=listplot(no_fase,

color=black,

thickness=2,

linestyle=2):


grafica_phi_h:=listplot(phi_h,

color=blue,

view=[50..255,0..10],

thickness=1,

linestyle=1,

labeldirections=[HORIZONTAL,VERTICAL],

title="Desfasamiento",

labels=["ciclos por periodo de 512 observaciones"," --# periodos--   rojo=resta  azul=directo  negro=no fase"],

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]):


display(grafica_phi,grafica_phi_h,grafica_no_fase);

[Plot]

3.2.4 Dise?o de filtros y pol?tica contrac?clica

En los p?rrafos precedentes hemos visto c?mo determinar el efecto de ciertos filtros sobre los componentes c?clicos de alguna variable. Lo que ahora  resutar?a interesante conocer es c?mo podemos dise?ar un filtro dados ciertos objetivos sobre la forma de la se?al de salida.

En cierto sentido, lo que debemos hacer es recorrer el mismo camino explorado en este cap?tulo, pero en la direcci?n contraria.

Para tomar el ejemplo m?s sencillo, supongamos que queremos constuir un filtro tal que, en el dominio de las frecuencias, tenga un m?dulo como el que calculamos al dividir los m?dulos de la se?al de salida y de entrada, y una fase como la que result? de restar las fases de las se?ales de entrada y de salida.  

Este filtro tiene como propiedad la amplificaci?n de pr?cticamente todos los harm?nicos, pero especialmente aqu?llos que se encuentran en las frecuencias de entre 50 a 100 ciclos por cada 512 periodos, o bien de 0.10 a 0.20 Hz; o bien con longitud de onda de 5 a 10 periodos. A su vez, que no genere un desfase significativo.

Sabemos que la parte real de la iFFT (inversa de la FFT), corresponder? a los coeficientes del polinomio, h(n), que servir? de filtro a la serie de entrada, x(n), mediante la operaci?n de convoluci?n. Sobra enfatizar que la gr?fica que aparece abajo corresponde muy cercanamente al polinomio que hemos venido usando a trav?s de este ejercicio.

> H_r:=array([seq(
Re(evalc(polar(p_h[i],argument(I*h_i[i]+h_r[i])))),

i=1..512)]):


H_i:=array([seq(

Im(evalc(polar(p_h[i],argument(I*h_i[i]+h_r[i])))),

i=1..512)]):


iFFT(9,H_r,H_i):


IR:=array([seq(Re(H_r[i]+I*H_i[i]),

i=1..512)]):


listplot(IR,

view=[-1..25,0..1.5],

color=blue,

thickness=3,

linestyle=1,

labeldirections=[HORIZONTAL,VERTICAL],

title="Filtro en el dominio del tiempo",

labels=["Tiempo","coeficiente h(n)"],

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]);

[Plot]

A esta gr?fica se le conoce tambi?n como funci?n de Impulso-respuesta, toda vez que muestra la trayectoria que tendr?a la se?al de salida, ir en la gr?fica de abajo,  si la se?al de entrada, u , toma la forma de una pulsaci?n de magnitud 1,  y despu?s regresa a un valor de cero. Por su parte, el m?dulo de la transformaci?n de Fourier de la funci?n de Impulso-respuesta, es conocido como funci?n de Respuesta de frecuencia.

> u:=(x)->piecewise(x>0 and x<1,1):
ir:=(n)-> sum(h(x)*u(n-x),x=0..20):


plot([ir(n),u(n)],

n=0..22,

color=[blue,red],

thickness=[3,2],

linestyle=[2,1],

labeldirections=[HORIZONTAL,VERTICAL],

title="Impulso-Respuesta",

labels=["Tiempo","azul=ir(n)    roja= u(n)"],

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]);


[Plot]


En los ejercicios que siguen veremos c?mo es que estas ideas pueden aplicarse tanto al an?lisis de informaci?n econ?mica como al dise?o de reglas de operaci?n para la pol?tica macroecon?mica.

3.2.5 Usando el modelo

Pregunta 1. ?Cu?les son los componentes c?clicos del PIB de Estados Unidos 1929-2001?

> restart;
with(inttrans):

with(LinearAlgebra):

with(plots):

Warning, the name changecoords has been redefined

En un par de archivos en formato ANSII, los cuales est?n en el disco compacto que acompa?a a este libro, se encuentran los datos del valor del Producto Interno Bruto de los Estados Unidos entre 1929 y 2001, extra?dos de la p?gina de Internet del Sistema de la Reserva Federal (FED). El PIB est? expresado en millardos de d?lares a precios constantes de 1996.

Con fines de ilustraci?n sobre la forma en que Maple 7 importa los datos, en seguida se presenta la sintaxis completa de la extracci?n de datos y su correspondiente gr?fica.

> anos:=ImportVector("c:\\Documents and Settings\\Alejandro Reynoso\\My Documents\\areynoso\\NBER\\Nuevo Libro\\datos_PIBUSA\\anos.out"):
pib:=ImportVector("c:\\Documents and Settings\\Alejandro Reynoso\\My Documents\\areynoso\\NBER\\Nuevo Libro\\datos_PIBUSA\\pib.out"):


pointplot({seq([anos[i],pib[i]],i=1..Dimension(pib))},

color=blue,

thickness=3,

linestyle=1,

labeldirections=[HORIZONTAL,VERTICAL],

title="PIB de los Estados Unidos",

labels=["ano","millardos de dolares de 1996"],

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]);

[Plot]


Dado el comportamiento exponencial de la serie, es dif?cil ver a simple vista la magnitud y duraci?n de las fluctuaciones peri?dicas de esta serie. Por ello, e incluso antes de proceder a calcular la transformaci?n de
Fourier, es recomendable transformar la serie en logaritmos y eliminar el componente de tendencia. Esto se hace en tres pasos:

Transformamos la serie, pib, original calculando el logaritmo natural, lpib.

Estimamos por el m?todo de m?nimos cuadrados ordinarios el par?metro en la expresi?n  lpib = t*beta+epsilon .

Definimos al componente c?clico del PIB como lpib -t*b , donde b es el estimador de beta .

> lpib:=Matrix([seq([log(pib[i])],i=1..Dimension(pib))]):
t:=Matrix([seq([1,i],i=1..Dimension(pib))]):


beta:=Multiply(MatrixInverse(Multiply(Transpose(t),t)),Multiply(Transpose(t),lpib)):


npib:=lpib-Multiply(t,beta):

Siendo entonces npib la serie cuya estructura nos interesa conocer, procedemos a computar su transormaci?n de Fourier.  El periodo fundamental que vamos a escoger es de 64 a?os, ya que el algoritmo de la FFT toma muestras con valores que coincidan con la serie geom?trica 2^n . Ya que tenemos 73 datos, el periodo fundamental m?s cercano ser? de n=6.

> y_r:=array([seq(npib[i,1],i=1..Dimension(pib))]):
y_i:=array([seq(0,i=1..Dimension(pib))]):


FFT(6,y_r,y_i):


p_y:=array([seq(abs(y_r[i]+I*y_i[i])^2,i=1..32)]):

S_y:=sum(p_y[i],i=1..32):

P_y:=array([seq(p_y[i]/S_y,i=1..32)]):

listplot(P_y,

color=blue,

thickness=1,

linestyle=1,

labeldirections=[HORIZONTAL,VERTICAL],

title="Espectro del PIB de Estados Unidos",

labels=["ciclos por periodo de 64 observaciones","potencia %"],

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]);

[Plot]


Los resultados ciertamente llaman la atenci?n por la similitud que muestran con respecto a las ideas m?s antiguas de la din?mica de la actividad econ?mica. El espectro muestra valores significativos en frecuencias de 10, 5, 4,y 3 ciclos cada 64 a?os. Esto implica harm?nicos de longitud de onda de 6,  12, 16 y 21 a?os, aproximadamente. Tambi?n resalta el hecho de que no parece haber un peso importante de los ciclos m?s cortos, como los de 3 y 4 a?os.

Pregunta 2. ?C?mo dise?ar?a, por ejemplo, las leyes fiscales para eliminar los ciclos de 3 a?os y menos?

Antes de contestar la pregunta, valdr?a la pena presentar un caso hipot?tico en el que las autoridades ven una funci?n de demanda agregada del tipo y(t) = mu(t) , donde mu su el componente privado. Supondremos que mu(t) est? conformada por harm?nicos de muy diversas frecuencias.

Pensemos que las autoridades decide usar a los impuestos como instrumento para hacer desaparecer a algunos harm?nicos.

As? pues, si el ingreso disponible es el resultado de aplicar un filtro h(v) al ingreso bruto,  y[d] = sum(h(v)*mu(n-v), v = 0 .. V) ,  entonces la f?rmula de recaudaci?n del gobierno estar? dada por y-(sum(h(v)*mu(n-v), v = 0 .. V)) .

Ahora bien, la pregunta m?s general ser?a, cu?les deben ser los coeficientes del polinomio h(v) , si las autoridades quieren eliminar las fluctuaciones con longitud de onda de 3 a?os o menos, es decir los ciclos de Mitchell.

Una idea ser?a aplicar filtro definido por un promedio m?vil de los ?ltimas tres observaciones, seg?n aparece en la gr?fica siguiente.

> h:=v->piecewise(v>0 and v<=3,1/3,0)+
piecewise(v>10,0,0):

plot(h(v),

v=0..20,

color=blue,

thickness=2,

linestyle=3,

labeldirections=[HORIZONTAL,VERTICAL],

title="Diseno del Filtro en el dominio del Tiempo",

labels=["rezago","ponderador"],

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]);

[Plot]

Si invocamos el teorema de la convoluci?n sabemos que basta con calcular el m?dulo de la transformaci?n de Fourier de a funci?n h(n) para saber si el filtro es capaz de eliminar solamente las ondas de m?s alta  frecuencia. Precisamente esto es lo que hacemos en la gr?fica siguiente.

> h_r:=array([seq(h(n),n=1..64)]):
h_i:=array([seq(0,n=1..64)]):

FFT(6,h_r,h_i):


p_h:=array([seq(abs(h_r[i]+I*h_i[i]),i=1..32)]):


listplot(p_h,

color=blue,

view=[1..32,0..1],

thickness=1,

linestyle=1,

labeldirections=[HORIZONTAL,VERTICAL],

title="Modulo de un promedio movil de 3 anos",

labels=["ciclos por periodo de 64 observaciones","modulo"],

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]);


[Plot]

Efectivamente, las ondas de longitud 3 pr?cticamente desaparecen. Sin embargo, este tipo de filtro (pol?tica de impuestos) cumple solo parcialmente con el objetivo de eliminar a los ciclos de muy alta frecuencia. En efecto, el m?dulo de la transformaci?n se reduce apreciablemente en el caso de ciclos de longitud entre 3 y 6 a?os, sin embargo, todav?a queda una contribuci?n apreciable de los ciclos de las frecuencias m?s altas. Asimismo, y como era de esperarse, los ciclos de muy bajas frecuencias seguir?n teniendo un peso muy importante.  En la siguiente pregunta se parte de la funci?n de respuesta de frecuencia para encontrar una respuesta que, como veremos, atiende de manera m?s eficaz al problema que se plante? aqu?.

Pregunta 3. ?C?mo puede dise?arse las pol?ticas de demanda a partir de la "Respuesta de Frecuencia"

Otro camino que puede seguirse para contestar la misma pregunta de arriba es partir de un dise?o del m?dulo de la transformaci?n de Fourier de un filtro, y por la v?a de calcular la transformaci?n inversa de Fourier, obtener el polinomio que represente la regla para el c?mputo de los impuestos que mejor se ajuste.

Procederemos as? en varios pasos. El primer lugar, especificamos la funci?n H(w) que representa al m?dulo del filtro deseado en el dominio de las frecuencias. Como el periodo fundamental se sugiere de 64 observaciones, estar?amos hablando de eliminar todos aqu?llos harm?nicos con m?s de 21 ciclos por periodo fundamental. Supondremos por ahora que la parte  imaginaria de la transformaci?n de Fourier del filtro es cero en todas las frecuencias.

> H:=w->piecewise(w>0 and w<=21,1,0)+
piecewise(w>21 and w<43,0,0)+

piecewise(w>=43,1,0):


plot(H(w),

w=1..32,

color=blue,

thickness=3,

linestyle=3,

labeldirections=[HORIZONTAL,VERTICAL],

title="Respuesta en Frecuencia",

labels=["ciclos por periodo de 64 observaciones","modulo del filtro"],

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]);

[Plot]

Resulta que la parte real de la transformaci?n inversa de Fourier nos da la informaci?n que estamos buscando. La gr?fica que sigue corresponde a los valores, divididos entre 2,  que tomar?a el polinomio h(v). Esta divisi?n entre 2 obedece a que, como sabemos, a que el espectro es sim?trico a la derecha e izquierda de la frecuencia de 32 ciclos por 64 observaciones. Este polinomio,  corresponde a la funci?n de impulso-respuesta, h(v) , tambu?n referida como IR en notaci?n de los objetos de Maple 8 que hemos venido creando, la cual que efectivamente filtra los  harm?nicos deseados de la se?al de entrada.

> H_w:=array([seq(H(i),i=1..64)]):

H_r:=array([seq(

Re(evalc(polar(H_w[i],argument(0)))),

i=1..64)]):


H_i:=array([seq(

Im(evalc(polar(H_w[i],argument(0)))),

i=1..64)]):


iFFT(6,H_r,H_i):


IR:=array([seq(Re(H_r[i]+I*H_i[i]),

i=1..64)]):


listplot(IR,

color=blue,

view=[1..32,-0.3..0.6],

thickness=1,

linestyle=1,

labeldirections=[HORIZONTAL,VERTICAL],

title="Filtro en el dominio del tiempo",

labels=["Tiempo","coeficiente h(n)"],

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]);

[Plot]

Hay dos observaciones que vale la pena hacer.

En primer lugar, la suma de los coeficientes es igual a la unidad. Eso quiere decir que la potencia total (power) de la serie no cambia con el filtro.

> evalf[5](sum(IR[i],i=1..64));

1.0000

En segundo lugar, si computamos la transformaci?n de Fourier del filtro, obtenemos algo muy similar a la funci?n de respuesta en Frecuencia que se ten?a como objetivo inicial.

> h_r:=array([seq(64*IR[i],
i=1..64)]):


h_i:=array([seq(0,

i=1..64)]):


iFFT(6,h_r,h_i):


p_h:=array([seq(abs(h_r[i]+I*h_i[i]),i=1..32)]):


listplot(p_h,

color=red,

thickness=2,

linestyle=1,

labeldirections=[HORIZONTAL,VERTICAL],

title="Modulo de las Transformaciones de Fourier",

labels=["ciclos por periodo de 64 observaciones","% potencia"],

titlefont=[TIMES,BOLDITALIC,11],

axesfont=[TIMES,ITALIC,8],

labelfont=[TIMES,ITALIC,8]);

[Plot]

En s?ntesis, el filtro que resulta es diferente al promedio m?vil de tres periodos. La regla para el c?mputo de los impuestos, y-(sum(h(v)*mu(n-v), v = 0 .. V)) , tiene m?s coeficientes, algunos negativos y otros positivos, sin embargo, para fines pr?cticos, despu?s del quinto o sexto periodo, podr?an tomarse como nulos. Dichos coeficientes se listan en seguida con fines de ilustraci?n.

> evalf[2](seq(IR[i],i=1..6));

.67, .27, -.14, 0.50e-2, 0.62e-1, -0.51e-1

Lecturas Recomendadas

Antoniu, Andreas. Digital filters: analysis, design and applications. McGraw Hill, New York, 1993

Spiegel, Murray. Teor?a y problemas de an?lisis de Fourier. McGraw Hill, M?xico, 1976

Taylor, Stephen. Modeling Financial Time Series. John Wiley and Sons, Chichester, 1986