30 jun 2014

Estadística descriptiva con Matlab


Una forma de analizar problemas en estadística consiste en utilizar técnicas que sinteticen la información contenida en la muestra. (tales como medias muéstrales, varianza muestral, mínimos cuadrados, etc.). Esta parte de la estadística recibe el nombre de estadística descriptiva (Donato, 2013). Existen estadísticos descriptivos básicos, como la media, moda, mediana, etc. Utilizando los comandos básicos de MATLAB, se puede acceder a estos estadísticos. Nota, se utilizan como variables el PIB per cápita (US$), inflación anualizada y el desempleo publicado por el Banco Central de la República Dominicana, 1991-2013.

%Crea una matriz con los datos
>> data1 = [t, pibpc, inflacion, desempleo] 

1.1. Medidas de posición central

Creada una matriz de datos, matlab permite accedes a los estadísticos de esa matriz por fila o columna según sea el caso. Suponiendo el caso de la media se pueden especificar los siguientes comandos:

% Media de la inflación, entre 1991-2013.
>> mean(inflacion)

ans =

    9.2752

Creando una matriz de datos (data = [inflacion, desempleo]), el comando anterior permite obtener un vector de medias, correspondientes a cada una de las columnas de la matriz. En el ejemplo siguiente el primer valor representa la media de la inflación y el segundo del desempleo para el periodo completo.

>> mean(data)    %calcula un vector de media por columna

ans =

    9.2752   16.1261

>> mean(data, 2)     %calcula un vector de media por fila

En el comando anterior, el 2 indica al programa que trabaja por fila y no por columna, como está especificado por default.

------------------------------------------------------------------------
Diferencia entre trabajar por filas o por columnas en Matlab:
Debido a que se mención anteriormente se especificará la diferencia de trabajar por fila o por columnas, ya que se hará referencia indistintamente en lo adelante. Tomando el ejemplo de la Universidad Carlos III de Madrid:

% Suma filas
sum(tornillos,1)

ans =

     18 80 18 1

% Suma columnas
sum(tornillos,2)

ans =

     4  76 37
------------------------------------------------------------------------

Una forma adicional de calcular la media aritmética es combinando los comandos sum y length, [sum(desempleo)/length(desempleo) ] . también se puede acceder a la media de una parte especifica de un vector o matriz. El siguiente comando corresponde al cálculo de la media de los últimos 4 año (observaciones) de la muestra.

>> mean(desempleo(end-3:end))

ans =

   14.6500

En la próxima tabla se resumen una serie de comandos relacionados con la media

mean(data)   
%calcula un vector de media por columna

sum(desempleo)/length(desempleo)
mean(data, 2)    
%calcula un vector de media por fila
mean(X(end-3:end))
%Especifica la dimensiones de donde se desea obtener
nanmean()
%Calcula la media ignorando aquellos datos perdidos


geomean()
%calcula la media geométrica
harmmean ()
%calcula la media armónica


trimmean (a, y)
%Calcula la media de a, excluyendo y percentiles. Útil cuando nos enfrentamos a datos con alta volatilidad
data= una matriz de datos

 En el caso de la media cuadrática, no existe en matlab un comando que permita calcularla, por tanto hay que desarrollarla desde cero:

%% Media cuadratica
me_ancua_des = desempleo.*desempleo;
   sum(me_ancua_des);
     ans/length(me_ancua_des);
  sqrt(ans)

En el caso de la mediana, aplican los mismos parámetros y recomendaciones citados anteriormente, con la excepción de que el comando a utilizar ahora es:


median(data)   
%calcula un vector de medianas por columna
mode(data) 
%calcula la moda
max(x); min(x) 



1.2. Medidas de dispersión 

El comando Std (), regresa la desviación estándar  de una muestra especifica. 

>> std (data)

ans =

    8.9950    1.9231

El comando std (a, flag, dim), permite obtener la DS corregida y el segundo momento de la muestra y dim, permite especificar si se desea trabajar con las filas o con las columnas. En la próxima tabla se resumen un conjunto de comandos útiles para obtener medidas de dispersión.

std (data)
%Calcula la desviación estándar
Sqrt(sum((X-mean(X)).^2)/length(X))
var (data)
%Varianza corregida
sum((X-mean(X)).^2)/length(X)
mad ()
%Desviación absoluta respecto media
moment(a, order, dim)
% Devuelve los momentos centrales de cualquier orden


range(data)
%Devuelve el rango de una serie de datos
iqr(data)
%regresa el  rango intercuartilico
IQR = prctile(x,75)‐prctile(x,25)


Estadígrafos de posición

prctile (data, 90)
%Regresa un percentil dentro de un intervalo [0 100]
quantile (a, p, dim)
%igual a prctile, pero permite trabajar fila y columna
Q5 = quantile(desempleo, .5)
%equivalente al cálculo de la mediana


Estadígrafos de forma

   skewness (desempleo)
%devuelve la oblicuidad (asimetría) de una distribución
   kurtosis (desempleo)
%Curtosis
jbtest(x)                   Jarque Bera                                    .


En el próximo comando permite obtener un histograma, en este caso a partir de una representación de números aleatorios.

j=randn(1,1e5)
     hist(j,50)  %El 50, especifica el numero de clases que se desea


[n,x]=hist(j,50)  %Guarde las frecuencia absolutas (n) y valores de clase


1.3. Tablas y matrices de datos

Las tablas de frecuencia de variables cualitativas se obtiene mediante el comando tabulate() regresa una tabla de frecuencia absoluta y relativa de la muestra. 

>> feminicidios = [2 0 4 3 2 2 1 1 0 1 2 3 0 1 2 0 5 2 3 2 0 1 0 2 1]'

>> tabulate(feminicidios)
  Value    Count   Percent
      0        6     24.00%
      1        6     24.00%
      2        8     32.00%
      3        3     12.00%
      4        1      4.00%
      5        1      4.00%

% Permite establecer la frecuencia relativa entre [0 1]
tabla      = tabulate(feminicidios)
tabla(:,3) = tabla(:,3)/100

% calcular las frecuencias acumuladas en matlab
abs_acum = cumsum(tabla(:,2))
rel_acum = cumsum(tabla(:,3))
tabla=[ tabla(:,1) tabla(:,2) abs_acum tabla(:,3) rel_acum ]

tabla =

         0    6.0000    6.0000    0.2400    0.2400
    1.0000    6.0000   12.0000    0.2400    0.4800
    2.0000    8.0000   20.0000    0.3200    0.8000
    3.0000    3.0000   23.0000    0.1200    0.9200
    4.0000    1.0000   24.0000    0.0400    0.9600
    5.0000    1.0000   25.0000    0.0400    1.0000

% permite comparar gráficamente frecuencias absolutas con acumuladas
bar([tabla(:,2) tabla(:,3)])


El comando crosstab(), permite también cruzar tablas.

sexo = [1 0 1 0 1 0 0 1]
fuma = {'si' 'si' 'no' 'no'  'no' 'no' 'si' 'no'}

>> crosstab(fuma, sexo)

ans =

     2     1
     2     3

 Otros comando de interés es cov() que permite obtener la matriz de varianza covarianzas.

>> cov(data)  %Matriz de varianzas covarianzas del desempleo y la inflación

ans =

   80.9104    3.2051
    3.2051    3.6984

Corr() permite a su vez obtener la matriz de correlaciones.[1]


>> corr(data)

ans =

    1.0000    0.1853
    0.1853    1.0000

[RHO,PVAL] = CORR(...) , permite además obtener el p-value. [2]

RHO =

    1.0000    0.1853
    0.1853    1.0000


PVAL =

    0.0000    0.3973
    0.3973         0

Por último, el comando plot, nos permite acceder al diagrama de dispersión[3]

x  = [47 62 65 70 70 78 95 100 114 118 124 127 140 140 140 150 152 164];
y = [38 62 53 67 84 79 93 106 117 116 127 114 134 139 142 170 149 154];
   plot(x,y,'.');



%Permite agregar la línea de regresión
     L = polyfit(x,y,1);
    YE = polyval(L,x);
plot(x,y,'.',x,YE,'r');







[2] If PVAL(i,j) is small, say less     than 0.05, then the correlation RHO(i,j) is significantly different
    from zero.


[1] En http://www.fce.unal.edu.co/wiki/images/e/e6/entregafinalmatlab.pdf se presenta una buena explicación de como usar los opciones de este comando 



REFERENCIAS BIBLIOGRÁFICAS

Gil, Cristian (2005). “Analisis estadísticos con Matlab”. Universidad Nacional de Colombia. Bogotá, D.F.

Universidad Carlos III de Madrid. Estadística descriptiva con Matlab/Octave. Departamento de estadísticas.

Estadística descriptiva. Facultad de física

Lopez, Beatriz (2009). Estadística. Disponible en: http://eio.usc.es/pub/pateiro/files/iq0809pateiro.pdf








Recesión plot en R usando ggplot (recession plot in r)

En el siguiente ejemplo se simular y replica -parcialmente- un ejemplo usado por el FMI para ilustrar la importancia del uso de series de ti...