Regresiones Lineares con Mathematica: m1 vs INPC

Entiéndase por M1 la emisión monetaria primaria e INPC es el índice de precios, i.e. la inflación. Los datos los tomé de banxico (nota: la aplicación en web que tienen en su página está muy buena, punto para ellos):

(*Importar la lista de m1, limpiar los datos y presentarlos en gráfica*)
Clear[m1];
m1 = Import[
   "/Users/Marius/Google Drive/COPYME/Mathematica/Ejercicios/tm/m1.xls"];
m1 = First[m1];
temp = {};
For[i = 1, i < Length[m1], i++,
 temp = Append[temp, First[m1[[i]]]]
 ]
m1 = temp;
Clear[temp];

y además

*Importar datos de INPC, limpiarlos y presentarlos en gráfico *)
Clear[inpc];
inpc = Import[
   "/Users/Marius/Google Drive/COPYME/Mathematica/Ejercicios/tm/inpc.xls"];
inpc = First[inpc];
temp = {};
For[i = 1, i < Length[inpc], i++,
 temp = Append[temp, First[inpc[[i]]]]
 ]
inpc = temp;
Clear[temp];
inpc = Most[inpc];

He limpiado los datos, hay que notar que Banxico, por muy genial que sea su aplicación, sólo me dejó descargar los archivos en Excel y éstos venían con toda la información que le podría pedir al respecto, de modo que he modificado el archivo en Excel antes de importarlo para asegurarme de que ya no tiene la información extra que luego es complicado limpiar y todo quedó en un hermoso vector.

Ahora conjuntaremos los datos en una matriz:

temp = {};
For[i = 1, i < Length[m1], i++,
 t1 = {};
 t1 = Append[t1, m1[[i]]];
 t1 = Append[t1, inpc[[i]]];
 temp = Append[temp, t1];
 Clear[t1];
 ]
m1inpc = temp;
Clear[temp];
Length[m1inpc]
ListPlot[m1inpc]

La razón de hacer esto es que podrán trabajarse como las variables independientes x, i.e. en un modelo y=a x1+ b x2 + j la matriz representa las x. En nuestro caso, en realidad lo que queremos lograr hacer es una regresión donde y sea el diferencial del m1 y las x sean el m1 mismo y el inpc.

Para esto tenemos que generar el vector del resultado y con m1(i)-m1(i-1):

(*Crear la lista de las diferencias de M1, que establezca el crecimiento*)
m1G = {};
For[i = 0, i < Length[m1], i++,
 
 If[Head[m1[[i]]] =!= Real,
  (*j=i+1;
  m1G=Append[m1G,Minus[m1[[j]]]];
  Clear[j];*)Null
  ,
  j = i + 1;
  temp = m1[[j]] - m1[[i]];
  m1G = Append[m1G, temp];
  Clear[temp];
  Clear[j];
  ]
 ]

Ya tenemos lo que necesitamos. Para hacer la regresión usaremos LinearModelFit. En una de sus descripciones:

LinearModelFit: LinearModelFit[{m, v}]
constructs a linear model from the design matrix m and response vector v.

lm = LinearModelFit[{m1inpc, m1G}]
lm["DurbinWatsonD"]
lm["AdjustedRSquared"]
lm["RSquared"]
lm["ANOVATable"]
ListPlot[lm["MeanPredictionErrors"]]

Como podemos ver, es sumamente sencillo hacer una regresión en Mathematica una vez teniendo los datos acomodados de la forma correcta.

Además es super sencillo pedirle que entregue los estadísticos que necesitas, por ejemplo, aquí le hemos pedido el Durbin Watson, la R cuadrada, la R cuadrada ajustada y la tabla ANOVA. Además, he puesto en gráfica los errores de predicción promedio.

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s