Covariance in Python with iminuit

593 Views Asked by At

I have to calculate the covariance between 2 parameters from a fit function. I found this package in Python called iminuit that did a good fit and also calculate the covariance matrix of the parameters. I tested the package on a simple function. This is the code:

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())

and this is the output:

Covariance: ((1.0, 0.0), (0.0, 1.0))

However if i replace x^2+y^2 with (x-y)^2 I obtain

Covariance: ((250.24975024975475, 249.75024975025426), (249.75024975025426, 250.24975024975475))

I am confused why do I get covariance bigger than 1 (I am not good at statistics but from what I understood it has to be between -1 and 1), so someone who knows iminuit can help me? And also, in the first case, what does the matrix means? Why there is 0 correlation between x and y and what 1 on the diagonal means?

1

There are 1 best solutions below

2
On BEST ANSWER

You are confusing covariance with correlation. Correlation is the normalised version of the covariance, which is indeed always between -1 and 1.

To obtain the corellation from the covariance matrix, calculate:

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