如何通过试验计算转移概率?

问题描述 投票:0回答:1

我有一个由零和一组成的 pandas 数据框。前 20 个试验称为块 1,接下来的 20 个试验称为块 2。每行表示一个试验,因此总共有 40 个试验。我想知道 5 个步骤的成对概率或转移概率。例如,前 5 个步骤中从 0 到 0、0 到 1、1 到 0 和 1 到 1 转变的概率是多少,以及它对所有块的变化如何?我想了解趋势如何从区块 1 变化到区块 2,但要进行试验。

我尝试过这个,但是我应该如何尝试一下:

df['response'] = [0,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,0,1,1.....]
sc = df['response'].tolist()
sc = [x for x in sc if not np.isnan(x)]


def transition_matrix(transitions):
    n = 1 + int(max(transitions))  # Number of states
    M = [[0] * n for _ in range(n)]

    for (i, j) in zip(transitions, transitions[1:]):
        M[int(i)][int(j)] += 1

    for row in M:
        s = sum(row)
        if s > 0:
            row[:] = [f / s for f in row]
    return M

trial_ranges = [(0, 21), (21, 41), (41, 61), (61, 81)]
fig, axes = plt.subplots(1, len(trial_ranges), figsize=(16, 6))

for i, trial_range in enumerate(trial_ranges):
    start, end = trial_range
    sub_sc = sc[start:end]
    transition_matrix_sub = transition_matrix(sub_sc)

    sns.heatmap(transition_matrix_sub, annot=True, fmt=".2f", cmap="YlGnBu", ax=axes[i])
    axes[i].set_xlabel('To State')
    axes[i].set_ylabel('From State')
    axes[i].set_title(f'Transition Probabilities (Trials {start}-{end})')

plt.tight_layout()
plt.show()
python pandas probability
1个回答
0
投票

所以我现在更像是一名Java开发人员,我正在学习Python,但是当我进入大学攻读AA时,他们只开始了两个编程课程,即C和Java,但是,从我读到的内容来看,我会说你的方法很好,但是您可以进行一些修改和改进,例如数据一致性。看起来您的数据中有一个 NaN 值,然后您正在删除它们。您需要确保没有其他意外值或丢失数据。您还想定义转移概率的函数,因此您可以定义一个单独的函数来计算给定步骤数的转移概率,而不是直接创建转移矩阵,这将使代码更加模块化且更易于理解。您还可以创建单独的函数来绘制转换矩阵,以避免 重复代码。 您可以将您在循环中创建的函数用于不同的试验范围,并且您的试验范围也可能重叠。您需要确保每个范围都对应于一组独特的试验。再说一次,这只是我认为我可能是错的,但是,如果我可以帮助你,请告诉我!

© www.soinside.com 2019 - 2024. All rights reserved.