Python 与 iminuit 的协方差

Covariance in Python with iminuit

我必须根据拟合函数计算 2 个参数之间的协方差。我在 Python 中找到了这个名为 iminuit 的包,它非常适合并且还计算了参数的协方差矩阵。我在一个简单的功能上测试了这个包。这是代码:

from iminuit import Minuit, describe, Struct

def func(x,y):
    f=x**2+y**2
    return f

m = Minuit(func,pedantic=False,print_level=0)
m.migrad()

print("Covariance:")
print(m.matrix())

这是输出:

协方差: ((1.0, 0.0), (0.0, 1.0))

但是如果我用 (x-y)^2 替换 x^2+y^2 我得到

协方差: ((250.24975024975475, 249.75024975025426), (249.75024975025426, 250.24975024975475))

我很困惑为什么协方差大于1(我不擅长统计,但据我了解它必须在-1和1之间),所以知道iminuit的人可以帮助我吗?而且,在第一种情况下,矩阵是什么意思?为什么 x 和 y 之间的相关性为 0,对角线上的 1 意味着什么?

您混淆了协方差和相关性。相关性是协方差的归一化版本,它确实总是在-1和1之间。

要从协方差矩阵获得相关性,计算:

correlation = cov[0, 1] / np.sqrt(cov[0, 0] * cov[1, 1])