我的问题是:我让N的人在三个对象之间进行选择-- [1,2,3]和概率[p_1,p_2,p_3],比如p_1+p_2+p_3=1。让我们将X_1,X_2,X_3称为N人员中一个示例中所选对象的计数(例如,X_1是选择对象1的人数)。
向量X_1,X_2,X_3服从多项式分布和维基百科一样。众所周知,cov(X_1,X_2) ( X_1,X_2)=-N*p_1*p_2。
我想验证这个协方差公式。我做了两个实验得到了不同的结果。我不明白为什么。
尝试使用A I编码(使用p_1=0.4,p_2=0.2,p_3=0.4和N=50):
q=np.random.multinomial(50, [0.4,0.2,0.4],size=1000)
df=pd.DataFrame(q,columns=["X_1","X_2","X_3"])
cov_matrix=np.cov([df["X_1"],df["X_2"],df["X_3"]])在我的具体例子中,我得到了cov(X_1,X_2)=-4.44586486:它非常类似于我所期望的-N*p_1*p_2=-50*0.4*0.2=-4
尝试B (在这里,我依次创建多项绘制的示例),我编码了:
s=[1]*1000 # 1000 as the size
df["constant"]=s
df["X_1"]= df.apply(lambda x: np.random.multinomial(50, [0.4,0.2,0.4])[0],axis=1)
df["X_2"]= df.apply(lambda x: np.random.multinomial(50, [0.4,0.2,0.4])[1],axis=1)
df["X_3"]= df.apply(lambda x: np.random.multinomial(50, [0.4,0.2,0.4])[2],axis=1)
cov_matrix=np.cov([df["X_1"],df["X_2"],df["X_3"]])在我的具体案例中,我得到了cov(X_1,X_2)=-0.087452:它与我所期望的(即4)非常不同。
在我看来,A和B之间唯一的区别是,在A size=1000中,而在B中,我为数据数据的每一行创建了一个平局。
为什么我会得到不同的结果?我犯了哪些错误?有一个类似的问题这里,但答案并不是很有帮助。
发布于 2022-09-15 00:19:57
在第二个示例中,每个列都是独立于其他列生成的,因此每一行不再是单个多项式分布的示例。(例如,请注意行的总和不是50。)实际上,每一列都是独立于其他列的二项式分布。
第二个例子与此等价(请注意,我使用的是较新的随机API):
In [142]: rng = np.random.default_rng()
In [143]: p = rng.binomial(50, [0.4, 0.2, 0.4], size=(1000, 3))
In [144]: p
Out[144]:
array([[15, 12, 20],
[22, 6, 22],
[17, 12, 17],
...,
[20, 13, 17],
[27, 9, 24],
[25, 9, 22]])
In [145]: np.cov(p.T)
Out[145]:
array([[13.09065465, 0.15038238, -0.22775375],
[ 0.15038238, 7.85507107, -0.0142022 ],
[-0.22775375, -0.0142022 , 11.87303203]])https://stackoverflow.com/questions/73724150
复制相似问题