如何使用pandas创建多元正态分布的相关矩阵?

时间:2015-07-09 02:06:41

标签: python r matrix pandas statsmodels

在R中,我们可以像这样创建相关矩阵:

makecov <- function(rho,n) {
    m <- matrix(nrow=n,ncol=n)
    m <- ifelse(row(m)==col(m),1,rho)
    return(m)
}

我们知道相关性,结果将是:

makecov(0.2,3)
#     [,1] [,2] [,3]
#[1,]  1.0  0.2  0.2
#[2,]  0.2  1.0  0.2
#[3,]  0.2  0.2  1.0

但在大熊猫中,我们怎样才能有效地创建相同的矩阵? 这是我的解决方案:

def makecov(rho,n):
    m=[rho/2]*n*n
    m=np.array(m).reshape([n,n])
    return m+m.T-np.diag([rho]*n)+np.diag([1]*n)

结果将是:

In [21]:makecov(0.2,3)
Out[21]: 
array([[ 1. ,  0.2,  0.2],
       [ 0.2,  1. ,  0.2],
       [ 0.2,  0.2,  1. ]])

是否有一些更优雅的方法可以用熊猫做到这一点?

2 个答案:

答案 0 :(得分:0)

我建议使用numpy的协方差矩阵方法:http://docs.scipy.org/doc/numpy/reference/generated/numpy.cov.html

根据我的经验,熊猫更适合用于数据清理等等。我经常让numpy做重大的统计提升。

答案 1 :(得分:0)

看起来你可以做到

def makecov(rho, n):
    out = numpy.eye(n) + rho
    numpy.fill_diagonal(out, 1)
    return out