Probability
What I Do
I provide comprehensive probability theory tools including probability distributions, conditional probability, Bayes' theorem, random variables, expectation calculations, and stochastic process simulations for uncertainty quantification.
When to Use Me
- Modeling uncertain phenomena
- Bayesian inference and updating beliefs
- Risk assessment and decision making
- Monte Carlo simulations
- Queueing theory applications
- Machine learning probabilistic models
Core Concepts
- Probability Axioms: Kolmogorov's axioms, sample spaces
- Random Variables: Discrete and continuous distributions
- Conditional Probability: P(A|B) = P(A∩B)/P(B)
- Bayes' Theorem: P(H|E) = P(E|H) * P(H) / P(E)
- Expectation & Variance: E[X], Var(X), moment generating functions
- Convergence: Law of large numbers, Central Limit Theorem
- Stochastic Processes: Markov chains, Poisson processes
- Information Theory: Entropy, KL divergence
Code Examples
Basic Probability Calculations
from scipy import stats
import numpy as np
P_A = 0.3
P_B = 0.4
P_A_and_B = 0.12
P_A_or_B = P_A + P_B - P_A_and_B
P_A_given_B = P_A_and_B / P_B
print(f"P(A or B): {P_A_or_B}")
print(f"P(A|B): {P_A_given_B}")
Bayes' Theorem Application
prior_disease = 0.01
sensitivity = 0.95
specificity = 0.90
likelihood_positive = sensitivity
likelihood_negative = 1 - specificity
evidence = likelihood_positive * prior_disease + (1 - specificity) * (1 - prior_disease)
posterior = (likelihood_positive * prior_disease) / evidence
print(f"P(Disease|Positive): {posterior:.4f}")
Distribution Sampling
np.random.seed(42)
normal_samples = np.random.normal(0, 1, 1000)
exponential_samples = np.random.exponential(1, 1000)
poisson_samples = np.random.poisson(5, 1000)
binomial_samples = np.random.binomial(20, 0.5, 1000)
print(f"Normal - Mean: {np.mean(normal_samples):.3f}, Std: {np.std(normal_samples):.3f}")
print(f"Exponential - Mean: {np.mean(exponential_samples):.3f}")
print(f"Poisson - Mean: {np.mean(poisson_samples):.3f}")
Expectation and Variance
from scipy.stats import norm, expon
X = norm(0, 1)
expected_value = X.mean()
variance = X.var()
print(f"E[X] for N(0,1): {expected_value}")
print(f"Var(X) for N(0,1): {variance}")
custom_dist = expon(scale=2)
print(f"E[X] for Exp(2): {custom_dist.mean()}")
Monte Carlo Simulation
np.random.seed(42)
n_simulations = 100000
def estimate_pi(n):
x = np.random.uniform(-1, 1, n)
y = np.random.uniform(-1, 1, n)
inside = (x**2 + y**2) <= 1
return 4 * inside.sum() / n
pi_estimate = estimate_pi(n_simulations)
print(f"Pi estimate: {pi_estimate:.5f}")
print(f"Error: {abs(pi_estimate - np.pi):.5f}")
Best Practices
- Check Conditions: Verify assumptions before applying theorems
- Numerical Stability: Use log-probabilities for small probabilities
- Conjugate Priors: Use for computational efficiency in Bayesian analysis
- Law of Large Numbers: Use adequate sample sizes
- Sampler Validation: Check MCMC convergence diagnostics
Common Patterns
# Markov chain simulation
def markov_chain_transition(transition_matrix, initial_state, n_steps):
n_states = transition_matrix.shape[0]
current = initial_state
states = [current]
for _ in range(n_steps):
current = np.random.choice(n_states, p=transition_matrix[current])
states.append(current)
return states
# Conditional probability calculation
def conditional_probability(joint_prob, marginal_prob):
return joint_prob / marginal_prob
# KL divergence
def kl_divergence(p, q):
return np.sum(p * np.log(p / q))
Core Competencies
- Probability axioms and rules
- Bayes' theorem and Bayesian inference
- Probability distributions and sampling
- Expectation and moment calculations
- Monte Carlo methods and simulation