0% encontró este documento útil (0 votos)
71 vistas21 páginas

Clase4 DG

Este documento presenta la cuarta clase de un curso de estadística para ciencia de datos. La clase cubre el modelado de distribuciones y la introducción a las relaciones entre variables. Se introducen las distribuciones exponencial y normal, y cómo modelar datos usando estas distribuciones. También se cubren gráficas de dispersión y correlación para explorar las relaciones entre variables.

Cargado por

magonzalez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
71 vistas21 páginas

Clase4 DG

Este documento presenta la cuarta clase de un curso de estadística para ciencia de datos. La clase cubre el modelado de distribuciones y la introducción a las relaciones entre variables. Se introducen las distribuciones exponencial y normal, y cómo modelar datos usando estas distribuciones. También se cubren gráficas de dispersión y correlación para explorar las relaciones entre variables.

Cargado por

magonzalez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 21

Clase Nº4:

Modelación de distribuciones e
introducción a las relaciones entre
variables

Curso:
Estadística para ciencia de datos

Profesor

Nicolás Alvarado

© Nicolás Alvarado
Clase Nº4:
Modelación de distribuciones e introducción a las
relaciones entre variables

Contenido
Resultado de aprendizaje de la clase u objetivos 2
Tema 1: Introducción 3
Tema 2: Distribución exponencial y distribución normal 3
2.1 Distribución exponencial 3
2.2 Distribución normal 8
Tema 3: Gráficas distribución lognormal 11
3.1 Distribuciones lognormal 11
3.2 Generación de números aleatorios 13
Tema 4: Diagramas de dispersión 15
Tema 5: Correlación 19
Tema 6: Ejercicios 19
Tema 7: Conclusión 20
Referencias bibliográficas 20

© Nicolás Alvarado
1
Resultado de aprendizaje de la clase u objetivos

Los modelos son útiles si capturan los aspectos relevantes del mundo real y dejan fuera datos
innecesarios. Posterior al estudio de esta clase, el alumno será capaz de distinguir cuando estos
datos son innecesarios y, de esta manera, podrá modelar distintos tipos de situaciones mediante el
uso de distribuciones.

© Nicolás Alvarado
2
Tema 1: Introducción

La mayoría de las distribuciones que hemos usado hasta ahora son llamadas distribuciones
empíricas debido a que se basan en observaciones empíricas, que son necesariamente muestras
finitas. La alternativa a esto es usar distribuciones analíticas, que son caracterizadas por una
función de distribución acumulada. Se le llama analítica por ser una función matemática, que
usualmente goza de buenas propiedades para hacer análisis (por ejemplo, diferenciabilidad,
continuidad, etc.).

Las distribuciones analíticas pueden ser usadas para modelar distribuciones empíricas. En este
contexto, un modelo es una simplificación del comportamiento de los datos que deja fuera
detalles innecesarios. En esta clase vamos a trabajar, principalmente, con distribuciones analíticas
comunes, pero de una manera menos formal y con más relación a la programación.

Tema 2: Distribución exponencial y distribución normal

2.1 Distribución exponencial


Recordemos que la función de distribución de la distribución exponencial, con parámetro 𝜆, está
dada por la fórmula 𝑃(𝑋 = 𝑥) = 𝜆𝑒 −𝑥𝜆 . De aquí, podemos deducir lo siguiente:
𝑥

𝑃(𝑋 ≤ 𝑥) = ∫ 𝜆𝑒 −𝑡𝜆 𝑑𝑡
0

𝜆 −𝑡𝜆 𝑥
𝑃(𝑋 ≤ 𝑥) = − 𝑒 |0
𝜆
𝑃(𝑋 ≤ 𝑥) = 1 − 𝑒 −𝑥𝜆

El cálculo anterior nos dice que la función de distribución acumulada de la distribución


exponencial de parámetro 𝜆 es 𝑃(𝑋 ≤ 𝑥) = 1 − 𝜆𝑒 −𝑥𝜆 .

NPara graficar en Python ambas funciones podemos hacer lo siguiente. Primero importamos los
módulos necesarios para usar la distribución exponencial:
import numpy as np
from numpy import random
import seaborn as sns

Luego:
for x in [10,100,1000,10000]:
sns.distplot(random.exponential(size=x), hist=False)
plt.show()

© Nicolás Alvarado
3
Así, obtenemos lo mostrado en la siguiente figura:

Figura 1: Gráfico de distribuciones exponenciales


Fuente: Elaboración propia
Si queremos graficar la CDF de la distribución exponencial, una manera fácil y directa de hacerlo es
usando thinkplot.

thinkplot.PrePlot(5)
for x in [4,3,2,1, 0.5]:
xs, ps = thinkstats2.RenderExpoCdf(x, 0, 2.0, 50)
label = r"$\lambda=%g$" % x
thinkplot.Plot(xs, ps, label=label)
thinkplot.Config(title="Función de Distribución Acumulada Exponencial",
xlabel="x", ylabel="CDF", loc="lower right")

© Nicolás Alvarado
4
De esta forma, obtenemos:

Figura 2: CDF de distribuciones exponenciales


Fuente: Elaboración propia

Como ejemplo, estudiemos el tiempo entre llegadas de los nacimientos. En diciembre 18 de 1997,
44 personas nacieron en un hospital en Brisbane, Australia. El tiempo de nacimiento de los 44
infantes fue reportado y el dataset completo se encuentra en el archivo babyboom.dat disponible
en el siguiente enlace: https://github.com/AllenDowney/ThinkStats2.

Lo descargamos usando lo siguiente:

download("https://github.com/AllenDowney/ThinkStats2/raw/master/code/nsfg.py")
download("https://github.com/AllenDowney/ThinkStats2/raw/master/code/analytic.py")
download("https://github.com/AllenDowney/ThinkStats2/raw/master/code/babyboom.dat")

Ahora, importamos el módulo analytic para usar la función ReadBabyBoom():

import analytic

df = analytic.ReadBabyBoom()
diffs = df.minutes.diff()
cdf = thinkstats2.Cdf(diffs, label="actual")

thinkplot.Cdf(cdf)
thinkplot.Config(xlabel="Tiempo entre nacimientos (minutos)", ylabel="CDF")

Podemos ver el output del código anterior en la siguiente figura:

© Nicolás Alvarado
5
Figura 3: CDF del tiempo entre nacimientos
Fuente: Elaboración propia

NReadBabyBoom lee el archivo de los datos y retorna un dataframe con las columnas tiempo,
género, peso y minutos, donde los minutos son el tiempo de nacimiento convertido a minutos
desde medianoche. La variable diffs está definida de tal forma de que podamos contar la
diferencia entre tiempos de nacimientos consecutivos, y la variable cdf es por supuesto la
distribución de los tiempos de llegada.

En la figura anterior podemos ver que la gráfica se parece bastante a la de la función exponencial,
pero ¿cómo podemos estar seguros? Supongamos que 𝑦 = 1 − 𝑒 −𝜆𝑥 , entonces:

𝑦 = 1 − 𝑒 −𝜆𝑥

𝑦 ≈ 𝑒 −𝜆𝑥

log 𝑦 ≈ −𝜆𝑥

Esta es la función inversa del complemento de la CDF de la exponencial. Aquí, con el complemento
de CDF(x) nos referimos a 1-CDF(x). ¿Por qué estamos haciendo este cambio de variable? El
graficar el complemento de la CDF de la exponencial nos permitirá responder a la pregunta sobre
la gráfica anterior.

Para datos de una distribución exponencial, el resultado es una línea recta (¿por qué?). Si
graficamos el complemento de la CDF exponencial de un dataset que creemos que es exponencial,
deberíamos tener una función como la anteriormente calculada. Pero notemos qué nos arroja el
siguiente código:

© Nicolás Alvarado
6
thinkplot.Cdf(cdf, complement=True)
thinkplot.Config(
xlabel="Tiempo entre nacimientos (minutos)",
ylabel="Complemento de la CDF",
yscale="log",
loc="upper right",
)

Figura 4: Gráfica del complemento de la CDF exponencial


Fuente: Elaboración propia

Podemos ver en la figura anterior que el resultado no es exactamente una línea recta, lo que
indica que la distribución exponencial no es un modelo perfecto para estos datos. Lo más probable
es que la suposición, de que un nacimiento es igualmente probable en cualquier momento del día,
no sea exactamente cierta. Sin embargo, podría ser razonable modelar este conjunto de datos con
una distribución exponencial. Con esa simplificación, podemos resumir la distribución con un solo
parámetro.

El parámetro λ puede ser interpretado como una razón; es decir, el número de eventos que
ocurren, en promedio, en una unidad de tiempo. En el ejemplo anterior 44 nacimientos ocurrieron
en 24 horas. Por lo tanto, podemos deducir que la media entre los nacimientos es de 32,7
minutos.

© Nicolás Alvarado
7
2.2 Distribución normal
En esta sección estudiaremos la gráfica y el comportamiento estadístico de la distribución normal
usando Python, más que su estructura teórica. Recordemos que la distribución normal es
caracterizada por dos parámetros, la media 𝜇 y la varianza 𝜎 2 . Si usamos 𝜇 = 0 y 𝜎 = 1 estamos
hablando de la distribución normal estándar. La función de distribución acumulada está definida
por:
𝑥
1 2 ⁄2
Φ(𝑥) = ∫ 𝑒 −𝑡 𝑑𝑡
√2𝜋
−∞

Existen algoritmos para evaluar Φ(𝑥), en Python, de una manera eficiente. Uno de ellos lo da
SciPy: scipy.stats.norm es un objeto que representa la distribución normal; provee un método, cdf,
que evalúa la CDF normal estándar. Por ejemplo,

Noimport scipy.stats

scipy.stats.norm.cdf(0)

arroja 0,5. Este resultado es correcto ya que la mediana de la distribución normal estandarizada es
0 (al igual que la media), y la mitad de los valores caen debajo de la media, lo que nos dice que
CDF(0) es 0,5.

Nuevamente thinkplot nos permite graficar la CDF de la normal. Usamos lo siguiente:

mus = [0, 1, 2, 3, 4]

sigmas = [1,0.8, 0.5, 0.4, 0.3]

for mu, sigma in zip(mus, sigmas):


xs, ps = thinkstats2.RenderNormalCdf(mu=mu, sigma=sigma, low=-1.0, high=5.0)
label = r"$\mu=%g$, $\sigma=%g$" % (mu, sigma)
thinkplot.Plot(xs, ps, label=label)

thinkplot.Config(title="CDF Normal", xlabel="x", ylabel="CDF", loc="upper left")

Obtenemos lo mostrado en la siguiente imagen.

© Nicolás Alvarado
8
Figura 5: CDF de distribuciones normales
Fuente: Elaboración propia

Anteriormente estudiamos la distribución de los pesos de los nacimientos en la NSFG. Veamos


cómo graficar la CDF empírica de los pesos para todos los nacimientos exitosos y la CDF de una
normal con la misma media y varianza. Primero descargamos los datos necesarios y luego
importamos los módulos a utilizar:
download("https://github.com/AllenDowney/ThinkStats2/raw/master/code/nsfg.py")
download("https://github.com/AllenDowney/ThinkStats2/raw/master/code/first.py")
download("https://github.com/AllenDowney/ThinkStats2/raw/master/code/2002FemPreg.dct")
download("https://github.com/AllenDowney/ThinkStats2/raw/master/code/2002FemPreg.dat.gz")

import nsfg
import first

Ahora definimos nuestro dataset y los pesos:


Npreg = nsfg.ReadFemPreg()
weights = preg.totalwgt_lb.dropna()

Finalmente, estimamos los parámetros recortando los outliers para producir un mejor ajuste y
graficamos.
mu, var = thinkstats2.TrimmedMeanVar(weights, p=0.01)
print("Media, Varianza", mu, var)

© Nicolás Alvarado
9
sigma = np.sqrt(var)
print("Sigma", sigma)
xs, ps = thinkstats2.RenderNormalCdf(mu, sigma, low=0, high=12.5)

thinkplot.Plot(xs, ps, label="model", color="red")

cdf = thinkstats2.Cdf(weights, label="data")

thinkplot.PrePlot(1)
thinkplot.Cdf(cdf)
thinkplot.Config(title="Pesos de los nacimientos",
xlabel="Pesos en libras", ylabel="CDF")

Lo anterior nos arroja lo mostrado en la siguiente figura. Además, el output anterior nos dice que:

Media, Varianza 7.280883100022579 1.5452125703544897


Sigma 1.2430657948614343

Figura 6: CDF empírica de los pesos de los nacimientos


Fuente: Elaboración propia

Notemos que bajo el percentil 10 existe una diferencia entre los datos y el modelo; una de las
curvas está por sobre la otra. Específicamente, esto nos dice que hay nacimientos más livianos de
los que podríamos esperar en una distribución normal. Si estamos interesados en los nacimientos
prematuros, sería importante mencionar esta parte de la distribución como un dato con peso. Esto
implica que podría no ser apropiado usar el modelo de la distribución normal.

© Nicolás Alvarado
10
Tema 3: Gráficas distribución lognormal

3.1 Distribuciones lognormal

Si el logaritmo de un conjunto de valores tiene distribución normal, los valores tienen una
distribución log-normal. Su función de probabilidad es de la forma:

1 ln(𝑥 − 𝜇)2
𝑃(𝑋 = 𝑥) = exp (− )
𝑥𝜎√2𝜋 2𝜎 2

De lo anterior es posible deducir que la CDF de la log-normal es la misma que la CDF de la normal,
con la única distinción de que sustituimos 𝑥 por 𝑙𝑜𝑔 𝑥, es decir 𝑃(𝑋 ≤ 𝑥) = 𝛷(𝑙𝑛 𝑥 − 𝜇)/(𝛷(
𝑙𝑜𝑔 (𝑥) − 𝜇)/𝜎)).

Para ejemplificar la distribución lognormal, usemos lo siguiente:


download("https://github.com/AllenDowney/ThinkStats2/raw/master/code/brfss.py")
download("https://github.com/AllenDowney/ThinkStats2/raw/master/code/CDBRFS08.ASC.gz")

Importamos el módulo brfss y creamos un dataframe:

import brfss

df = brfss.ReadBrfss()
weights = df.wtkg2.dropna()

Definamos una función para estimar los parámetros de una distribución normal y para graficar los
datos y un modelo normal.
def MakeNormalModel(weights):
cdf = thinkstats2.Cdf(weights, label="pesos")
mean, var = thinkstats2.TrimmedMeanVar(weights)
std = np.sqrt(var)
print("n, mean, std", len(weights), mean, std)

xmin = mean - 4 * std


xmax = mean + 4 * std

xs, ps = thinkstats2.RenderNormalCdf(mean, std, xmin, xmax)


thinkplot.Plot(xs, ps, label="modelo", linewidth=4, color="red")
thinkplot.Cdf(cdf)

Ahora, codificamos la distribución de los pesos de un adulto y de un modelo normal.

MakeNormalModel(weights)
thinkplot.Config(
title="Escala lineal, peso adultos",
xlabel="Peso en kilos",
ylabel="CDF",

© Nicolás Alvarado
11
loc="upper right",
)

Podemos ver en la siguiente figura que esto no es un buen ajuste.

Figura 7: Comparación de distribución normal


Fuente: Elaboración propia

Con el siguiente código podemos crear un gráfico normal. Usaremos el peso de los adultos.

def MakeNormalPlot(weights):

mean, var = thinkstats2.TrimmedMeanVar(weights, p=0.01)


std = np.sqrt(var)

xs = [-5, 5]
xs, ys = thinkstats2.FitLine(xs, mean, std)
thinkplot.Plot(xs, ys, color="0.8", label="modelo")

xs, ys = thinkstats2.NormalProbability(weights)
thinkplot.Plot(xs, ys, label="peso")

Ahora, aplicamos lo siguiente para hacer un par de gráficos comparativos:


MakeNormalPlot(weights)
thinkplot.Config(
title="Peso de adultos, gráfica normal",
xlabel="Peso en kilos",
ylabel="CDF",
loc="upper left",
)

MakeNormalPlot(log_weights)

© Nicolás Alvarado
12
thinkplot.Config(
title="Peso adultos, gráfica lognormal",
xlabel="Peso en log kg",
ylabel="CDF",
loc="upper left",
)

Figura 8: Comparación entre gráfica normal y lognormal


Fuente: Elaboración propia

De la comparación anterior podemos notar la diferencia entre ambas gráficas. Es claro que el
ajuste lognormal, en este caso, es mucho más preciso que el normal.

3.2 Generación de números aleatorios

Las funciones analíticas de distribución acumulada pueden ser usadas para generar números
aleatorios con una función de distribución dada, 𝑝 = 𝐶𝐷𝐹(𝑥).

Si existe una forma eficiente de calcular la inversa de una CDF, podemos generar valores aleatorios
con la distribución apropiada. Esto se hace escogiendo p de una distribución uniforme entre 0 y 1,
y luego tomando 𝑥 = 𝐼𝐶𝐷𝐹(𝑝). Por ejemplo, recordemos que la CDF de la distribución
exponencial está dada por 𝑝(𝑥) = 1 − 𝑒 −𝑥𝜆 . Luego, al despejar x se tiene 𝑥 = − 𝑙𝑜𝑔 (1 − 𝑝)/𝜆 .
Ahora, para usar esto en Python importamos el módulo random y numpy (as np) y luego definimos
la siguiente función

def expovariate(lam):

p = random.random()
x = -np.log(1-p)/lam

return x

© Nicolás Alvarado
13
La función expovariate toma el parámetro lambda (lam) y retorna un valor aleatorio escogido de la
distribución exponencial con parámetro lam. Por otra parte, para mostrar gráficamente que está
pasando ejecutamos el siguiente código

t = [expovariate(lam=2) for _ in range(1000)]

cdf = thinkstats2.Cdf(t)

thinkplot.Cdf(cdf, complement=True)

thinkplot.Config(xlabel="Variable exponencial", ylabel="CCDF", yscale="log")

El output de este código podemos verlo en la siguiente figura:

Figura 9: CCDF de una variable exponencial


Fuente: Elaboración propia
Para cerrar esta sección nos preguntamos lo siguiente: ¿por qué modelamos? Una discusión
permanente dentro del contexto de las probabilidades y la estadística es que muchos de los
fenómenos que ocurren pueden ser modelados con alguna distribución analítica. Como todos los
modelos, las distribuciones analíticas son abstracciones, lo que significa que se dejan afuera detalles
que son considerados irrelevantes. Por ejemplo, una distribución observada podría tener errores de
medición específicos de la muestra; los modelos analíticos suavizan estas peculiaridades.

Por otra parte, los modelos analíticos son una forma de comprimir datos. Cuando un modelo se
ajusta a un dataset de buena manera, un conjunto pequeño de parámetros puede resumir una gran
cantidad de datos. A veces resulta sorprendente cuando los datos de un fenómeno natural se
ajustan a una distribución analítica, pero esas observaciones pueden dar información sobre los
sistemas físicos. A veces podemos explicar cuando una distribución tiene una forma en particular.

© Nicolás Alvarado
14
Por ejemplo, consideremos la siguiente función de distribución acumulada 𝐶𝐷𝐹(𝑥) = 1 −
(𝑥/𝑥𝑚 )𝛼 . En la fórmula anterior los parámetros 𝑥𝑚 y 𝛼 determinan la ubicación y la forma de la
distribución. El primer parámetro es el mínimo valor posible. Esta CDF es la función de distribución
acumulada de Pareto.

Una forma de manejarla en Python es la siguiente:

xmin = 0.65

thinkplot.PrePlot(5)

for alpha in [2, 1.5, 1, 0.75, 0.5]:

xs, ps = thinkstats2.RenderParetoCdf(xmin, alpha, 0, 10.0, n=100)


thinkplot.Plot(xs, ps, label=r"$\alpha=%g$" % alpha)

thinkplot.Config(title="CDF Pareto", xlabel="x", ylabel="CDF", loc="lower right")

En el código escrito, fijamos un mínimo y luego variamos el parámetro 𝛼 para estudiar el


comportamiento de la función. Variando los valores de los mínimos podemos ver la diferencia entre
distribuciones. Para un mínimo menor, tenemos las curvas con un crecimiento más veloz entre 0 y
2. Luego, su estabilización es más pronta que en el caso del mínimo mayor.

La distribución anterior se llama distribución de Pareto. Las distribuciones de Pareto son a menudo
el resultado de procesos generativos con retroalimentación positiva (los llamados procesos de
apego preferencial). También, las distribuciones analíticas nos llevan a usar herramientas de análisis
matemático, pero vale la pena recordar que todos los modelos son imperfectos. Los datos del
mundo o la vida real nunca se ajustarán a una distribución analítica de manera perfecta. Los modelos
son útiles si capturan los aspectos relevantes del mundo real y dejan fuera los detalles innecesarios.
Pero dado este punto es natural preguntarse qué es relevante o innecesario. Esto, por lo general,
depende explícitamente en que se quiera hacer con el modelo.

Tema 4: Diagramas de dispersión

Hasta ahora solo hemos mirado una variable de manera simultánea. En esta sección veremos la
relación entre dos variables. Dos variables están relacionadas si conociendo una, nos proporciona
información sobre la otra. Por ejemplo, peso y altura están relacionadas; las personas que son más
altas tienden a ser más pesadas. Es claro eso sí, que no es una relación perfecta ya que existe gente
pequeña que es pesada como también personas altas que son livianas. Pero si uno quiere intentar
adivinar el peso de una persona, sería más acertado sabiendo la altura de ella.

Una de las maneras más usuales y fáciles para estudiar la relación entre dos variables es hacer
diagramas de dispersión. Lamentablemente esto no siempre es sencillo. Usemos el siguiente

© Nicolás Alvarado
15
ejemplo. Comencemos por descargar los datos del Sistema de Vigilancia de Factores de Riesgo del
Comportamiento (BRFSS).

download("https://github.com/AllenDowney/ThinkStats2/raw/master/code/brfss.py")
download("https://github.com/AllenDowney/ThinkStats2/raw/master/code/CDBRFS08.ASC.gz")

Luego importamos el módulo brfss y creamos nuestro dataframe:

import brfss

df = brfss.ReadBrfss(nrows=None)

Ahora, definimos (para así usar) la siguiente función:

def SampleRows(df, nrows, replace=False):

indices = np.random.choice(df.index, nrows, replace=replace)


sample = df.loc[indices]

return sample

Esta función nos permite tomar un subconjunto aleatorio del dataset. Ahora usando lo siguiente,
definimos las variables altura y peso:

sample = SampleRows(df, 100)


heights, weights = sample.htm3, sample.wtkg2

Luego, graficamos usando una muestra de tamaño 100:

thinkplot.Scatter(heights, weights, alpha=0.7, color='red')

thinkplot.Config(xlabel='Altura (cm)',
ylabel='Peso (kg)',
axis=[140, 210, 20, 200],
legend=False)

El resultado de este código se ve en la siguiente figura y podemos notar como cierta cantidad de
puntos se acumulan en una parte de la gráfica. Podemos decir de esto que de alguna manera las
variables presentan una correlación.

© Nicolás Alvarado
16
Figura 10: Correlación entre peso y altura
Fuente: Elaboración propia

¿Qué pasa si aumentamos el tamaño de la muestra? Veamos en las siguientes figuras:N

© Nicolás Alvarado
17
Figura 11: Correlación entre peso y altura con mayor muestra
Fuente: Elaboración propia

¿Existe alguna relación entre las gráficas mostradas? ¿Cuál es la diferencia principal al ir
aumentando el tamaño de la muestra? Los datos se agrupan en columnas ya que están
redondeados. Se puede reducir este efecto agregando algo de ruido aleatorio a los datos. Una
opción natural es usar la función Jitter.

La función Jitter, en ThinkStats, usa ruido con una distribución uniforme. Cambiemos un poco esto
usando una distribución normal:

def Jitter(values, jitter=0.5):

n = len(values)
return np.random.normal(0, jitter, n) + values

La distribución normal hace un mejor trabajo dando una visión más borrosa, en cambio la
distribución uniforme puede ser más acertada respecto a los datos.

heights = Jitter(heights2, 0.55)


weights = Jitter(weights2, 0.15)

thinkplot.Scatter(heights, weights, alpha=0.65, color='green')

thinkplot.Config(xlabel='Altura (cm)',
ylabel='Peso (kg)',
axis=[140, 210, 20, 200],
legend=False)

En la medida que aumentamos el ruido las columnas desaparecen. Dado esto, surge un problema
nuevo: saturación. La saturación se puede ver en los sectores donde queda una cantidad excesiva
de puntos solapados. Si graficamos lo anteriormente mencionado las gráficas no serán tan oscuras

© Nicolás Alvarado
18
como debiesen ser, lo que significa que los outliers son más oscuros de lo que deberían ser. Lo
anterior hace que pensemos en que los datos están más dispersos de lo que en realidad están.

Tema 5: Correlación

Una correlación es un estadístico que mide la relación entre dos variables. El desafío en medir una
correlación es que las variables que queremos comparar a menudo no tienen las mismas unidades.
Incluso si tienen las mismas, es altamente probable que tengan diferentes distribuciones. Hay dos
soluciones comunes para estos problemas: transformar cada valor a su puntaje estándar, que es el
número de desviaciones estándar de la media. Esta transformación nos permite definir la
correlación de Pearson. Transformar cada valor a su rango, que es indexarlo en una lista ordenada
de valores. Dado esto, podemos definir la correlación de Spearman.

Si 𝑋 es una serie de 𝑛 valores, 𝑥𝑖 , podemos convertir cada uno de ellos a sus puntajes estándar
haciendo la siguiente transformación: 𝑧 = (𝑥𝑖 − 𝜇)/𝜎. En la fórmula anterior, 𝜇 es la media y 𝜎 la
desviación estándar.

Tema 6: Ejercicios

• En el BRFSS, la distribución de alturas es normal con parámetros 𝜇 = 178 cm y 𝜎 = 7,7


cm para hombres y 𝜇 = 163 cm y 𝜎 = 7,3 cm para mujeres. ¿Cuál es el porcentaje de la
población que está entre 5’10’’ y 6’? ¿Cuántos son hombres y cuántas son mujeres? Entre
5' y 5'9'', ¿cuántos son hombres y cuántas son mujeres?

• Supongamos que la distribución de la altura de las personas es Pareto con parámetros,


𝑥𝑚 = 1 y 𝛼 = 1,7. Dado esto, nuestro mínimo es 1m y la mediana 1,5. Grafique esta
distribución. ¿Cuánto es la media de las alturas? ¿Qué fracción de la población es más
baja que la media? Si hay 7 billones de personas, ¿cuántas personas podrían medir más
de 1km? ¿Cuánto podría medir la persona más alta?

• Repita el ejercicio anterior cambiando el mínimo a 0,5m y 𝛼 = 1,2.

• La función de distribución acumulada de la distribución de Weibull está dada por


𝑘
𝐶𝐷𝐹(𝑥) = 1 − 𝑒 (𝑥/𝜆) . Encuentre una transformación que haga que la distribución de
Weibull se vea similar a una línea recta. Encuentre la pendiente y el intercepto.

• Las distribuciones de riqueza e ingresos son modeladas a veces usando las distribuciones
Pareto y lognormal. Compárelas usando la Current Population Survey (CPS) que se
encuentra en el repositorio del libro principal del curso.

© Nicolás Alvarado
19
Tema 7: Conclusión
En esta clase estudiamos a fondo la distribución exponencial y la distribución normal. Además, se
habló sobre la distribución lognormal y su relación con la distribución normal. Por otra parte, se
trabajó la manipulación de código para la gráfica de funciones de distribución acumulada. Además,
se introdujeron los diagramas de dispersión con el fin de comenzar a estudiar relación, y aún más,
correlación entre dos variables.

Referencias bibliográficas

• Casella, G. and L. Berger, G. (2002). Statistical Inference. Duxbury Advanced Series.


• Downey, A. (2014). Think Stats. O'Reilly.

© Nicolás Alvarado
20

También podría gustarte