Tenir compte des statistiques de l'importation R et exécutez le test de Fisher en fonction Python. Notez que l'objet result
est <class 'rpy2.robjects.vectors.ListVector'>
et doit donc être converti en un dictionnaire Python comme indiqué ci-dessous.
import rpy2
from rpy2.robjects.numpy2ri import numpy2ri
from rpy2.robjects.packages import importr
import numpy as np
cont = np.reshape(np.arange(0,4), (2,2))
statspackage = importr('stats', robject_translations={'format_perc': '_format_perc'})
result = statspackage.fisher_test(numpy2ri(cont), simulate_p_value = True, B = 100)
# DEPRECATED CONVERSION
import pandas.rpy.common as com
pyresultdict = com.convert_robj(result)
for k, v in pyresultdict.items():
print(k, v)
# data.name ['structure(c(0L, 2L, 1L, 3L), .Dim = c(2L, 2L))']
# p.value [1.0]
# estimate odds ratio 0.0
# dtype: float64
# null.value odds ratio 1.0
# dtype: float64
# conf.int [0.0, 77.90626902008512]
# alternative ['two.sided']
# method ["Fisher's Exact Test for Count Data"]
Une autre note, vous pouvez recevoir un avertissement au sujet de la dévalorisation de com.convert_to_r_dataframe
et com.convert_robj(rdf)
qui devrait être remplacé par pandas2ri.pandas2ri()
et pandas2ri
comme suggéré here. Toutefois, la conversion de mon côté ne fonctionne pas pour l'objet ListVector. Idéalement, la conversion ci-dessus serait remplacée par ci-dessous:
# CURRENT CONVERSION
from rpy2.robjects import pandas2ri
pandas2ri.activate()
pyresultdict = pandas2ri.ri2py(result)
for k, v in pyresultdict.items():
print(k, v)
Merci, ressemble à une approche moins hacky. Y a-t-il un avantage direct de cette approche? – pir
Vous travaillez dans le modèle objet Python et évitez de transmettre des lignes de script R pour chaque tâche. – Parfait
@Parfait J'ai l'importation du paquet R fonctionnant avec simplement 'statspackage = importr ('stats')' (en utilisant R-3.3.0-beta) – lgautier