Я пытаюсь использовать rpy2 для вызова пакета R MatchIt. Мне трудно увидеть результат согласованных пар из $ match.matrix. Вот код R, который я пытаюсь выполнить в python.Ошибка вызова функции R из Python с rpy2
matched <- cbind(lalonde[row.names(foo$match.matrix),"re78"],lalonde[foo$match.matrix,"re78"])
Вот мой питон код:
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"])
Этот блок работает:
lalonde.rx(base.row_names(foo.rx2('match.matrix')),
"re78")
, но этот кусок
lalonde.rx[foo.rx2('match.matrix'),"re78"].
возвращает ошибку:
ValueError: The first parameter must be a tuple.
Выход
cbind(lalonde[row.names(foo$match.matrix),"re78"], lalonde[foo$match.matrix,"re78"])
должен быть dataframe, который соответствует имена строк и значения ячеек обув $ match.matrix со значениями «re78» в Лалонда dataframe
Где 'lalonde' или' Foo' получить? И какие они объекты?Ваш код не показывает свое назначение. – Parfait
lalonde - это кадр данных, который используется в документации MatchIt. foo - выход функции matchit(). foo $ match.matrix является матрицей отношения n1 × где: - имена строк представляют собой названия единиц обработки (которые соответствуют строкам именам фрейма данных, указанным в данных). - каждый столбец хранит имя (имена) блока (ов) управления, согласованного с обработкой единицы этой строки. Например, когда значение отношения для ближайшего соседа или оптимальное согласование задано как 3, три столбца match.matrix представляют три блока управления, соответствующие одному блоку обработки). – clfrazier
Необходимо сначала загрузить фрейм данных lalonde (см. Стр. 10 руководства по PDF). Попробуйте 'MatchIt.data (lalonde)'. Интересный Python не жаловался на этот неквалифицированный и неназначенный объект. – Parfait