Il y a un paquet dans R qui fait déjà ce test et il est appelé MVN
La première chose que vous avez à faire est d'importer MVN en python comme décrit dans here
Ensuite, allez à votre jupyter bloc-notes et adapter le modèle VAR (1) à vos données afin
# Fit VAR(1) Model
results = Model.fit(1)
results.summary()
Conserver les résidus comme Resi
resi=results.resid
Puis
# Call function from R
import os
os.environ['R_USER'] = '...\Lib\site-packages\rpy2'
import rpy2.robjects as robjects
from rpy2.robjects import pandas2ri
pandas2ri.activate()
from rpy2.robjects.packages import importr
MVN = importr("MVN", lib_loc = "C:/.../R/win-library/3.3")
Après l'importation MVN vous pouvez simplement faire le test de normalité comme si
MVNresult =MVN.hzTest(resi, qqplot = 0)
Si vous appuyez sur
type(MVNresult)
vous trouverez qu'il est un
rpy2.robjects.methods.RS4
Par conséquent, dans ce cas, vous trouverez ce link un outil très puissant pour expliquer les détails
Puis après
tuple(MVNresult.slotnames())
Cela vous montrera les observations
('HZ', 'p.value', 'dname', 'dataframe')
Ensuite, vous pouvez obtenir les valeurs telles que
np.array(MVNresult.slots[tuple(MVNresult.slotnames())[i]])[0]
où i
représente 0, 1, 2, 3
comme «HZ', 'p-value',...
Ainsi, dans le cas où la valeur de p à savoir i=1
est inférieur à 0,05 alors résidus (resi) ne sont pas normale multivariée à 5% niveau de confiance.