Capítulo 1. Probabilidad Probabilidad

Este trabajo se ha traducido utilizando IA. Agradecemos tus opiniones y comentarios: translation-feedback@oreilly.com

El fundamento de la estadística bayesiana es el teorema de Bayes, y el fundamento del teorema de Bayes es la probabilidad condicional.

En este capítulo, empezaremos con la probabilidad condicional, derivaremos el teorema de Bayes y lo demostraremos utilizando un conjunto de datos reales. En el capítulo siguiente, utilizaremos el teorema de Bayes para resolver problemas relacionados con la probabilidad condicional. En los capítulos siguientes, haremos la transición del teorema de Bayes a la estadística bayesiana, y explicaré la diferencia.

Linda la Banquera

Para introducir la probabilidad condicional, utilizaré un ejemplode un famoso experimento de Tversky y Kahneman, que plantearon la siguiente pregunta:

Linda tiene 31 años, es soltera, franca y muy brillante. Se licenció en Filosofía. Como estudiante, le preocupaban mucho los temas de discriminación y justicia social, y también participó en manifestaciones antinucleares. ¿Qué es más probable?

  1. Linda es cajera de banco.

  2. Linda es cajera de banco y participa activamente en el movimiento feminista.

Mucha gente elige la segunda respuesta, presumiblemente porque parece más coherente con la descripción. Parece poco característico si Linda essólo una cajera de banco; parece más coherente si además es feminista.

Pero la segunda respuesta no puede ser "más probable", como pide la pregunta. Supongamos que encontramos 1.000 personas que se ajustan a la descripción de Linda y 10 de ellas trabajan como cajeros de banco. ¿Cuántas de ellas son también feministas? Como mucho, las 10; en ese caso, las dos opciones son igualmenteprobables. Si son menos de 10, la segunda opción es menos probable, pero no hay forma de que la segunda opción sea más probable.

Si te inclinabas por la segunda opción, estás en buena compañía. El biólogoStephen J. Gould escribió

Me gusta especialmente este ejemplo porque sé que la [segunda] afirmación es la menos probable, y sin embargo, un pequeño homúnculo en mi cabeza sigue saltando y gritándome: "pero no puede ser sólo una cajera de banco; lee la descripción".

Si la personita de tu cabeza sigue siendo infeliz, tal vez este capítulo te ayude.

Probabilidad

Llegados a este punto, debería dar una definición de "probabilidad", pero esaresulta ser sorprendentemente difícil. Para no quedarnos atascados antes de empezar, utilizaremos por ahora una definición sencilla y la perfeccionaremos más adelante: Unaprobabilidad es una fracción de un conjunto finito.

Por ejemplo, si encuestamos a 1.000 personas, y 20 de ellas son cajeros de banco, la fracción que trabaja como cajero de banco es 0,02 o 2%. Si elegimos a una persona de esta población al azar, la probabilidad de que sea cajero de banco es del 2%. Con "al azar" quiero decir que todas las personas del conjunto de datostienen la misma probabilidad de ser elegidas.

Con esta definición y un conjunto de datos adecuado, podemos calcular probabilidades por recuento. Para demostrarlo, utilizaré datos de la Encuesta Social General (EGS ).

Utilizaré pandas para leer los datos y almacenarlos en unDataFrame.

import pandas as pd

gss = pd.read_csv('gss_bayes.csv', index_col=0)
gss.head()
año edad sexo polviews partyid indus10
caseid
1 1974 21.0 1 4.0 2.0 4970.0
2 1974 41.0 1 5.0 0.0 9160.0
5 1974 58.0 2 6.0 1.0 2670.0
6 1974 30.0 1 5.0 4.0 6870.0
7 1974 48.0 1 5.0 4.0 7860.0

El DataFrame tiene una fila para cada persona encuestada y una columna para cada variable que seleccioné.

Las columnas son

  • caseid: Id. del encuestado (que es el índice de la tabla).

  • year: Año en que se encuestó al encuestado.

  • age: Edad del encuestado en el momento de la encuesta.

  • sex: Hombre o mujer.

  • polviews: Las opiniones políticas van de liberales a conservadoras.

  • partyid: Afiliación a un partido político: Demócrata, republicano o independiente.

  • indus10: Código parala industria en la que trabaja el encuestado.

Veamos estas variables con más detalle, empezando porindus10.

Fracción de Banqueros

El código de "Banca y actividades relacionadas" es 6870, por lo que podemos seleccionar banqueros así:

banker = (gss['indus10'] == 6870)
banker.head()
caseid
1    False
2    False
5    False
6     True
7    False
Name: indus10, dtype: bool

El resultado es un pandas Series que contiene los valores booleanos Truey False.

Si utilizamos la función sum en este Series, trata True como 1 yFalse como 0, por lo que el total es el número de banqueros:

banker.sum()
728

En este conjunto de datos hay 728 banqueros.

Para calcular la fracción de banqueros, podemos utilizar la función mean, que calcula la fracción de valores de True en Series:

banker.mean()
0.014769730168391155

Aproximadamente el 1,5% de los encuestados trabaja en la banca, por lo que si elegimos a una persona al azar del conjunto de datos, la probabilidad de que sea banquero es de aproximadamente el 1,5%.

La función de probabilidad

Pondré el código de la sección anterior en una funciónque toma un booleano Series y devuelve una probabilidad:

def prob(A):
    """Computes the probability of a proposition, A."""
    return A.mean()

Así que podemos calcular la fracción de banqueros de esta manera:

prob(banker)
0.014769730168391155

Veamos ahora otra variable de este conjunto de datos. Los valores de la columna sex están codificados así:

1    Male
2    Female

Así que podemos hacer un booleano Series que sea True para las encuestadas mujeres y False en caso contrario:

female = (gss['sex'] == 2)

Y utilízalo para calcular la fracción de encuestados que son mujeres:

prob(female)
0.5378575776019476

La fracción de mujeres en este conjunto de datos es mayor que en la población adulta de EEUU porque la GSS no incluye a las personas que viven en instituciones como prisiones y viviendas militares, y esas poblaciones tienen más probabilidades de ser masculinas.

Opiniones y partidos políticos

Las otras variables que consideraremos son polviews, que describe las opiniones políticas de los encuestados, y partyid, que describe su afiliación a un partido político.

Los valores de polviews están en una escala de siete puntos:

1   Extremely liberal
2   Liberal
3   Slightly liberal
4   Moderate
5   Slightly conservative
6   Conservative
7   Extremely conservative

Definiré liberal como True para cualquiera cuya respuesta sea "Extremadamente liberal", "Liberal" o "Ligeramente liberal":

liberal = (gss['polviews'] <= 3)

He aquí la fracción de encuestados que son liberales según esta definición:

prob(liberal)
0.27374721038750255

Si elegimos una persona al azar en este conjunto de datos, la probabilidad de que sea liberal es de aproximadamente el 27%.

Los valores de partyid se codifican así:

0   Strong democrat
1   Not strong democrat
2   Independent, near democrat
3   Independent
4   Independent, near republican
5   Not strong republican
6   Strong republican
7   Other party

Definiré democrat para incluir a los encuestados que eligieron "Demócrata fuerte" o "No demócrata fuerte":

democrat = (gss['partyid'] <= 1)

Y aquí está la fracción de encuestados que son demócratas, según esta definición:

prob(democrat)
0.3662609048488537

Conjunción

Ahora que tenemos una definición de probabilidad y una función que la calcula, pasemos a la conjunción.

"Conjunción" es otro nombre para la operación lógica and. Si tienes dos proposiciones, Ay B, la conjunción A and B es True si tanto A como B sonTrue, y False en caso contrario.

Si tenemos dos booleanos Series, podemos utilizar el operador & para calcular su conjunción. Por ejemplo, ya hemos calculado la probabilidad de que un encuestado sea banquero:

prob(banker)
0.014769730168391155

Y la probabilidad de que sean demócratas:

prob(democrat)
0.3662609048488537

Ahora podemos calcular la probabilidad de que un encuestado sea banquero y demócrata:

prob(banker & democrat)
0.004686548995739501

Como era de esperar, prob(banker & democrat) es menos queprob(banker), porque no todos los banqueros son demócratas.

Esperamos que la conjunción sea conmutativa; es decir, A & B debería ser lomismo que B & A. Para comprobarlo, también podemos calcularprob(democrat & banker):

prob(democrat & banker)
0.004686548995739501

Como era de esperar, son iguales.

Probabilidad condicional

La probabilidad condicional es una probabilidad que depende de una condición,pero puede que no sea la definición más útil. Aquí tienes algunos ejemplos:

  • ¿Cuál es la probabilidad de que un encuestado sea demócrata, dado que es liberal?

  • ¿Cuál es la probabilidad de que un encuestado sea mujer, dado que es banquero?

  • ¿Cuál es la probabilidad de que un encuestado sea liberal, dado que es mujer?

Empecemos por la primera, que podemos interpretar así: "De todos los encuestados que son liberales, ¿qué fracción son demócratas?"

Podemos calcular esta probabilidad en dos pasos:

  1. Selecciona todos los encuestados que sean liberales.

  2. Calcula la fracción de los encuestados seleccionados que son demócratas.

Para seleccionar a los encuestados liberales, podemos utilizar el operador de corchetes, [], de la siguiente manera:

selected = democrat[liberal]

selected contiene los valores de democrat para los encuestados liberales, por lo queprob(selected) es la fracción de liberales que son demócratas:

prob(selected)
0.5206403320240125

Algo más de la mitad de los liberales son demócratas. Si ese resultado es más bajo de lo que esperabas, tenlo en cuenta:

  1. Utilizamos una definición un tanto estricta de "demócrata", excluyendo a los independientes que se "inclinan" por los demócratas.

  2. El conjunto de datos incluye encuestados desde 1974; en la primera parte de este intervalo, había menos alineación entre las opiniones políticas y la afiliación a un partido, en comparación con la actualidad.

Probemos con el segundo ejemplo: "¿Cuál es la probabilidad de que un encuestado sea mujer, dado que es banquero?". Podemos interpretarlo como: "De todos los encuestados que son banqueros, ¿qué fracción son mujeres?".

De nuevo, utilizaremos el operador corchete para seleccionar sólo los banqueros y prob para calcular la fracción que son mujeres:

selected = female[banker]
prob(selected)
0.7706043956043956

Alrededor del 77% de los banqueros de este conjunto de datos son mujeres.

Envolvamos este cálculo en una función. Definiré conditional para tomar dos booleanos Series, proposition ygiven, y calcular la probabilidad condicional de propositioncondicionada a given:

def conditional(proposition, given):
    return prob(proposition[given])

Podemos utilizar conditional para calcular la probabilidad de que un encuestado sea liberal dado que es mujer:

conditional(liberal, given=female)
0.27581004111500884

Alrededor del 28% de las mujeres encuestadas son liberales.

He incluido la palabra clave, given, junto con el parámetro, female, para que esta expresión sea más legible.

La probabilidad condicional no es conmutativa

Hemos visto que la conjunción es conmutativa; es decir, prob(A & B) es siempre igual a prob(B & A).

Pero la probabilidad condicional no es conmutativa; es decir,conditional(A, B) no es lo mismo que conditional(B, A).

Esto debería quedar claro si observamos un ejemplo. Anteriormente, calculamos la probabilidad de que un encuestado sea mujer, dado que es banquero.

conditional(female, given=banker)
0.7706043956043956

El resultado muestra que la mayoría de los banqueros son mujeres. Esto no es lo mismo que la probabilidad de que un encuestado sea banquero, dado que es mujer:

conditional(banker, given=female)
0.02116102749801969

Sólo un 2% de las mujeres encuestadas son banqueras.

Espero que este ejemplo te aclare que la probabilidad condicional no es conmutativa, y puede que ya te quedara claro. No obstante, es un error común confundir conditional(A, B) y conditional(B, A). Veremos algunos ejemplos más adelante.

Condición y conjunción

Podemos combinar la probabilidad condicional y la conjunción. Por ejemplo,aquí tienes la probabilidad de que un encuestado sea mujer, dado que es demócrata liberal:

conditional(female, given=liberal & democrat)
0.576085409252669

Alrededor del 57% de los demócratas liberales son mujeres.

Y aquí está la probabilidad de que sean mujeres liberales, dado que son banqueras:

conditional(liberal & female, given=banker)
0.17307692307692307

Alrededor del 17% de los banqueros son mujeres liberales.

Leyes de probabilidad

En los próximos apartados, deduciremos tres relaciones entre la conjunción y la probabilidad condicional:

  • Teorema 1: Utilizar una conjunción para calcular una probabilidad condicional.

  • Teorema 2: Utilizar una probabilidad condicional para calcular una conjunción.

  • Teorema 3: Utilizar conditional(A, B) para calcular conditional(B, A).

El teorema 3 también se conoce como teorema de Bayes.

Escribiré estos teoremas utilizando la notación matemática de la probabilidad:

  • P ( A ) es la probabilidad de la proposición A .

  • P ( A y B ) es la probabilidad de la conjunción de A y B es decir, la probabilidad de que ambas sean verdaderas.

  • P ( A | B ) es la probabilidad condicional de A dado que B sea cierta. La línea vertical entre A y B se pronuncia "dado".

Con esto, estamos preparados para el Teorema 1.

Teorema 1

¿Qué fracción de los banqueros son mujeres? Ya hemos visto una forma de calcular la respuesta:

  1. Utiliza el operador de corchetes para seleccionar los banqueros, y luego

  2. Utiliza mean para calcular la fracción de banqueros que son mujeres.

Podemos escribir estos pasos así:

female[banker].mean()
0.7706043956043956

O podemos utilizar la función conditional, que hace lo mismo:

conditional(female, given=banker)
0.7706043956043956

Pero hay otra forma de calcular esta probabilidad condicional, calculando el cociente de dos probabilidades:

  1. La fracción de encuestados que son mujeres banqueras, y

  2. La fracción de encuestados que son banqueros.

En otras palabras: de todos los banqueros, ¿qué fracción son mujeres banqueras? He aquí cómo calculamos esta proporción:

prob(female & banker) / prob(banker)
0.7706043956043956

El resultado es el mismo. Este ejemplo demuestra una regla general que relaciona la probabilidad condicional y la conjunción. Esto es lo que parece en notación matemática:

P ( A | B ) = P(A y B) P(B)

Y ése es el Teorema 1.

Teorema 2

Si partimos del Teorema 1 y multiplicamos ambos lados por P ( B ) obtenemos el Teorema 2:

P ( A y B ) = P ( B ) P ( A | B )

Esta fórmula sugiere una segunda forma de calcular una conjunción: en lugar de utilizar el operador &, podemos calcular el producto de dos probabilidades.

Veamos si funciona para liberal y democrat. Aquí tienes el resultado utilizando &:

prob(liberal & democrat)
0.1425238385067965

Y aquí tienes el resultado utilizando el Teorema 2:

prob(democrat) * conditional(liberal, democrat)
0.1425238385067965

Son iguales.

Teorema 3

Hemos establecido que la conjunción es conmutativa. En notación matemática, eso significa

P ( A y B ) = P ( B y A )

Si aplicamos el Teorema 2 a ambos lados, tenemos:

P ( B ) P ( A | B ) = P ( A ) P ( B | A )

He aquí una forma de interpretarlo: si quieres comprobar A y B puedes hacerlo en cualquier orden:

  1. Puedes comprobarlo B primero, y luego A condicionado a B o

  2. Puedes comprobar A primero, y luego B condicionado a A .

Si dividimos entre P ( B ) obtenemos el Teorema 3:

P ( A | B ) = P(A)P(B|A) P(B)

Y eso, amigos míos, es el teorema de Bayes.

Para ver cómo funciona, calculemos la fracción de banquerosque son liberales, utilizando primero conditional:

conditional(liberal, given=banker)
0.2239010989010989

Utiliza ahora el teorema de Bayes:

prob(liberal) * conditional(banker, liberal) / prob(banker)
0.2239010989010989

Son iguales.

La Ley de la Probabilidad Total

Además de estos tres teoremas, hay una cosa más que necesitaremos para hacer estadística bayesiana: la ley de la probabilidad total. He aquí una forma de la ley, expresada en notación matemática:

P ( A ) = P ( B 1 y A ) + P ( B 2 y A )

En otras palabras, la probabilidad total de A es la suma de dos posibilidades: o bien B 1 y A son verdaderas o B 2 y A son verdaderas. Pero esta ley sólo se aplica si B 1 y B 2 son:

  • Mutuamente excluyentes, lo que significa que sólo una de ellas puede ser cierta, y

  • Colectivamente exhaustivas, lo que significa que una de ellas debe ser cierta.

Como ejemplo, utilicemos esta ley para calcular la probabilidad de que un encuestado sea banquero. Podemos calcularla directamente así

prob(banker)
0.014769730168391155

Así que confirmemos que obtenemos lo mismo si computamos por separado a los hombres y a las mujeres banqueros.

En este conjunto de datos, todos los encuestados son designados como hombres o mujeres. Recientemente, la Junta de Supervisores de la GSS anunció que añadirá a la encuesta preguntas más inclusivas sobre el género(puedes leer más sobre esta cuestión, y su decisión, enhttps://oreil.ly/onK2P).

Ya tenemos un booleano Series que es True para las mujeres encuestadas. Aquí tienes el complemento Series para los encuestados masculinos:

male = (gss['sex'] == 1)

Ahora podemos calcular así la probabilidad total de banker:

prob(male & banker) + prob(female & banker)
0.014769730168391155

Como male y female son mutuamente excluyentes y colectivamente exhaustivas (MECE), obtenemos el mismo resultado que obtuvimos calculando directamente la probabilidad de banker.

Aplicando el Teorema 2, también podemos escribir la ley de la probabilidad total así:

P ( A ) = P ( B 1 ) P ( A | B 1 ) + P ( B 2 ) P ( A | B 2 )

Y podemos probarlo con el mismo ejemplo:

(prob(male) * conditional(banker, given=male) +
prob(female) * conditional(banker, given=female))
0.014769730168391153

Cuando hay más de dos condiciones, es más conciso escribir la ley de probabilidad total como una suma:

P ( A ) = i P ( B i ) P ( A | B i )

De nuevo, esto es válido siempre que se cumplan las condiciones B i sean mutuamente excluyentes y colectivamente exhaustivas. Como ejemplo, consideremos polviews, que tiene siete valores diferentes:

B = gss['polviews']
B.value_counts().sort_index()
1.0     1442
2.0     5808
3.0     6243
4.0    18943
5.0     7940
6.0     7319
7.0     1595
Name: polviews, dtype: int64

En esta escala, 4.0 representa "Moderado". Así que podemos calcular la probabilidad de un banquero moderado de la siguiente manera:

i = 4
prob(B==i) * conditional(banker, B==i)
0.005822682085615744

Y podemos utilizar sum y unaexpresión generatriz para calcular la suma:

sum(prob(B==i) * conditional(banker, B==i)
    for i in range(1, 8))
0.014769730168391157

El resultado es el mismo.

En este ejemplo, utilizar la ley de la probabilidad total supone mucho más trabajo que calcular la probabilidad directamente, pero resultará útil, te lo prometo.

Resumen

Esto es lo que tenemos hasta ahora:

El Teorema 1 nos da una forma de calcular una probabilidad condicional utilizando una conjunción:

P ( A | B ) = P(A y B) P(B)

El Teorema 2 nos da una forma de calcular una conjunción utilizando una probabilidad condicional:

P ( A y B ) = P ( B ) P ( A | B )

El teorema 3, también conocido como teorema de Bayes, nos da una forma de llegar de P ( A | B ) a P ( B | A ) o al revés:

P ( A | B ) = P(A)P(B|A) P(B)

La Ley de la Probabilidad Total proporciona una forma de calcular las probabilidades sumando las piezas:

P ( A ) = i P ( B i ) P ( A | B i )

Llegados a este punto, podrías preguntarte: "¿Y qué?". Si tenemos todos los datos, podemos calcular cualquier probabilidad que queramos, cualquier conjunción o cualquier probabilidad condicional, simplemente contando. No tenemos que utilizar estas fórmulas.

Y tienes razón, si disponemos de todos los datos. Pero a menudo no los tenemos, y en ese caso, estas fórmulas pueden ser muy útiles, especialmente el teorema de Bayes. En el próximo capítulo veremos cómo.

Ejercicios

Ejemplo 1-1.

Utilicemos las herramientas de este capítulo para resolver una variante del problema de Linda.

Linda tiene 31 años, es soltera, franca y muy brillante. Se licenció en Filosofía. Como estudiante, le preocupaban mucho los temas de discriminación y justicia social, y también participó en manifestaciones antinucleares. ¿Qué es más probable?

  1. Linda es banquera.

  2. Linda es banquera y se considera demócrata liberal.

Para responder a esta pregunta, calcula

  • La probabilidad de que Linda sea una mujer banquera,

  • La probabilidad de que Linda sea una mujer banquera liberal, y

  • La probabilidad de que Linda sea una banquera liberal y demócrata.

Ejemplo 1-2.

Utiliza conditional para calcular las siguientes probabilidades:

  • ¿Cuál es la probabilidad de que un encuestado sea liberal, dado que es demócrata?

  • ¿Cuál es la probabilidad de que un encuestado sea demócrata, dado que es liberal?

Piensa bien en el orden de los argumentos que pasas aconditional.

Ejemplo 1-3.

Hay unacita famosa sobre jóvenes, viejos, liberales y conservadores que dice algo así como

Si no eres liberal a los 25, no tienes corazón. Si no eres conservador a los 35, no tienes cerebro.

Tanto si estás de acuerdo con esta proposición como si no, sugiere algunas probabilidades que podemos calcular como ejercicio. En lugar de utilizar las edades concretas de 25 y 35 años, definamos young y old como menores de 30 o mayores de 65:

young = (gss['age'] < 30)
prob(young)
0.19435991073240008
old = (gss['age'] >= 65)
prob(old)
0.17328058429701765

Para estos umbrales, elegí números redondos cercanos a los percentiles 20 y 80. Dependiendo de tu edad, puedes estar o no de acuerdo con estas definiciones de "joven" y "viejo".

Definiré conservative como alguien cuyas opiniones políticas son "Conservadoras", "Ligeramente Conservadoras" o "Extremadamente Conservadoras".

conservative = (gss['polviews'] >= 5)
prob(conservative)
0.3419354838709677

Utiliza prob y conditional para calcular las siguientes probabilidades:

  • ¿Cuál es la probabilidad de que un encuestado elegido al azar sea un joven liberal?

  • ¿Cuál es la probabilidad de que un joven sea liberal?

  • ¿Qué fracción de los encuestados son viejos conservadores?

  • ¿Qué fracción de los conservadores son viejos?

Para cada afirmación, piensa si expresa una conjunción, una probabilidad condicional o ambas.

Para las probabilidades condicionales, ten cuidado con el orden de los argumentos. Si tu respuesta a la última pregunta es superior al 30%, ¡lo has entendido al revés!

Get Piensa en Bayes, 2ª Edición now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.