Conditional probability is actually the likelihood of an event or outcome occurring, based on the occurrence of a previous event or outcome.
Conditional probability has many applications such as Data science, insurance, politics, and many different fields of mathematics.
Conditional probability can be contrasted with unconditional probability. Unconditional probability refers to the likelihood that an event will take place irrespective of whether any other events have taken place or any other conditions are present.
Probabilities are classified as either conditional, marginal, or joint.
Conditional probability: p(A|B) is the probability of event A occurring, given that event B occurs. Marginal probability: Marginal probability is the probability of an event irrespective of the outcome of another variable. Joint probability: p(A and B). The probability of event A and event B occurring. It is the probability of the intersection of two or more events. The probability of the intersection of A and B may be written p(A ∩ B).
Generating two time series:
import matplotlib.pyplot as plt import numpy as np N = 10000 spikeDur = 10 # a.u. but must be an even number spikeNumA = .01 # in proportion of total number of points spikeNumB = .05 # in proportion of total number of points # initialize to zeros spike_tsA = np.zeros(N) spike_tsB = np.zeros(N) ### populate time series A spiketimesA = np.random.randint(0,N,int(N*spikeNumA)) # flesh out spikes (loop per spike) for spikei in range(len(spiketimesA)): # find boundaries bnd_pre = int( max(0,spiketimesA[spikei]-spikeDur/2) ) bnd_pst = int( min(N,spiketimesA[spikei]+spikeDur/2) ) # fill in with ones spike_tsA[bnd_pre:bnd_pst] = 1 # ### repeat for time series 2 spiketimesB = np.random.randint(0,N,int(N*spikeNumB)) spiketimesB[:len(spiketimesA)] = spiketimesA # induce strong conditional probability # flesh out spikes (loop per spike) for spikei in range(len(spiketimesB)): # find boundaries bnd_pre = int( max(0,spiketimesB[spikei]-spikeDur/2) ) bnd_pst = int( min(N,spiketimesB[spikei]+spikeDur/2) ) # fill in with ones spike_tsB[bnd_pre:bnd_pst] = 1 plt.plot(range(N),spike_tsA, range(N),spike_tsB) plt.ylim([0,1.2]) # plt.xlim([2000,2500]) plt.show()
Compute series probabilities and intersection:
It is often stated as the probability of B given A and is written as P(B|A), where the probability of B depends on that of A happening.
P = Probability
A = Event A
B = Event B
# probabilities probA = sum(spike_tsA==1) / N probB = np.mean(spike_tsB) # joint probability probAB = np.mean(spike_tsA+spike_tsB==2) print(probA,probB,probAB)
OUT: 0.0927 0.3958 0.0927
Compute the conditional probabilities:
# p(A|B) pAgivenB = probAB/probB # p(B|A) pBgivenA = probAB/probA # print a little report print('P(A) = %g'%probA) print('P(A|B) = %g'%pAgivenB) print('P(B) = %g'%probB) print('P(B|A) = %g'%pBgivenA)
P(A) = 0.0927
P(A|B) = 0.234209
P(B) = 0.3958
P(B|A) = 1