在rpy2中绘制R函数曲线

horcle_buzz

我正在尝试使绘图在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传递到curve函数)。

更笼统地说,我如何在rpy2中绘制函数曲线?这篇文章:在R中绘制函数曲线

编辑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)

我得到了预期的S形曲线。

我是python / 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] 

然后尝试通过传递这些参数来运行curve函数,但无济于事,尝试使用以下结构:

R.curve(invlogit(a + b*R.x)) 

除此以外,我还尝试了许多其他方法,所有这些方法都令人尴尬地怪异。

首先,是一个幼稚的问题:如果curve()中的(x)项是最后一个环境表达式的特殊R名称,那么我想我应该能够通过python / rpy2以某种方式访问​​它。

我知道它在曲线函数中的表示形式是101个元素的ListVector。我不理解它的含义,尽管它“是最后一个环境表达的特殊R名称”。有人可以详细说明一下吗?如果这是R中的对象,我是否至少不能通过低级接口访问它?

或者,实际上我是否必须创建x为python函数,以将我的x,y元组表示为两个列表,然后将它们转换为ListVector以便在函数中绘制其曲线。

第二:我是否应该无法invlogit(a + b*x)在python中构造函数并将其传递给R的曲线函数进行评估?

我抓住invlogit从R档在使用STAP图书馆阅读它:from rpy2.robjects.packages import STAP

第三:我是否使事情复杂化了?我的目标是在尝试在python / rpy2中进行新的分析之前,重新创建以前使用R / python / rpy2在R中进行的分析以处理所有特性。

完美的

简单地传递在实际的功能,呼叫,或类似的表达sinx在Python没有被分配。下面使用R文档中的曲线示例curve(sin, -2*pi, 2*pi)另外,由于您输出图形使用grDevices(内置R包)将图像保存到文件中:

import rpy2.robjects as ro
from rpy2.robjects.packages import importr

grdevices = importr('grDevices')

grdevices.png(file="Rpy2Curve.png", width=512, height=512)
p = ro.r('curve(sin, -2*pi, 2*pi)')    
grdevices.dev_off()

RPy2曲线图图像1

另外,您可以(x)按照链接显示的方式进行定义

grdevices.png(file="Rpy2Curve.png", width=512, height=512)
ro.r('''eq <- function(x) {x*x}''')
p = ro.r('curve(eq,1,1000)')            # OUTPUTS TO FILE
grdevices.dev_off()

p = ro.r('curve(eq,1,1000)')            # OUTPUTS TO SCREEN 

RPy2曲线图图像2


更新

专门针对OP的问题,要使用从模型系数得出的Python变量ab绘制logit逆曲线,请考虑将其连接到robjects.r()string参数:

import rpy2.robjects as ro
ro.r('invlogit <- function(x){ + exp(x)/(1 + exp(x)) }')

p = ro.r('curve(invlogit({0} + {1}*x), add = TRUE)'.format(a,b))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何通过Rpy2(v3)在Python中使用R中的`hclust`函数?

来自分类Dev

RPy2导入R源函数会产生错误

来自分类Dev

使用rpy2运行R函数时出错

来自分类Dev

使用 rpy2 从 Python 调用 R 函数

来自分类Dev

jupyter 中的 rpy2 正在呼应整个函数

来自分类Dev

用rpy2修改r对象

来自分类Dev

如何在Python代码中使用rpy2将R函数作为参数传递

来自分类Dev

rpy2:如何将向量从 Python 回调函数返回到 R?

来自分类Dev

在带有 rpy2 的 jupyter notebook 中找不到 ggplot 函数

来自分类Dev

在Python和Rpy2中使用R:如何ggplot2?

来自分类Dev

rpy2:加载在conda环境中安装的R版本,而不是系统中的版本

来自分类Dev

如何将列表传递给rpy2中的R并返回结果

来自分类Dev

如何在rpy2中使用R的赋值方法?

来自分类Dev

有没有办法在python / rpy2中访问R数据帧列名?

来自分类Dev

在Jupyter Notebook Rpy2中的R单元中使用熊猫数据框时出错

来自分类Dev

如何将Python函数与rpy2结合?

来自分类Dev

具有多个输入参数的 Python RPy2 函数

来自分类Dev

通过rpy2将列表从python传递到R

来自分类Dev

将逻辑回归从R迁移到rpy2

来自分类Dev

使用rpy2从python调用R脚本

来自分类Dev

如何使用rpy2访问R包的内部功能?

来自分类Dev

通过rpy2将列表从python传递到R

来自分类Dev

Rpy2:Pandas数据框不适合R

来自分类Dev

使用rpy2将Python变量传递给R

来自分类Dev

rpy2与标准R矩阵之间的差异

来自分类Dev

使用rpy2从python动态调用R库

来自分类Dev

将R示例函数与rpy2一起使用时发生意外行为吗?

来自分类Dev

Ubuntu中的rpy2安装错误

来自分类Dev

在rpy2中分配数据框列