证明A和B在给定C的条件下是独立的

我得到了以下联合分布表,该表定义了二进制随机变量上的三变量分布:

   a  b  c      p
0  0  0  0  0.192
1  0  0  1  0.144
2  0  1  0  0.048
3  0  1  1  0.216
4  1  0  0  0.192
5  1  0  1  0.064
6  1  1  0  0.048
7  1  1  1  0.096

并且我要证明A和B在给定C的条件下是独立的。 我最终将发行版加载到pandas数据框中,并得到了以下麻烦的证明:

c0 = p[p.c == 0]
c0.p /= c0.p.sum()
c0
   a  b  c    p
0  0  0  0  0.4
2  0  1  0  0.1
4  1  0  0  0.4
6  1  1  0  0.1
np.outer(c0.groupby('a').p.sum(),c0.groupby('b').p.sum())
array([[0.4,0.1],[0.4,0.1]])

,然后与p[p.c == 1]相同。

根据某些概率理论的结果,我是否错过了更简单的方法?如果没有,我是否缺少一种更好的编写pandas / numpy代码的方法? 让我知道这是否应该迁移到交叉验证,还是出于SO:)

randy8546 回答:证明A和B在给定C的条件下是独立的

使用辅助函数来封装重复的计算部分可能会有所帮助:

<Table>
  <Table.Body>
    <Table.Row>
      <p>Total Assets/Liabilities:</p>
      <td>
        {cellValue}
        <Icon name={cellValue >= 0 ? "plus" : "minus"} />
      </td>
    </Table.Row>
  </Table.Body>
</Table>

然后,您可以更轻松地表达所有部分分布:

def partial(df,givens,index='c'):
    result = df.groupby(givens,as_index=False)['p'].sum().set_index(index)
    return result

FAB = pd.DataFrame({'a': [0,1,1],'b': [0,'c': [0,'p': [0.192,0.144,0.048,0.216,0.192,0.064,0.096]}) FC = partial(FAB,['c']) FA = partial(FAB,['c','a']) FB = partial(FAB,'b']) FAB = FAB.set_index('c') FA的乘积可以这样找到:

FB

(此外:请注意,FA_FB = (pd.merge(FA,FB,on=['c'],suffixes=['a','b'])) FA_FB['p'] = (FA_FB['pa'] * FA_FB['pb']) / FC['p'] FA_FB = FA_FB.drop(['pa','pb'],axis=1) FABFAFB均由FC值索引。这使我们能够对这些DataFrame就像

c

即使(FA_FB['pa'] * FA_FB['pb']) / FC['p'] FC的形状不同。熊猫会根据匹配的索引自动为我们正确对齐行。这就是在FA_FB帮助函数中使用set_index(index)的原因。)

现在要测试partial等于FA_FB

FAB

以下是一个可运行块中的上面的代码:

diff = [dfi.set_index(['a','b'],append=True) for dfi in (FA_FB,FAB)]
diff = diff[0] - diff[1]
assert (np.allclose(diff,0))

回想一下:代码所面临的一个问题是必须解决import pandas as pd import numpy as np def partial(df,as_index=False)['p'].sum().set_index(index) return result FAB = pd.DataFrame({'a': [0,'b']) FAB = FAB.set_index('c') # print(FAB) FA_FB = (pd.merge(FA,axis=1) # print(FA_FB) # print(FAB) diff = [dfi.set_index(['a',0)) 的情况,然后为c == 0重复计算。当然,您可以使用c == 1来处理此问题。 但是,由于您使用的是Pandas,通常可以(并且更快)避免将数据分解成碎片,而是尝试以影响整个DataFrame整体的操作来表示计算。

因此,在上文中,没有做出任何努力将案例for-loopc == 0分开。相反,c == 1的值被推到c中,Pandas的索引自动对齐被用来照顾适合我们的行的合并或算术组合。

以这种方式(而不是使用index)使用Pandas的另一个好处是,代码可以处理任意数量的不同for-loop值,而无需更改代码。

本文链接:https://www.f2er.com/3090143.html

大家都在问