StationaryCovarianceFactory is yielding an non positive covariance matrix

hello,

I’ve tried using the ot.StationaryCovarianceModelFactory class in order to estimate a covariance matrix over a given time series. i’ve been experiencing some problems afterwards bc the obtained matrix is not necessarily a positive definite matrix. It seems that the parameter blockNumber in the Welshfactory class holds a great importance in that matter (the problem is solved if blockNumber = 10 in the following example).

here is a hopefully reproducible piece of code illustrating the matter :

‘’’
import numpy as np
import openturns as ot
np.random.seed(0)
myValues = [[i+np.random.uniform(5)] for i in range(size)]
myMesh = ot.RegularGrid(0, 10, size)
myField = ot.Field(myMesh, myValues)
covarianceFactory = ot.StationaryCovarianceModelFactory()
segmentNumber = 6
spectralFactory = ot.WelchFactory(ot.Hann(), segmentNumber)
covarianceFactory.setSpectralModelFactory(spectralFactory)

estimatedModel = covarianceFactory.build(myField)

def f(X):
s, t = X
return [(estimatedModel(s - t).computeTrace())]

errObs = ot.CovarianceMatrix(size)
for k in range(size):
s = myMesh.getValue(k)
for l in range(size):
t = myMesh.getValue(l)
errObs[k, l] = f([t, s])[0]

errObs.isPositiveDefinite()
‘’’

any advice on how to chose a reasonable blockNumber parameter would be greatly appreciated !

regards,

sanaa

Hi @sanaaZ sorry for the late answer. I have tried to reproduce but I cannot run your code. The issue seems to be that formatting was lost. To get Discourse to recognize your code block, you need to use ``` (Alt Gr + 7).