Apéndice A — Estadística

El objetivo de este apéndice es complementar la información de algunos procedimientos estadísticos usados en el curso.

Paquetes usados

from scipy.stats import norm
from matplotlib import pylab as plt
import numpy as np
import pandas as pd
import seaborn as sns

A.1 Error estándar

El error estándar está definido como V(θ^) donde θ^ es el valor estimado. No para todas las estadísticas es posible tener una ecuación analítica para calcular V(θ^) y en los casos donde el valor analítico no se puede calcular se puede usar la técnica de Bootstrap.

A.1.1 Media

Una de las estadísticas donde si se puede calcular analíticamente V(θ^) es la media, es decir, se tiene una muestra D con N elementos independientes y idénticamente distribuidos, entonces la media corresponde a

x¯=1NxDx.

El error estándar de x¯ es V(x¯). Para derivar el valor analítico de este error estándar es necesario utilizar la siguiente propiedad de la varianza:

V(iaiXi)=iai2V(Xi),

donde ai representa una constante y las variables aleatorias X son independientes. En lugar de utilizar la definición asumiendo la realización de las variables aleatorias, esto es, cuando D tiene valores, se define la media con respecto a N variables aleatorias, i.e., X¯=1NiNXi. En estas condiciones se observa que para el caso del error estándar de la media la constante es 1N y las variables son independientes entonces

V(X¯)=V(1NiNXi)=iN1N2V(Xi)=1N2iNσ2=NN2σ2=σ2N=σN,

donde σ2 es la varianza de la distribución. Es importante notar que V(Xi) es independiente de i dado XiF para cualquier i, donde la distribución F tiene una varianza σ2 por lo tanto V(Xi)=σ2.

A.1.2 Ejemplo: Media

El siguiente ejemplo complementa la información al presentar el error estándar de la media cuando los datos vienen de una distribución Gausiana. Suponiendo que se tiene 1000 muestras de una distribución Gausiana N(1,4), i.e., μ=1 y σ=2. La error estándar de estimar la media con esos datos está dado por V(μ^)=σN=21000=0.0632.

Continuado con el ejemplo, se simula la generación de esta población de 1000 elementos. El primer paso es iniciar la clase norm (que implementa una distribución Gausiana) para que se simule N(1,4). Es importante notar que el parámetro scale de norm corresponde a la desviación estándar σ.

p1 = norm(loc=1, scale=2)

Usando p1 se simulan 500 poblaciones de 1000 elementos cada una, y para cada una de esas poblaciones se calcula su media. La primera linea crea la muestra D y a continuación se calcula la media por cada población, renglón de D.

D = p1.rvs(size=(500, 1000))
mu = [x.mean() for x in D]

El error estándar es la desviación estándar de mu, el cual se puede calcular con la siguiente instrucción. se tiene un valor de 0.0665, que es similar al obtenido mediante V(μ^).

se = np.std(mu)

Para complementar la información se presenta el histograma de mu donde se puede observar la distribución de estimar la media de una población.

fig = sns.histplot(mu)

A.1.3 Ejemplo: Coeficientes OLS

El error estándar de los coeficientes estimados con mínimos cuadrados se puede calcular de la siguiente forma. El primer paso es utilizar la siguiente identidad

V(AY)=AΣA,

donde A es una matriz y Y es un vector de variables aleatorias. La matriz A en OLS es

A=(XX)1X.

quedando la varianza como

V(w)=AΣA,

donde Σ es la covarianza de Y. Dado que Y tiene una varianza constante entonces Σ=σ2I. Usando esta información se puede derivar la varianza de w de la siguiente manera

V(w)=Aσ2IA=σ2AA=σ2(XX)1X((XX)1X)=σ2(XX)1XX(XX)1=σ2(XX)1

Por lo tanto el error estándar es: se(w)=σ(XX)1.

A.2 Bootstrap

Existen ocasiones donde no se cuenta con una ecuación cerrada para V(θ^), un ejemplo sería la mediana. En aquellas estadísticas donde no se tenga el error estándar no se pueda calcular analíticamente se puede utilizar Bootstrap.

Bootstrap es un procedimiento que permite calcular el error estándar. Suponiendo que se la estadística se calcula mediante la realización de N variables aleatorias, XF, es decir, θ=g(X1,X2,,XN). Por ejemplo, la media es g(X1,X2,,XN)=1NiNXi.

El Bootstrap simula la distribución θ mediante la selección con remplazo de N elementos del conjunto de la muestra D=(x1,x2,,xn) donde xiF. Es decir, se genera un nuevo conjunto Dj=(xj1,xj2,,xjn) donde xj1 podría ser x4 de D y dado que se selecciona con reemplazo entonces x4 podría aparecer otra vez en Dj. Utilizando Dj se puede estimar la estadística θ^j=g(xj1,xj2,,xjn). Bootstrap repite el proceso anterior B donde en cada iteración se selecciona con reemplazo N veces D. Utilizando las θj calculadas se estima V(θ) con la siguiente ecuación

V(θ^)=1Bj=1B(θ^j1BkBθ^k)2.

A.2.1 Ejemplo

Utilizando los datos generados en la se puede calcular el error estándar de la mediana. El primer paso es tener el conjunto D el cual puede ser cualquier renglón de los 500 de la variable D, por simplicidad se toma el primero como se muestra a continuación.

D_mediana = D[0]

La variable D_mediana tiene la muestra D con la que se trabajará para estimar el error estándar de la mediana. Se tienen que generar B repeticiones de muestrear D N veces con reemplazo. Esto se puede implementar usando índices y números aleatorios de [0,N) considerando que en Python el primer índice es 0. Este procedimiento se muestra en la primera linea del siguiente código. El arreglo S contiene los índices para realizar las B muestras, en la segunda linea se itera por los renglones de S y en cada operación se calcula la mediana. Es decir, en cada iteración se está calculando un θ^i que corresponde a la mediana. Finalmente, se calcula la desviación estándar de la lista B y ese valor corresponde a error estándar de la mediana.

S = np.random.randint(D_mediana.shape[0],
                      size=(500, D_mediana.shape[0]))
B = [np.median(D_mediana[s]) for s in S]
se = np.std(B)

se tiene un valor de 0.0735.

Considerando que se generaron 500 poblaciones de 1000 elementos que se encuentra en la variable D se puede visualizar el histograma de las medianas calculadas con D y aquellas obtenidas con Bootstrap. Se guardan estos dos valores en un DataFrame para posteriormente graficar el histograma, como se muestra en el siguiente código y en la .

df = pd.DataFrame(dict(Bootstrap=B, 
                       Muestra=[np.median(x) for x in D]))
fig = sns.histplot(df)                       
Figura A.1: Histograma de la mediana