0

Je suis intéressé par l'application du test de normativité multivariée de Henze-Zirkler en python 3x et je me demandais si je pouvais le faire en python dans le cahier Jupyter.Comment appliquer le test de normativité multivariée de Henze-Zirkler dans le cahier Jupyter avec rpy2

J'ai ajusté un modèle VAR avec mes données et ensuite je voudrais tester si les résidus de ce modèle VAR ajusté sont normalement distribués. Comment puis-je le faire dans un bloc-notes Jupyter en utilisant python?

Répondre

1

Ceci est une autre réponse puisque je découvre cette méthode plus tard. Si vous ne voulez pas importer la bibliothèque de R dans Python. On peut appeler la sortie de R vers python. c'est à dire.on est capable d'activer la fonction R par python comme suit:

import rpy2.robjects as robjects 
from rpy2.robjects import r 
from rpy2.robjects.numpy2ri import numpy2ri 
from rpy2.robjects.packages import importr 
import numpy as np 

supposer que Resi est un dataframe en python dire

# Create data 
resi = pd.DataFrame(np.random.random((108, 2)), columns=['Number1','Number2']) 

Ensuite, le code est le suivant

#Converting the dataframe from python to R 

# firt take the values of the dataframe to numpy 
resi1=np.array(resi, dtype=float) 

# Taking the variable from Python to R 
r_resi = numpy2ri(resi1) 

# Creating this variable in R (from python) 
r.assign("resi", r_resi) 

# Calling libraries in R 
r('library("MVN")') 

# Calling a function in R (from python) 
r("res <- hzTest(resi, qqplot = F)") 

# Retrieving information from R to Python 
r_result = r("res") 

# Printing the output in python 
print(r_result) 

Cette volonté générer la sortie:

Henze-Zirkler's Multivariate Normality Test 

--------------------------------------------- 

    data : resi 



    HZ  : 2.841424 

    p-value : 1.032563e-06 



    Result : Data are not multivariate normal. 

--------------------------------------------- 
0

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] 

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.