Ich versuche rpy2 zu verwenden, um das R-Paket MatchIt aufzurufen. Ich habe Schwierigkeiten, das Ergebnis der übereinstimmenden Paare aus der $ match.matrix zu sehen. Hier ist der R-Code, den ich in Python ausführen möchte.Problem beim Aufrufen der R-Funktion von Python mit rpy2
matched <- cbind(lalonde[row.names(foo$match.matrix),"re78"],lalonde[foo$match.matrix,"re78"])
Hier ist mein Python-Code:
import readline
import rpy2.robjects
from rpy2.robjects.packages import importr
from rpy2.robjects import pandas2ri
from rpy2 import robjects as ro
import numpy as np
from scipy.stats import ttest_ind
import pandas as pd
from pandas import Series,DataFrame
pandas2ri.activate()
R = ro.r
MatchIt = importr('MatchIt')
base = importr('base')
df = R('lalonde')
lalonde = pandas2ri.py2ri(df)
formula = 'treat ~ age + educ + black + hispan + married + nodegree + re74 + re75'
foo = MatchIt.matchit(formula = R(formula),
data = lalonde,
method = R('"nearest"'),
ratio = 1)
matched = \
base.cbind(lalonde.rx[base.row_names(foo.rx2('match.matrix')),"re78"],
lalonde.rx[foo.rx2('match.matrix'),"re78"])
Dieser Brocken läuft:
:lalonde.rx(base.row_names(foo.rx2('match.matrix')),
"re78")
aber dieser Brocken
lalonde.rx[foo.rx2('match.matrix'),"re78"].
einen Fehler von zurückgibt
ValueError: The first parameter must be a tuple.
Die Ausgabe von
cbind(lalonde[row.names(foo$match.matrix),"re78"], lalonde[foo$match.matrix,"re78"])
soll ein Datenrahmen sein, der die Zeilennamen und Zellenwerte von $ foo match.matrix mit den Werten von „re78“ in dem lalonde Datenrahmen
Wo kommt 'lalonde' oder 'foo' ableiten? Und welche Art von Objekten sind sie?Ihr Code zeigt nicht ihre Zuordnung – Parfait
lalonde ist ein Datenrahmen, der in der MatchIt-Dokumentation verwendet wird. foo ist die Ausgabe der Funktion matchit(). foo $ match.matrix ist eine: n1 × Verhältnismatrix, wobei: - die Zeilennamen die Namen der Behandlungseinheiten darstellen (die mit der Zeile den Namen des in Daten angegebenen Datenrahmens übereinstimmen). - In jeder Spalte werden die Namen der Kontrolleinheit (en) gespeichert, die der Behandlungseinheit dieser Zeile entsprechen. Wenn zum Beispiel die Verhältniseingabe für den nächsten Nachbarn oder optimale Übereinstimmung mit 3 angegeben ist, repräsentieren die drei Spalten der Übereinstimmungsmatrix die drei Steuereinheiten, die auf eine Behandlungseinheit abgestimmt sind). – clfrazier
Sie müssen zuerst den 'lalonde'-Datenrahmen laden (siehe Seite 10 des PDF-Handbuchs). Versuchen Sie 'MatchIt.data (lalonde)'. Interessanter Python hat sich über dieses unqualifizierte und nicht zugewiesene Objekt nicht beklagen. – Parfait