Estoy trabajando con un conjunto de datos simple y por razones de reproducibilidad, lo comparto aquí .
Para aclarar lo que estoy haciendo, de la columna 2, estoy leyendo la fila actual y la comparo con el valor de la fila anterior. Si es mayor, sigo comparando. Si el valor actual es más pequeño que el valor de la fila anterior, quiero dividir el valor actual (más pequeño) por el valor anterior (más grande). En consecuencia, el siguiente 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"} 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() diff=quotient_times plt.plot(diff,beta_value, ".", label=protname, color="blue") plt.ylim(0, 1.0001) plt.title(protname) plt.xlabel("quotient_times") plt.ylabel("quotient") plt.legend() plt.show() sns.distplot(quotient, hist=False, label=protname)
Esto da las siguientes plots.
Como podemos ver en las plots.
quotient_times
es menor que 3 y el cociente permanece 0.5 si el quotient_times
es mayor que 3. Basado en esto, ¿cómo podemos encajar estos datos en una distribución tipo beta
cuando el quetient_times
es menor que 3 y mayor que 3? Intuitivamente, cuando el quetient_times
es menor que 3, el pico de distribución se centrará alrededor de 0.8. Cuando el quetient_times
es alrededor de 3 o 3.05, el pico estará entre 0.8 y 0.5 (50%, 50%). Sin embargo, cuando el quetient_times
es mayor que 3, el pico se centrará solo alrededor de 0.5. ¿Cómo podemos hacer esto en Python?