Как рассчитать вероятность в питоне? - PullRequest
1 голос
/ 08 марта 2019

Я работаю с двумя наборами данных, и по причинам воспроизводимости, я делюсь наборами данных здесь .

Чтобы было понятно, что я делаю - из столбца 2 я читаю текущую строку и сравниваю ее со значением предыдущей строки. Если оно больше, я продолжаю сравнивать. Если текущее значение меньше значения предыдущего ряда, я хочу разделить текущее значение (меньше) на предыдущее значение (больше). Соответственно следующий код:

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"}

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()

Это дает следующие графики.

  • Data-V имеет коэффициент 0,8, когда quotient_times меньше 3, а коэффициент остается 0,5, если quotient_times равен больше 3.

  • Data-R имеет постоянную quotient 0,5 независимо от значения quotient_times

На основании этого требования, как мы можем вычислить вероятность предыдущего quotient_times и текущего quotient_times, чтобы отличить Data-V от Data-R? Единственное место, где они отличаются, это то, где quotient_times равно <=3.01, тогда как оба имеют одно и то же значение, большее, чем quotient_times из 3. Чтобы упростить вопрос, на основе Data-V, насколько вероятно, что Data- R> 0,5 ?

1 Ответ

1 голос
/ 08 марта 2019

Если вы просто запрашиваете вероятность того, что Data-V> 0,5, я бы нашел ее независимую вероятность. Как я уже говорил, я не думаю, что существует корреляция между данными, потому что Data-V имеет скачок, а Data-R вообще не реагирует.

import numpy as np

types = {"data_v": "data_v.csv"} # only considering data-V

for protname, fname in types.items(): # your code to load the data
    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]

    # Now we'll go through the data for quotients and find how many meet the > 0.5 criteria
    count = 0
    for quot in quotient:
        if quot > 0.5:
            count += 1

    probability = float(count) / len(quotient) # Calculate a float of occurrences / chances to occur
    print(probability)

Выходы

0,0625

Таким образом, есть вероятность 6,25%, что Data-V будет выше 0,5, когда он считается независимым от Data-V

UPDATE

Если вы хотите рассмотреть только, когда quotient_times меньше 3:

import numpy as np

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]

    occurrence_count = 0
    possibility_count = 0
    for index in range(len(quotient)):
        if quotient_times[index] < 3:
            possibility_count += 1
            if quotient[index] > 0.5:
                occurrence_count += 1

    probability = float(occurrence_count) / possibility_count
    print(probability)

Выходы

1,0

Таким образом, 100% набора данных, где quotient_times меньше 3, также имеет значение quotient больше 0,5. Опять же это касается только Data-V

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...