2016-11-21 5 views
0

J'apprends comment utiliser rpy2, et je voudrais créer une sortie de régression formatée en utilisant le paquet stargazer. Ma meilleure estimation de la façon de le faire est le code suivant:Comment utiliser Stargazer pour imprimer dans rpy2

import pandas as pd 
import rpy2.robjects as robjects 

from rpy2.robjects.packages import importr 
stargazer = importr('stargazer') 

from rpy2.robjects import pandas2ri 
pandas2ri.activate() 

r = robjects.r 

df = pd.DataFrame({'x': [1,2,3,4,5], 
        'y': [2,1,3,5,4]}) 

fit = r.lm('y~x', data=df) 

print fit 

print r.stargazer(fit) 

Cependant, quand je le lance, j'obtiendrai la sortie suivante:

Coefficients: 

(Intercept)   x 

     0.6   0.8 



[1] "\n"         

[2] "% Error: Unrecognized object type.\n" 

Ainsi, l'ajustement est généré et impressions bien. Mais stargazer ne semble pas reconnaître l'objet ajusté comme quelque chose qu'il peut analyser.

Des suggestions? Est-ce que j'appelle mal Stargazer dans ce contexte?

Je devrais mentionner que je cours ceci dans Python 2.7.5 sur une machine de fenêtres 10, avec R 3.3.2, et rpy2 la version 2.7.8 du binaire non officieux de fenêtres. Cela pourrait donc être un problème avec la construction de Windows, mais il semble étrange que tout sauf stargazer fonctionnerait.

Répondre

1

Je ne suis pas familier avec le paquet R stargazer mais d'un coup d'oeil à la documentation, cela semble être l'utilisation correcte.

Avant tout, vous pouvez vérifier si le problème concerne l'exécution ou l'impression. À quelle une des deux lignes est-ce défaillant?

p = r.stargazer(fit) 
print(p) 

Si l'échec est l'exécution, vous pouvez déplacer plus de code à R et si vous atteignez un point où vous obtenez de travailler. Sinon, cela est probablement un problème avec le code R et/ou stargazer. Si vous le faites fonctionner le problème est sur le côté rpy2/conversion.

rcode = """ 
df <- data.frame(x = c(1,2,3,4,5), 
       y = c(2,1,3,5,4)) 

fit <- lm('y~x', data=df) 

p <- stargazer(fit) 
""" 

# parse and evaluate the R code 
r(rcode) 

# intermediate objects can be retrieved from the `globalenv` to 
# investigate where they differ from the ones obtained earlier. 
# For example: 
print(robjects.globalenv["p"]) 

Maintenant que nous avons montré qu'il est probablement un problème du côté stargazer, nous pouvons faire l'utilisation des données arbitraires encadre une question de se lier à un symbole dans le globalenv de R:

robjects.globalenv["df"] = df 
rcode = """  
fit <- lm('y~x', data=df) 

p <- stargazer(fit) 
""" 

# parse and evaluate the R code 
r(rcode) 

print(robjects.globalenv["p"]) 
+0

En ce qui concerne la première question, je vois seulement l'erreur quand la deuxième commande est exécutée. Mais je ne suis pas sûr de savoir comment interpréter cela. Si stargazer affiche une erreur sur la console et qu'elle est stockée dans p sous forme de chaîne, cela ne génèrerait-il pas le même résultat? J'ai également lancé stargazer dans r sans aucun problème en utilisant la syntaxe équivalente. – bhackinen

+0

Ce qui semble se passer, c'est que l'appel à 'stargazer()' se termine sans erreur ... mais le vecteur résultat des chaînes indique qu'il y a une erreur. Un peu inhabituel, mais je ne suis pas familier avec le paquet "stargazer". En tout cas cela signifie qu'il y a quelque chose dans l'objet 'fit' qu'il n'aime pas mais qui ne nous dira pas ce que c'est. Il y avait des fautes de frappe dans mon deuxième extrait de code; il devrait être en cours d'exécution maintenant que je les ai réparés. Je pense que stargazer ne gère pas les objets en utilisant des cadres de données anonymes. C'est quelque chose à voir avec le mainteneur du paquet. – lgautier