Como calcular a probabilidade de ocorrências em Python?
Estou trabalhando com três conjuntos de dados simples e, por motivos de reprodutibilidade, estou compartilhando o conjunto de dadosAqu.
Para deixar claro o que estou fazendo - na coluna 2, estou lendo a linha atual e comparando-a com o valor da linha anterior. Se for maior, eu continuo comparando. Se o valor atual for menor que o valor da linha anterior, desejo dividir o valor atual (menor) pelo valor anterior (maior). Por conseguinte, o seguinte código:
import numpy as np
import scipy.stats
import matplotlib.pyplot as plt
import seaborn as sns
protocols = {}
types = {"Data-V": "data_v.csv", "Data-R": "data_r.csv", "Data-C": "data_c.csv"}
for protname, fname in types.items():
col_time,col_window = np.loadtxt(fname,delimiter=',').T
trailing_window = col_window[:-1] # "past" values at a given index
leading_window = col_window[1:] # "current values at a given index
decreasing_inds = np.where(leading_window < trailing_window)[0]
quotient = leading_window[decreasing_inds]/trailing_window[decreasing_inds]
quotient_times = col_time[decreasing_inds]
protocols[protname] = {
"col_time": col_time,
"col_window": col_window,
"quotient_times": quotient_times,
"quotient": quotient,
}
plt.figure(); plt.clf()
plt.plot(quotient_times, quotient, ".", label=protname, color="blue")
plt.ylim(0, 1.0001)
plt.title(protname)
plt.xlabel("quotient_times")
plt.ylabel("quotient")
plt.legend()
plt.show()
partir disso, observamos o seguint
Data-V tem doisquotient
valores, ou seja, 0.8 quandoquotient_times
é menor que 3 e 0,5 quando oquotient_times
é maior que 3. Data-R tem apenas umquotient
valor de 0,5 não importa qual o valor dequotient_times
é Data-C tem apenas umquotient
valor de 0,7 não importa qual o valor dequotient_times
éDesta observação, quero medir a probabilidade (ocorrência) em diferentesquotient_times
. Aqui está a minha abordagem
occurrence_count_data_v = 0
possibility_count_data_v = 0
occurrence_count_data_r = 0
possibility_count_data_r = 0
occurrence_count_data_c = 0
possibility_count_data_c = 0
if "data_v".lower() in fname:
for index_v in range(len(quotient)):
if quotient_times[index_v] < 3:
possibility_count_data_v += 1
if quotient[index_v] > 0.5:
occurrence_count_data_v += 1
probability_data_v = float(occurrence_count_data_v) / possibility_count_data_v
print(fname, "=",probability_data_v)
elif "data_r".lower() in fname:
for index_r in range(len(quotient)):
if quotient_times[index_r] < 3:
possibility_count_data_r += 1
if quotient[index_r] == 0.5:
occurrence_count_data_r += 1
probability_data_r = float(occurrence_count_data_r) / possibility_count_data_r
print(fname, "=", probability_data_r)
elif "data_c".lower() in fname:
for index_c in range(len(quotient)):
if quotient_times[index_c] < 3:
possibility_count_data_c += 1
if quotient[index_c] == 0.7:
occurrence_count_data_c += 1
probability_data_c = float(occurrence_count_data_c) / possibility_count_data_c
print(fname, "=",probability_data_c)
Saíd
data_v.csv = 1.0 data_r.csv = 1.0 data_c.csv = 1.0
Isso significa 100% de cada conjunto de dados em quequotient_times
é menor que 3 também tem umquotient
de cada dado, conforme especificado acima. No entanto, isso considera cada dado independentemente. Como podemos medir a ocorrência dequotient
para cada dado em relação ao outro? Por exemplo, quandoquotient_times
é maior que 3, ambosData-V
eData-R
compartilham o mesmoquotient
valor igual a 5. Como podemos medir essa ocorrência? Qualquer ajuda deve ser apreciad