Я пытаюсь получить график простой кривой в rpy2.Запланируйте кривую функции R в rpy2
curve((x))
в R ведет себя так, как ожидалось, но я не могу реализовать это в rpy2.
Когда я выполняю следующие команды в последовательности:
import rpy2.robjects as ro
R = ro.r
R.curve(R.x)
я получаю ошибку, что AttributeError: 'R' object has no attribute 'x'
...
Как получить доступ к x
как функция векторизации в Python? (Я могу выпустить ro.r('curve((x))')
, и он работает так, как ожидалось, но мне нужно иметь возможность передавать аргументы из python в функцию кривой).
В более общем плане, как я построить кривую функции в rpy2 ала это сообщение: plotting function curve in R
EDIT 1
Некоторые контекст:
Я пытаюсь построить кривую обратный логит:
invlogit = function(x){ + exp(x)/(1 + exp(x)) }
линейная функция:
invlogit(coef(mod1)[1] + coef(mod1)[2]*x
Где coef (mod1) - коэффициенты для GLM, на котором я бежал.
В R, можно сделать следующее:
plot(outcome~survrate, data = d, ylab = "P(outcome = 1 |
survrate)", xlab = "SURVRATE: Probability of Survival after 5
Years", xaxp = c(0, 95, 19))
curve(invlogit(coef(mod1)[1] + coef(mod1)[2]*x), add = TRUE)
И я получаю ожидаемый сигмовидной кривой.
Я питон/rpy2, я получаю мою модель и коэффициенты:
formula = 'outcome~survrate'
mod1 = R.glm(formula=R(formula), data=r_analytical_set, family=R('binomial(link="logit")'))
s = R.summary(mod1)
print(mod1)
print(R.summary(mod1))
Установите участок
formula = Formula('outcome~survrate')
formula.getenvironment()['outcome'] = data.rx2('outcome')
formula.getenvironment()['survrate'] = data.rx2('survrate')
R.plot(formula, data=data, ylab = 'P(outcome = 1 | outcome)', xlab = 'SURVRATE: Probability of Survival after 5
Years", xaxp = c(0, 95, 19))
До сих пор так хорошо ...
Тогда я получаю мой коэффициенты от модели:
a = R.coef(mod1)[0]
b = R.coef(mod1)[1]
А потом попробуйте запустить функцию кривой, передавая эти аргументы, все без толку, пытаясь такие конструкции, как
R.curve(invlogit(a + b*R.x))
Я пробовал много других тоже, кроме этого, все из которых являются ошеломляюще странно.
Во-первых, наивный вопрос: если термин (x) в кривой() является специальным обозначением R для последнего выражения среды, я предполагаю, что я должен получить доступ к нему каким-то образом через python/rpy2.
Я понимаю, что его представление в функции кривой является ListVector из 101 элемента. Я не понимаю, что это значит, потому что это «специальное обозначение R для последнего выражения среды». Может кто-нибудь прокомментировать?Если это объект в R, не должен ли я иметь доступ к нему через, по крайней мере, интерфейс низкого уровня?
Или мне действительно нужно создать x
в качестве функции python для представления моих x, y кортежей в виде двух списков, а затем преобразовать их в ListVector для использования в функции для построения кривой.
Во-вторых: Должен ли я не построить мою функцию, invlogit(a + b*x)
в python и передать ее для оценки в функции кривой R?
Я извлекаю invlogit
из файла R, читая его в использовании библиотеки STAP: from rpy2.robjects.packages import STAP
.
В-третьих: Я чем-то усложняю? Моя цель - воссоздать анализ, который я ранее делал в R, используя python/rpy2, чтобы работать по всем особенностям, прежде чем я попытаюсь сделать новый в python/rpy2.
Получил это, но почему 'ro.r ('curve ((x))')' работает, но 'ro.r.curve (ro.rx)' создает ошибку? Если я делаю 'str (кривая ((x))' из RI get: 'Список из 2 $ x: num [1: 101] 0 0,01 0,02 0,03 0,04 0,05 0,06 0,07 0,08 0,09 ... $ y: num [1: 101] 0 0,01 0,02 0,03 0,04 0,05 0,06 0,07 0,08 0,09 ... ', но это не выполняется в rpy2, если не выполнено как ro.r. ('Str (curve ((x))'). Согласно документация для R, 'x' является векторизованной числовой функцией (см. [кривая] (http://stat.ethz.ch/R-manual/R-patched/library/graphics/html/curve.html)) ... Я должен иметь доступ к этому из rpy2 в Pythonish, не должен ли я? –
Более фундаментально, есть ли способ доступа к 'x' в python, например' ro.rx'? –
Вы обертываете 'ro.r () 'дважды в этом втором утверждении, а' x' не является переменной. Термин '(x)' в 'curve()' является специальным обозначением R. для последнего выражения среды. Другой способ доступа к 'curve()' - импорт графики: 'graphi cs = importr ('graphics'); graphics.curve (...) '. Попытайтесь, чтобы я не мог передать функцию и хотел включить этот пример. – Parfait