2017-09-18 3 views
1

Ich bin das Vars Paket in jupyter Notebook als soWie auf Klassenattribut eines R-Objekts in Python zuzugreifen?

Aus Gründen der Einfachheit der ersten paar Zeilen auf Ihrem Jupyter Notebook sollte

import pandas as pd, numpy as np 

# Call function from R 
import os 
os.environ['R_USER'] = 'D:\Anaconda3\Lib\site-packages\rpy2' 
import rpy2.robjects as robjects 
from rpy2.robjects import pandas2ri 
pandas2ri.activate() 

from rpy2.robjects.packages import importr 
utils = importr('utils') 
ggplot2 = importr("ggplot2", lib_loc = "C:/.../R/win-library/3.3") 

# Import vars 
Rvars = importr("vars", lib_loc = "C:/.../R/win-library/3.3") 

wie sein und ich habe einen Datenrahmen

df = pd.DataFrame(np.random.random((108, 2)), columns=['Number1','Number2']) 
df.head() 
sagen

I codiert

Model2=Rvars.VAR(df,p=3, type='const') 
type(Model2) 

und rec ieved die

rpy2.robjects.vectors.ListVector 

folgenden Tupels Wenn mit Codierung

tuple(Model2.slots) 

I erhielt

('names', 'class') 

So wie

print(Model2.names) 

Erzeugt die Namen Druck

[1] "varresult" "datamat"  "y"   "type"   "p"   

[6] "K"   "obs"   "totobs"  "restrictions" "call" 

Meine Frage

Alle hier genannten Werte sind nur Elemente einer Liste mit Klassenattribut 'varest' in R wie in

https://cran.r-project.org/web/packages/vars/vars.pdf

auf Seite 45

beschrieben Wie Kann ich auf varresult von Python zugreifen?

Antwort

0

Ich denke, ich habe es herausgefunden. Ich erhielt gute Hilfe von

http://rpy.sourceforge.net/rpy2/doc-2.1/html/introduction.html

Zur Veranschaulichung Zweck betrachten wir die trivialen Fall von der variablen y bekommen, die die Datenmatrix der endogenen Variablen darstellt.

.rx und .rx2 neue Funktionen in rpy2 wie in

diskutiert

http://rpy.sourceforge.net/rpy2/doc-2.2/html/changes.html

Obwohl andere, eine ähnliche Frage wurde in

extract coefficients from R lme model in rpy2 beantwortet

Aufgrund meiner aufgeworfene Frage

Lassen Sie uns die VA extrahieren riable y, die die Datenmatrix der endogenen Variablen darstellt.

Dies kann durch die Python-Attribut rx2 als

A=Model2.rx2('y') 
y=pd.DataFrame(np.array(A),columns=A.names[1]) 
y.head() 

Sie erreicht werden feststellen, dass die y.head() das gleiche wie das Original Datenrahmen df.head()

ist jedoch varresult das Element zu extrahieren ist ein bisschen mehr kompliziert

Ich folgte dem ähnlichen Argument wie in

A=Model2.rx2('varresult') 
print(A.names) 

Output: [1] "Number1" "Number2" 

Dann

B=A.rx2('Number1') 
print(B.names) 

Output: 
[1] "coefficients" "residuals"  "effects"  "rank"   

[5] "fitted.values" "assign"  "qr"   "df.residual" 

[9] "xlevels"  "call"   "terms"   "model" 

Zum Beispiel die Residuen der Regression aus der ersten Gleichung erhalten kann man die folgenden

resid1=np.array(B.rx2('residuals')) 
+0

Die Dokumentation Seiten, die Sie sich beziehen, sind ziemlich alt verwenden. Überprüfen Sie die Links unter https://rpy2.bitbucket.io für aktuelle Dokumentation. – lgautier

+0

@Igautier Vielen Dank für Ihren Kommentar. Aber ich benutze ein Windows 10 und aus irgendeinem Grund habe ich keinen Zugriff auf rpy2 v 2.9 wie hier https://stackoverflow.com/questions/11165123/install-rpy2-on-windows7-64bit-for-python- 2-7 Daher habe ich nur Zugriff auf die Dokumente, die ich gab – rsc05

Verwandte Themen