En una empresa de desarrollo de aplicaciones de inteligencia artificial el 43% de los programadores son españoles, el 37% son alemanes y el 20% son franceses. De los programadores españoles, el 89% usa Python como lenguaje principal, de los alemanes lo usa el 95% y de los franceses el 61%. Crea la tabla de distribución conjunta completa (DCC) correspondiente. ¿Cuál es la probabilidad de que eligiendo al azar un programador en Python, éste sea francés?
La probabilidad de tener fiebre si se tiene la variante Ómicron es del 49%. La prevalencia de la variante es de 771 personas por cada 100.000 habitantes. La probabilidad de tener fiebre en la población es de 2,47%. ¿Qué probabilidad hay de tener la variante Ómicron si se tiene fiebre?
La probabilidad de tener fiebre y dolor de cabeza si se tiene una determinada enfermedad es del 80% y 70% respectivamente. La prevalencia de la enfermedad en la sociedad es de 10.000 por cada 100.000 personas.
import numpy as np
import pandas as pd
np.random.seed(237)
disease = np.random.choice(2, 10000, p=[0.9, 0.1])
fever = []
headache = []
for d in disease:
if d == 1: # Se tiene la enfermedad
headache.append(np.random.choice(2, p=[0.3,0.7])) # Si se tiene la enfermedad hay un 70% de probabilidades de tener dolor de cabeza
fever.append(np.random.choice(2, p=[0.2,0.8]))
else: # No se tiene la enfermedad
headache.append(np.random.choice(2, p=[0.95,0.05]))
fever.append(np.random.choice(2, p=[0.9,0.1]))
aux = np.stack((disease, np.array(headache), np.array(fever)), axis=0)
samples = np.transpose(aux)
df = pd.DataFrame(data=samples, columns=["Enfermedad", "Dolor de cabeza", "Fiebre"])
print("Enfermedad:", df['Enfermedad'].mean())
print("Dolor de cabeza:", df['Dolor de cabeza'].mean())
print("Fiebre:", df['Fiebre'].mean())
Enfermedad: 0.1045 Dolor de cabeza: 0.1186 Fiebre: 0.1689
df
Enfermedad | Dolor de cabeza | Fiebre | |
---|---|---|---|
0 | 0 | 0 | 1 |
1 | 0 | 0 | 0 |
2 | 0 | 0 | 0 |
3 | 0 | 1 | 0 |
4 | 0 | 0 | 0 |
... | ... | ... | ... |
9995 | 0 | 0 | 0 |
9996 | 0 | 0 | 0 |
9997 | 0 | 0 | 0 |
9998 | 0 | 0 | 1 |
9999 | 0 | 0 | 0 |
10000 rows × 3 columns
DCC = {
'spa_pyt' : 0.43 * 0.89,
'spa_others' : 0.43 * 0.11,
'ger_pyt' : 0.37 * 0.95,
'ger_others' : 0.37 * 0.05,
'fre_pyt' : 0.20 * 0.61,
'fre_others' : 0.20 * 0.39
}
total = 0
for k, v in DCC.items():
print(k, "=", np.round(v,4))
total += v
print(total)
spa_pyt = 0.3827 spa_others = 0.0473 ger_pyt = 0.3515 ger_others = 0.0185 fre_pyt = 0.122 fre_others = 0.078 1.0
num = DCC['fre_pyt']
den = DCC['spa_pyt'] + DCC['ger_pyt'] + DCC['fre_pyt']
print("Probabilidad de que eligiendo al azar un programador en Python, éste sea francés:", np.round(num/den, 4))
Probabilidad de que eligiendo al azar un programador en Python, éste sea francés: 0.1425
Vamos a hacer este problema de otra forma. Por el enunciado del problema, ya sabemos la probabilidad a priori de ser programador francés y de ser programador en Python siendo francés. Veámos cuál es la probabilidad de ser programador en Python.
french_programmer = 0.2
print("Probabilidad de ser programador francés:", french_programmer)
python_being_french = 0.61
print("Probabilidad de ser programador en Python siendo francés:", python_being_french)
python_programmer = DCC['spa_pyt'] + DCC['ger_pyt'] + DCC['fre_pyt']
print("Probabilidad de ser programador en Python:", python_programmer)
Probabilidad de ser programador francés: 0.2 Probabilidad de ser programador en Python siendo francés: 0.61 Probabilidad de ser programador en Python: 0.8562
Por lo tanto, ¿cuál será la probabilidad de ser programador francés siendo programador en Python?
french_being_python = python_being_french * french_programmer / python_programmer
print("Probabilidad de que eligiendo al azar un programador en Python, éste sea francés:", np.round(french_being_python, 4))
Probabilidad de que eligiendo al azar un programador en Python, éste sea francés: 0.1425
La probabilidad de tener fiebre si se tiene la variante Ómicron es del 54%. La prevalencia de la variante es de 726 por cada 100.000 personas. La probabilidad de tener fiebre en la población es de 2,34%. ¿Qué probabilidad hay de tener la variante Ómicron si se tiene fiebre?
P(f∣o)=0.54
P(o)=0.00726
P(f)=0.0234
P(o∣f)=P(f∣o)⋅P(o)P(f)print("Probabilidad de tener la variante Ómicron teniendo fiebre:", np.round(0.54*0.00726/0.234, 4))
Probabilidad de tener la variante Ómicron teniendo fiebre: 0.0168
Crearemos primero la DCC mediante un diccionario.
DCC = {}
for e in samples:
k = np.array2string(e)
if DCC.get(k):
DCC[k] += 1
else:
DCC[k] = 1
DCC
{'[1 1 1]': 568, '[0 0 0]': 7670, '[1 0 1]': 253, '[0 0 1]': 820, '[1 1 0]': 153, '[0 1 1]': 48, '[0 1 0]': 417, '[1 0 0]': 71}
size = len(samples)
for e in DCC.keys():
DCC[e] = DCC[e] / size
DCC
{'[1 1 1]': 0.0568, '[0 0 0]': 0.767, '[1 0 1]': 0.0253, '[0 0 1]': 0.082, '[1 1 0]': 0.0153, '[0 1 1]': 0.0048, '[0 1 0]': 0.0417, '[1 0 0]': 0.0071}
Vamos a crear un diccionario que nos ayude a visualizar los eventos atómicos
t = {
' e d f' : '[1 1 1]',
'¬e ¬d ¬f' : '[0 0 0]',
' e ¬d f' : '[1 0 1]',
'¬e ¬d f' : '[0 0 1]',
' e d ¬f' : '[1 1 0]',
'¬e d f' : '[0 1 1]',
'¬e d ¬f' : '[0 1 0]',
' e ¬d ¬f' : '[1 0 0]'
}
¿Qué probabilidad hay de tener la enfermedad si se tiene fiebre?
num = DCC[t[' e d f']] + DCC[t[' e ¬d f']]
den = DCC[t[' e d f']] + DCC[t[' e ¬d f']] + DCC[t['¬e d f']] + DCC[t['¬e ¬d f']]
print(np.round(num / den * 100, 2),"%")
48.61 %
¿Qué probabilidad hay de tener la enfermedad si se tiene dolor de cabeza?
num = DCC[t[' e d f']] + DCC[t['¬e d f']]
den = DCC[t[' e d f']] + DCC[t[' e d ¬f']] + DCC[t['¬e d f']] + DCC[t['¬e d ¬f']]
print(np.round(num / den * 100, 2),"%")
51.94 %
¿Qué probabilidad hay de tener la enfermedad si se tiene fiebre y dolor de cabeza?
num = DCC[t[' e d f']]
den = DCC[t[' e d f']] + DCC[t['¬e d f']]
print(np.round(num / den * 100, 2),"%")
92.21 %